ERC-20
Overview
Max Total Supply
10,000,000,000 TINU
Holders
215
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,861,784.48588870998909127 TINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TurtleInu
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-27 */ // SPDX-License-Identifier: MIT /* _____ _ _ _____ /__ \_ _ _ __| |_| | ___ \_ \_ __ _ _ / /\/ | | | '__| __| |/ _ \ / /\/ '_ \| | | | / / | |_| | | | |_| | __/ /\/ /_ | | | | |_| | \/ \__,_|_| \__|_|\___| \____/ |_| |_|\__,_| TURTLE INU Dev: @seanking52 */ pragma solidity 0.8.13; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract TurtleInu is ERC20, Ownable { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public operationsAddress; address public treasuryAddress; uint256 public tradingActiveBlock = 0; // 0 means trading is not active uint256 public blockForPenaltyEnd; mapping(address => bool) public boughtEarly; address[] public earlyBuyers; uint256 public botsCaught; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Investor sell limit variables mapping(address => uint256) public nextInvestorSellDate; uint256 public timeBetweenBuys = 360 minutes; // 6 hours uint256 public privateSaleCooldown = 1 minutes; // 1 minutes // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public buyLiquidityFee; uint256 public buyTreasuryFee; uint256 private originalSellOperationsFee; uint256 private originalSellLiquidityFee; uint256 private originalSellTreasuryFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public sellTreasuryFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForTreasury; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedMaxBuyAmount(uint256 newAmount); event UpdatedMaxSellAmount(uint256 newAmount); event UpdatedMaxWalletAmount(uint256 newAmount); event UpdatedOperationsAddress(address indexed newWallet); event UpdatedTreasuryAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); event UpdatedPrivateMaxSell(uint256 amount); constructor() payable ERC20("Turtle Inu", "TINU") { address newOwner = msg.sender; // Deployer is the owner // initialize router IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); dexRouter = _dexRouter; lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 10 * 1e9 * 1e18; // 10 billion // Reference: 1 ETH = 0.23% at launch maxBuyAmount = (totalSupply * 15) / 10000; // 0.15% maxSellAmount = (totalSupply * 5) / 10000; // 0.05% maxWallet = (totalSupply * 25) / 10000; // 0.25% swapTokensAtAmount = (totalSupply * 2) / 10000; // 0.02 % buyOperationsFee = 4; buyLiquidityFee = 0; buyTreasuryFee = 2; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; originalSellOperationsFee = 9; originalSellLiquidityFee = 3; originalSellTreasuryFee = 0; sellOperationsFee = 14; sellLiquidityFee = 4; sellTreasuryFee = 0; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; operationsAddress = address(0x76580D97Ed288d3a740f229DE2eD2D04Aa785e77); treasuryAddress = address(0x2d22699823B12135b1c373De253361eED6467cE2); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); _excludeFromMaxTransaction(address(treasuryAddress), true); _excludeFromMaxTransaction(0xbdCca5B1710094C3e976f1Bd95d2c4510270e3cd, true); // Team tokens wallet _excludeFromMaxTransaction(0xC7E42C8C4e0B0a63205b0a9d498Fe0c48b24382f, true); // Exchange tokens wallet _excludeFromMaxTransaction(0x87E64a130Fffe1C784cbe9308B3AD220Af07cc5E, true); // Shill competitions tokens wallet _excludeFromMaxTransaction(0x4f4ec51eb5F0C2f493812Dd7b9A9d7F44DDd7ab8, true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); excludeFromFees(address(treasuryAddress), true); excludeFromFees(0xbdCca5B1710094C3e976f1Bd95d2c4510270e3cd, true); // Team tokens wallet excludeFromFees(0xC7E42C8C4e0B0a63205b0a9d498Fe0c48b24382f, true); // Exchange tokens wallet excludeFromFees(0x87E64a130Fffe1C784cbe9308B3AD220Af07cc5E, true); // Shill competitions tokens wallet _createInitialSupply(newOwner, (totalSupply * 7) / 100); // Tokens for private salers _createInitialSupply(0xbdCca5B1710094C3e976f1Bd95d2c4510270e3cd, (totalSupply * 5) / 100); // Tokens for team _createInitialSupply(0xC7E42C8C4e0B0a63205b0a9d498Fe0c48b24382f, (totalSupply * 75) / 1000); // Tokens for exchanges _createInitialSupply(0x2d22699823B12135b1c373De253361eED6467cE2, (totalSupply * 75) / 1000); // Tokens for staking _createInitialSupply(0x87E64a130Fffe1C784cbe9308B3AD220Af07cc5E, (totalSupply * 1) / 100); // Tokens for competitions _createInitialSupply(0x4f4ec51eb5F0C2f493812Dd7b9A9d7F44DDd7ab8, (totalSupply * 42) / 10000); _createInitialSupply(address(0xdead), (totalSupply * 6158) / 10000); // Burn _createInitialSupply(address(this), (totalSupply * 10) / 100); // Tokens for liquidity transferOwnership(newOwner); } receive() external payable {} function enableTrading(uint256 blocksForPenalty) external onlyOwner { require(!tradingActive, "Cannot reenable trading"); require( blocksForPenalty <= 10, "Cannot make penalty blocks more than 10" ); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); } function getEarlyBuyers() external view returns (address[] memory) { return earlyBuyers; } function removeBoughtEarly(address wallet) external onlyOwner { require(boughtEarly[wallet], "Wallet is already not flagged."); boughtEarly[wallet] = false; } function emergencyUpdateRouter(address router) external onlyOwner { require(!tradingActive, "Cannot update after trading is functional"); dexRouter = IDexRouter(router); } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function updateMaxBuyAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 10000) / 1e18, "Cannot set max buy amount lower than 0.01%" ); require( newNum >= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max buy amount higher than 2%" ); maxBuyAmount = newNum * (1e18); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 10000) / 1e18, "Cannot set max sell amount lower than 0.01%" ); require( newNum >= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max sell amount higher than 2%" ); maxSellAmount = newNum * (1e18); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max wallet amount lower than 0.5%" ); require( newNum >= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max wallet amount higher than 2%" ); maxWallet = newNum * (1e18); emit UpdatedMaxWalletAmount(maxWallet); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 1) / 1000, "Swap amount cannot be higher than 0.1% total supply." ); swapTokensAtAmount = newAmount; } function updateTimeBetweenBuys(uint256 timeInMinutes) external onlyOwner { require(timeInMinutes > 0 && timeInMinutes <= 1440); timeBetweenBuys = timeInMinutes * 1 minutes; } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function airdropToWallets( address[] memory wallets, uint256[] memory amountsInTokens ) external onlyOwner { require( wallets.length == amountsInTokens.length, "arrays must be the same length" ); require( wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits" ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; uint256 amount = amountsInTokens[i]; super._transfer(msg.sender, wallet, amount); } } function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyTreasuryFee = _treasuryFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _treasuryFee ) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellTreasuryFee = _treasuryFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function restoreTaxes() external onlyOwner { sellOperationsFee = originalSellOperationsFee; sellLiquidityFee = originalSellLiquidityFee; sellTreasuryFee = originalSellTreasuryFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if (!earlyBuyPenaltyInEffect() && tradingActive) { require( !boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address." ); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(lpPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled. Try again later." ); _holderLastTransferTimestamp[tx.origin] = block.number; _holderLastTransferTimestamp[to] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxBuyAmount."); require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded"); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxSellAmount."); require(nextInvestorSellDate[from] <= block.timestamp, "Cannot sell yet"); nextInvestorSellDate[from] = block.timestamp + timeBetweenBuys; } else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedFromFees[to]) { revert("Investors cannot transfer and must sell only or transfer to a whitelisted address."); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // bot/sniper penalty. if ( (earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 8 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0 ) { if (!earlyBuyPenaltyInEffect()) { // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*) maxBuyAmount -= 1; } if (!boughtEarly[to]) { boughtEarly[to] = true; botsCaught += 1; earlyBuyers.push(to); emit CaughtEarlyBuyer(to); } fees = (amount * 99) / 100; // tax bots with 99% :) tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; tokensForTreasury += (fees * sellTreasuryFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function earlyBuyPenaltyInEffect() public view returns (bool) { return block.number < blockForPenaltyEnd; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); // Treasury receives tokens! if(tokensForTreasury > 0 && balanceOf(address(this)) >= tokensForTreasury) { super._transfer(address(this), address(treasuryAddress), tokensForTreasury); } tokensForTreasury = 0; uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForTreasury; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } bool success; // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance; uint256 ethForLiquidity = ethBalance; uint256 ethForOperations = (ethBalance * tokensForOperations) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForOperations; tokensForLiquidity = 0; tokensForOperations = 0; tokensForTreasury = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(operationsAddress).call{ value: address(this).balance }(""); } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck or someone sends to the address function withdrawStuckETH() external onlyOwner { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function setOperationsAddress(address _operationsAddress) external onlyOwner { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); emit UpdatedOperationsAddress(_operationsAddress); } function setTreasuryAddress(address _treasuryAddress) external onlyOwner { require( _treasuryAddress != address(0), "_treasuryAddress address cannot be 0" ); treasuryAddress = payable(_treasuryAddress); emit UpdatedTreasuryAddress(_treasuryAddress); } // force Swap back if slippage issues. function forceSwapBack() external onlyOwner { require( balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction" ); swapping = true; swapBack(); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } function removeLimits() external onlyOwner { limitsInEffect = false; } function restoreLimits() external onlyOwner { limitsInEffect = true; } function letsFuckingGo( address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty ) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); require( blocksForPenalty < 10, "Cannot make penalty blocks more than 10" ); require( wallets.length == amountsInTokens.length, "arrays must be the same length" ); require( wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits" ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; nextInvestorSellDate[wallet] = block.timestamp + privateSaleCooldown; // No sales in the first 3 hours after launch uint256 amount = amountsInTokens[i]; super._transfer(msg.sender, wallet, amount); } //standard enable trading tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); // create pair // lpPair = IDexFactory(dexRouter.factory()).createPair( // address(this), // dexRouter.WETH() // ); // _excludeFromMaxTransaction(address(lpPair), true); // _setAutomatedMarketMakerPair(address(lpPair), true); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable address(msg.sender), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"letsFuckingGo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextInvestorSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateTimeBetweenBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600e556013805462ffffff19166001908117909155615460601555603c6016556018805460ff19169091179055600a608081815269547572746c6520496e7560b01b60a0908152610100604052600460c09081526354494e5560e01b60e0529192620000709160039162000a1b565b5080516200008690600490602084019062000a1b565b50505060006200009b620006b860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004e64833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000168919062000ac1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f1919062000ac1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000265919062000ac1565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000291906001620006bc565b600a54620002aa906001600160a01b031660016200071f565b6b204fce5e3e25026110000000612710620002c782600f62000b09565b620002d3919062000b2b565b600655612710620002e682600562000b09565b620002f2919062000b2b565b6007556127106200030582601962000b09565b62000311919062000b2b565b6008556127106200032482600262000b09565b62000330919062000b2b565b600b556004601a8190556000601b8190556002601c8190559162000355919062000b4e565b62000361919062000b4e565b6019556009601d556003601e556000601f819055600e6021819055600460228190556023839055620003939162000b4e565b6200039f919062000b4e565b602055600c80546001600160a01b03199081167376580d97ed288d3a740f229de2ed2d04aa785e7717909155600d8054909116732d22699823b12135b1c373de253361eed6467ce2179055620003f7836001620006bc565b62000404306001620006bc565b6200041361dead6001620006bc565b600c546200042c906001600160a01b03166001620006bc565b600d5462000445906001600160a01b03166001620006bc565b6200046673bdcca5b1710094c3e976f1bd95d2c4510270e3cd6001620006bc565b6200048773c7e42c8c4e0b0a63205b0a9d498fe0c48b24382f6001620006bc565b620004a87387e64a130fffe1c784cbe9308b3ad220af07cc5e6001620006bc565b620004c9734f4ec51eb5f0c2f493812dd7b9a9d7f44ddd7ab86001620006bc565b620004d68360016200078b565b620004e33060016200078b565b620004f261dead60016200078b565b600c546200050b906001600160a01b031660016200078b565b600d5462000524906001600160a01b031660016200078b565b6200054573bdcca5b1710094c3e976f1bd95d2c4510270e3cd60016200078b565b6200056673c7e42c8c4e0b0a63205b0a9d498fe0c48b24382f60016200078b565b620005877387e64a130fffe1c784cbe9308b3ad220af07cc5e60016200078b565b620005ad8360646200059b84600762000b09565b620005a7919062000b2b565b62000839565b620005d573bdcca5b1710094c3e976f1bd95d2c4510270e3cd60646200059b84600562000b09565b620005fe73c7e42c8c4e0b0a63205b0a9d498fe0c48b24382f6103e86200059b84604b62000b09565b62000627732d22699823b12135b1c373de253361eed6467ce26103e86200059b84604b62000b09565b6200064f7387e64a130fffe1c784cbe9308b3ad220af07cc5e60646200059b84600162000b09565b62000678734f4ec51eb5f0c2f493812dd7b9a9d7f44ddd7ab86127106200059b84602a62000b09565b6200069061dead6127106200059b8461180e62000b09565b620006a43060646200059b84600a62000b09565b620006af836200091e565b50505062000ba5565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200074f8282620006bc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620007da5760405162461bcd60e51b8152602060048201819052602482015260008051602062004e4483398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620008915760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620007d1565b8060026000828254620008a5919062000b4e565b90915550506001600160a01b03821660009081526020819052604081208054839290620008d490849062000b4e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620009695760405162461bcd60e51b8152602060048201819052602482015260008051602062004e448339815191526044820152606401620007d1565b6001600160a01b038116620009d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620007d1565b6005546040516001600160a01b0380841692169060008051602062004e6483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b82805462000a299062000b69565b90600052602060002090601f01602090048101928262000a4d576000855562000a98565b82601f1062000a6857805160ff191683800117855562000a98565b8280016001018555821562000a98579182015b8281111562000a9857825182559160200191906001019062000a7b565b5062000aa692915062000aaa565b5090565b5b8082111562000aa6576000815560010162000aab565b60006020828403121562000ad457600080fd5b81516001600160a01b038116811462000aec57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000b265762000b2662000af3565b500290565b60008262000b4957634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000b645762000b6462000af3565b500190565b600181811c9082168062000b7e57607f821691505b60208210810362000b9f57634e487b7160e01b600052602260045260246000fd5b50919050565b61428f8062000bb56000396000f3fe60806040526004361061042a5760003560e01c80638366e79a11610229578063cc2ffe7c1161012e578063ea4cfe12116100b6578063f2fde38b1161007a578063f2fde38b14610c3c578063f5648a4f14610c5c578063f637434214610c71578063f8b45b0514610c87578063fb002c9714610c9d57600080fd5b8063ea4cfe1214610bba578063eb1e361514610bda578063eb472fc414610bf0578063ee40166e14610c10578063f11a24d314610c2657600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b09578063dd62ed3e14610b29578063e210488d14610b6f578063e2f4560514610b8f578063e884f26014610ba557600080fd5b8063cc2ffe7c14610a90578063d0d52b5d14610aa6578063d257b34f14610ad3578063d85ba06314610af357600080fd5b8063a62068ce116101b1578063c024666811610180578063c0246668146109f6578063c17b5b8c14610a16578063c18bc19514610a36578063c5f956af14610a56578063c876d0b914610a7657600080fd5b8063a62068ce14610971578063a9059cbb14610987578063b62496f5146109a7578063bbc0c742146109d757600080fd5b806395d89b41116101f857806395d89b41146108e55780639a5bd2dd146108fa5780639a7a23d61461091c578063a28e86d31461093c578063a457c2d71461095157600080fd5b80638366e79a1461086157806385ecfd281461088157806388e765ff146108b15780638da5cb5b146108c757600080fd5b806351f205e41161032f5780636b0a894c116102b7578063715018a611610286578063715018a6146107d7578063751039fc146107ec5780637571336a146108015780638095d5641461082157806382aa7c681461084157600080fd5b80636b0a894c1461076b5780636b2fb124146107815780636ddd17131461079757806370a08231146107b757600080fd5b80635c068a8c116102fe5780635c068a8c146106f45780635eed98e21461070a5780636605bfda1461071f57806366d602ae1461073f5780636a486a8e1461075557600080fd5b806351f205e41461069257806358a6d531146106a75780635a139dd4146106be5780635bb988c9146106d457600080fd5b806323b872dd116103b2578063452ed4f111610381578063452ed4f11461060c578063499b83941461062c5780634a62bb651461064c5780634f77f6c01461066657806350f4a5341461067c57600080fd5b806323b872dd146105905780632be32b61146105b0578063313ce567146105d057806339509351146105ec57600080fd5b806310d5de53116103f957806310d5de53146104eb5780631805805b1461051b57806318160ddd1461053b5780631a8145bb1461055a5780632307b4411461057057600080fd5b806306fdde03146104365780630758d92414610461578063095ea7b31461049957806310c01979146104c957600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cb3565b6040516104589190613afe565b60405180910390f35b34801561046d57600080fd5b50600954610481906001600160a01b031681565b6040516001600160a01b039091168152602001610458565b3480156104a557600080fd5b506104b96104b4366004613b6b565b610d45565b6040519015158152602001610458565b3480156104d557600080fd5b506104e96104e4366004613b97565b610d5b565b005b3480156104f757600080fd5b506104b9610506366004613bb0565b60286020526000908152604090205460ff1681565b34801561052757600080fd5b506104e9610536366004613bb0565b610dba565b34801561054757600080fd5b506002545b604051908152602001610458565b34801561056657600080fd5b5061054c60255481565b34801561057c57600080fd5b506104e961058b366004613d0e565b610e70565b34801561059c57600080fd5b506104b96105ab366004613d72565b610f79565b3480156105bc57600080fd5b506104e96105cb366004613b97565b611023565b3480156105dc57600080fd5b5060405160128152602001610458565b3480156105f857600080fd5b506104b9610607366004613b6b565b6111c4565b34801561061857600080fd5b50600a54610481906001600160a01b031681565b34801561063857600080fd5b506104e9610647366004613bb0565b611200565b34801561065857600080fd5b506013546104b99060ff1681565b34801561067257600080fd5b5061054c60215481565b34801561068857600080fd5b5061054c60155481565b34801561069e57600080fd5b506104e96112d9565b3480156106b357600080fd5b50600f5443106104b9565b3480156106ca57600080fd5b5061054c601a5481565b3480156106e057600080fd5b506104e96106ef366004613bb0565b6113e2565b34801561070057600080fd5b5061054c601c5481565b34801561071657600080fd5b506104e9611495565b34801561072b57600080fd5b506104e961073a366004613bb0565b6114f1565b34801561074b57600080fd5b5061054c60075481565b34801561076157600080fd5b5061054c60205481565b34801561077757600080fd5b5061054c60125481565b34801561078d57600080fd5b5061054c60235481565b3480156107a357600080fd5b506013546104b99062010000900460ff1681565b3480156107c357600080fd5b5061054c6107d2366004613bb0565b6115c7565b3480156107e357600080fd5b506104e96115e2565b3480156107f857600080fd5b506104e9611656565b34801561080d57600080fd5b506104e961081c366004613dc1565b61168c565b34801561082d57600080fd5b506104e961083c366004613dfa565b611754565b34801561084d57600080fd5b506104e961085c366004613b97565b6117f7565b34801561086d57600080fd5b506104b961087c366004613e26565b6118eb565b34801561088d57600080fd5b506104b961089c366004613bb0565b60106020526000908152604090205460ff1681565b3480156108bd57600080fd5b5061054c60065481565b3480156108d357600080fd5b506005546001600160a01b0316610481565b3480156108f157600080fd5b5061044b611b25565b34801561090657600080fd5b5061090f611b34565b6040516104589190613e98565b34801561092857600080fd5b506104e9610937366004613dc1565b611b95565b34801561094857600080fd5b506104e9611c89565b34801561095d57600080fd5b506104b961096c366004613b6b565b611cc2565b34801561097d57600080fd5b5061054c600f5481565b34801561099357600080fd5b506104b96109a2366004613b6b565b611d5b565b3480156109b357600080fd5b506104b96109c2366004613bb0565b60296020526000908152604090205460ff1681565b3480156109e357600080fd5b506013546104b990610100900460ff1681565b348015610a0257600080fd5b506104e9610a11366004613dc1565b611d68565b348015610a2257600080fd5b506104e9610a31366004613dfa565b611df1565b348015610a4257600080fd5b506104e9610a51366004613b97565b611e94565b348015610a6257600080fd5b50600d54610481906001600160a01b031681565b348015610a8257600080fd5b506018546104b99060ff1681565b348015610a9c57600080fd5b5061054c60265481565b348015610ab257600080fd5b5061054c610ac1366004613bb0565b60146020526000908152604090205481565b348015610adf57600080fd5b506104e9610aee366004613b97565b612033565b348015610aff57600080fd5b5061054c60195481565b348015610b1557600080fd5b506104e9610b24366004613b97565b61217e565b348015610b3557600080fd5b5061054c610b44366004613e26565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7b57600080fd5b506104e9610b8a366004613eab565b61231a565b348015610b9b57600080fd5b5061054c600b5481565b348015610bb157600080fd5b506104e961268e565b348015610bc657600080fd5b50600c54610481906001600160a01b031681565b348015610be657600080fd5b5061054c60165481565b348015610bfc57600080fd5b50610481610c0b366004613b97565b6126c4565b348015610c1c57600080fd5b5061054c600e5481565b348015610c3257600080fd5b5061054c601b5481565b348015610c4857600080fd5b506104e9610c57366004613bb0565b6126ee565b348015610c6857600080fd5b506104e96127d9565b348015610c7d57600080fd5b5061054c60225481565b348015610c9357600080fd5b5061054c60085481565b348015610ca957600080fd5b5061054c60245481565b606060038054610cc290613f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90613f18565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b5050505050905090565b6000610d52338484612850565b50600192915050565b6005546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610d8590613f52565b60405180910390fd5b600081118015610da057506105a08111155b610da957600080fd5b610db481603c613f9d565b60155550565b6005546001600160a01b03163314610de45760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff1615610e4e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d85565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b8152600401610d8590613f52565b8051825114610eeb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d85565b60c8825110610f0c5760405162461bcd60e51b8152600401610d8590613fbc565b60005b8251811015610f74576000838281518110610f2c57610f2c614012565b602002602001015190506000838381518110610f4a57610f4a614012565b60200260200101519050610f5f338383612974565b50508080610f6c90614028565b915050610f0f565b505050565b6000610f86848484612ac9565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561100b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d85565b6110188533858403612850565b506001949350505050565b6005546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a764000061271061106260025490565b61106d906001613f9d565b6110779190614041565b6110819190614041565b8110156110e35760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610d85565b670de0b6b3a764000060646110f760025490565b611102906002613f9d565b61110c9190614041565b6111169190614041565b8110156111765760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782062757920616d6f756e7420686967686572604482015267207468616e20322560c01b6064820152608401610d85565b61118881670de0b6b3a7640000613f9d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d529185906111fb908690614063565b612850565b6005546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661128f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d85565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146113035760405162461bcd60e51b8152600401610d8590613f52565b600b5461130f306115c7565b1015611385576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d85565b600a805460ff60a01b1916600160a01b1790556113a06136c5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811660009081526010602052604090205460ff166114745760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d85565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146114bf5760405162461bcd60e51b8152600401610d8590613f52565b601d546021819055601e546022819055601f546023819055916114e29190614063565b6114ec9190614063565b602055565b6005546001600160a01b0316331461151b5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661157d5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610d85565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461160c5760405162461bcd60e51b8152600401610d8590613f52565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116805760405162461bcd60e51b8152600401610d8590613f52565b6013805460ff19169055565b6005546001600160a01b031633146116b65760405162461bcd60e51b8152600401610d8590613f52565b8061172957600a546001600160a01b03908116908316036117295760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d85565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610d8590613f52565b601a839055601b829055601c819055806117988385614063565b6117a29190614063565b6019819055600f1015610f745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d85565b6005546001600160a01b031633146118215760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff16156118795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d85565b600a81111561189a5760405162461bcd60e51b8152600401610d859061407b565b6013805462ffff0019166201010017905543600e8190556118bc908290614063565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119185760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03831661196e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d85565b6001600160a01b0383163014158061198e5750601354610100900460ff16155b6119f75760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d85565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906140c2565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad991906140db565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610cc290613f18565b60606011805480602002602001604051908101604052809291908181526020018280548015610d3b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b6e575050505050905090565b6005546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610d8590613f52565b600a546001600160a01b0390811690831603611c435760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d85565b611c4d828261387a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610d8590613f52565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d85565b611d513385858403612850565b5060019392505050565b6000610d52338484612ac9565b6005546001600160a01b03163314611d925760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611e1b5760405162461bcd60e51b8152600401610d8590613f52565b60218390556022829055602381905580611e358385614063565b611e3f9190614063565b602081905560141015610f745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d85565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a76400006103e8611ed360025490565b611ede906005613f9d565b611ee89190614041565b611ef29190614041565b811015611f565760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d85565b670de0b6b3a76400006064611f6a60025490565b611f75906002613f9d565b611f7f9190614041565b611f899190614041565b811015611fec5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d85565b611ffe81670de0b6b3a7640000613f9d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016111b9565b6005546001600160a01b0316331461205d5760405162461bcd60e51b8152600401610d8590613f52565b620186a061206a60025490565b612075906001613f9d565b61207f9190614041565b8110156120ec5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d85565b6103e86120f860025490565b612103906001613f9d565b61210d9190614041565b8111156121795760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d85565b600b55565b6005546001600160a01b031633146121a85760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a76400006127106121bd60025490565b6121c8906001613f9d565b6121d29190614041565b6121dc9190614041565b81101561223f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610d85565b670de0b6b3a7640000606461225360025490565b61225e906002613f9d565b6122689190614041565b6122729190614041565b8110156122d35760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d85565b6122e581670de0b6b3a7640000613f9d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016111b9565b6005546001600160a01b031633146123445760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff16156123b05760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d85565b600a81106123d05760405162461bcd60e51b8152600401610d859061407b565b81518351146124215760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d85565b60c88351106124425760405162461bcd60e51b8152600401610d8590613fbc565b60005b83518110156124d457600084828151811061246257612462614012565b602002602001015190506016544261247a9190614063565b6001600160a01b03821660009081526014602052604081209190915584518590849081106124aa576124aa614012565b602002602001015190506124bf338383612974565b505080806124cc90614028565b915050612445565b506013805462ffff0019166201010017905543600e8190556124f7908290614063565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161257f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d85565b600061258a306115c7565b116125e65760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d85565b6009546126019030906001600160a01b03166111fb826115c7565b6009546001600160a01b031663f305d719473061261d816115c7565b60008033426040518863ffffffff1660e01b8152600401612643969594939291906140f8565b60606040518083038185885af1158015612661573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126869190614133565b505050505050565b6005546001600160a01b031633146126b85760405162461bcd60e51b8152600401610d8590613f52565b6018805460ff19169055565b601181815481106126d457600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146127185760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661277d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d85565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146128035760405162461bcd60e51b8152600401610d8590613f52565b604051600090339047908381818185875af1925050503d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b50505050565b6001600160a01b0383166128b25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d85565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d85565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661299a5760405162461bcd60e51b8152600401610d8590614161565b6001600160a01b0382166129c05760405162461bcd60e51b8152600401610d85906141a6565b6001600160a01b03831660009081526020819052604090205481811015612a385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d85565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a6f908490614063565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612abb91815260200190565b60405180910390a350505050565b6001600160a01b038316612aef5760405162461bcd60e51b8152600401610d8590614161565b6001600160a01b038216612b155760405162461bcd60e51b8152600401610d85906141a6565b60008111612b655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d85565b601354610100900460ff16612bf8576001600160a01b03831660009081526027602052604090205460ff1680612bb357506001600160a01b03821660009081526027602052604090205460ff165b612bf85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d85565b600f544310158015612c115750601354610100900460ff165b15612ce1576001600160a01b03831660009081526010602052604090205460ff161580612c4b57506005546001600160a01b038381169116145b80612c6057506001600160a01b03821661dead145b612ce15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d85565b60135460ff16156131a4576005546001600160a01b03848116911614801590612d1857506005546001600160a01b03838116911614155b8015612d2f57506001600160a01b03821661dead14155b8015612d5457506001600160a01b03831660009081526027602052604090205460ff16155b8015612d7957506001600160a01b03821660009081526027602052604090205460ff16155b156131a45760185460ff1615612e92576009546001600160a01b03838116911614801590612db55750600a546001600160a01b03838116911614155b15612e9257612dc56002436141e9565b32600090815260176020526040902054108015612e035750612de86002436141e9565b6001600160a01b038316600090815260176020526040902054105b612e6d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d85565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff168015612ed357506001600160a01b03821660009081526028602052604090205460ff16155b15612f9f57600654811115612f405760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc213abca0b6b7bab73a1760991b6064820152608401610d85565b600854612f4c836115c7565b612f569083614063565b1115612f9a5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d85565b6131a4565b6001600160a01b03821660009081526029602052604090205460ff168015612fe057506001600160a01b03831660009081526028602052604090205460ff16155b156130d45760075481111561304f5760405162461bcd60e51b815260206004820152602f60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526e1036b0bc29b2b63620b6b7bab73a1760891b6064820152608401610d85565b6001600160a01b0383166000908152601460205260409020544210156130a95760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610d85565b6015546130b69042614063565b6001600160a01b0384166000908152601460205260409020556131a4565b6001600160a01b03821660009081526028602052604090205460ff1615801561311657506001600160a01b03821660009081526027602052604090205460ff16155b156131a45760405162461bcd60e51b815260206004820152605260248201527f496e766573746f72732063616e6e6f74207472616e7366657220616e64206d7560448201527f73742073656c6c206f6e6c79206f72207472616e7366657220746f206120776860648201527134ba32b634b9ba32b21030b2323932b9b99760711b608482015260a401610d85565b60006131af306115c7565b600b54909150811080159081906131ce575060135462010000900460ff165b80156131e45750600a54600160a01b900460ff16155b801561320857506001600160a01b03841660009081526029602052604090205460ff165b1561323657600a805460ff60a01b1916600160a01b1790556132286136c5565b600a805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff168061327857506001600160a01b03851660009081526027602052604090205460ff165b15613281575060005b600081156136b157600f544310806132c75750670c7d713b49da00006006546132aa91906141e9565b85101580156132c7575043600f5460086132c49190614063565b10155b80156132eb57506001600160a01b03871660009081526029602052604090205460ff165b801561331057506001600160a01b03861660009081526029602052604090205460ff16155b801561333557506001600160a01b03861660009081526027602052604090205460ff16155b801561334357506000601954115b156134fa57600f54431061336a5760016006600082825461336491906141e9565b90915550505b6001600160a01b03861660009081526010602052604090205460ff1661344a576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916133c3908490614063565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064613457866063613f9d565b6134619190614041565b9050601954601b54826134749190613f9d565b61347e9190614041565b6025600082825461348f9190614063565b9091555050601954601a546134a49083613f9d565b6134ae9190614041565b602460008282546134bf9190614063565b9091555050601954601c546134d49083613f9d565b6134de9190614041565b602660008282546134ef9190614063565b909155506136939050565b6001600160a01b03861660009081526029602052604090205460ff16801561352457506000602054115b156135b6576064602054866135399190613f9d565b6135439190614041565b9050602054602254826135569190613f9d565b6135609190614041565b602560008282546135719190614063565b90915550506020546021546135869083613f9d565b6135909190614041565b602460008282546135a19190614063565b90915550506020546023546134d49083613f9d565b6001600160a01b03871660009081526029602052604090205460ff1680156135e057506000601954115b15613693576064601954866135f59190613f9d565b6135ff9190614041565b9050601954601b54826136129190613f9d565b61361c9190614041565b6025600082825461362d9190614063565b9091555050601954601a546136429083613f9d565b61364c9190614041565b6024600082825461365d9190614063565b9091555050601954601c546136729083613f9d565b61367c9190614041565b6026600082825461368d9190614063565b90915550505b80156136a4576136a4873083612974565b6136ae81866141e9565b94505b6136bc878787612974565b50505050505050565b60006136d0306115c7565b905060006026541180156136ee57506026546136eb306115c7565b10155b1561371057600d546026546137109130916001600160a01b0390911690612974565b60006026819055602454602554829161372891614063565b6137329190614063565b905081158061373f575080155b15613748575050565b600b5461375690600a613f9d565b82111561376e57600b5461376b90600a613f9d565b91505b600080600283602554866137829190613f9d565b61378c9190614041565b6137969190614041565b90506137aa6137a582866141e9565b6138a8565b602554479081906000906137c090600290614041565b6137ca90876141e9565b6024546137d79085613f9d565b6137e19190614041565b90506137ed81836141e9565b6000602581905560248190556026559150831580159061380d5750600082115b1561381c5761381c84836139fa565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613869576040519150601f19603f3d011682016040523d82523d6000602084013e61386e565b606091505b50505050505050505050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611c4d8282613a9b565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138dd576138dd614012565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395a9190614200565b8160018151811061396d5761396d614012565b6001600160a01b0392831660209182029290920101526009546139939130911684612850565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139cc90859060009086903090429060040161421d565b600060405180830381600087803b1580156139e657600080fd5b505af1158015612686573d6000803e3d6000fd5b600954613a129030906001600160a01b031684612850565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613a519030908790600090819061dead9042906004016140f8565b60606040518083038185885af1158015613a6f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a949190614133565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613b2b57858101830151858201604001528201613b0f565b81811115613b3d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b6857600080fd5b50565b60008060408385031215613b7e57600080fd5b8235613b8981613b53565b946020939093013593505050565b600060208284031215613ba957600080fd5b5035919050565b600060208284031215613bc257600080fd5b8135613bcd81613b53565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1357613c13613bd4565b604052919050565b600067ffffffffffffffff821115613c3557613c35613bd4565b5060051b60200190565b600082601f830112613c5057600080fd5b81356020613c65613c6083613c1b565b613bea565b82815260059290921b84018101918181019086841115613c8457600080fd5b8286015b84811015613ca8578035613c9b81613b53565b8352918301918301613c88565b509695505050505050565b600082601f830112613cc457600080fd5b81356020613cd4613c6083613c1b565b82815260059290921b84018101918181019086841115613cf357600080fd5b8286015b84811015613ca85780358352918301918301613cf7565b60008060408385031215613d2157600080fd5b823567ffffffffffffffff80821115613d3957600080fd5b613d4586838701613c3f565b93506020850135915080821115613d5b57600080fd5b50613d6885828601613cb3565b9150509250929050565b600080600060608486031215613d8757600080fd5b8335613d9281613b53565b92506020840135613da281613b53565b929592945050506040919091013590565b8015158114613b6857600080fd5b60008060408385031215613dd457600080fd5b8235613ddf81613b53565b91506020830135613def81613db3565b809150509250929050565b600080600060608486031215613e0f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613e3957600080fd5b8235613e4481613b53565b91506020830135613def81613b53565b600081518084526020808501945080840160005b83811015613e8d5781516001600160a01b031687529582019590820190600101613e68565b509495945050505050565b602081526000613bcd6020830184613e54565b600080600060608486031215613ec057600080fd5b833567ffffffffffffffff80821115613ed857600080fd5b613ee487838801613c3f565b94506020860135915080821115613efa57600080fd5b50613f0786828701613cb3565b925050604084013590509250925092565b600181811c90821680613f2c57607f821691505b602082108103613f4c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613fb757613fb7613f87565b500290565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161403a5761403a613f87565b5060010190565b60008261405e57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561407657614076613f87565b500190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6000602082840312156140d457600080fd5b5051919050565b6000602082840312156140ed57600080fd5b8151613bcd81613db3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561414857600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156141fb576141fb613f87565b500390565b60006020828403121561421257600080fd5b8151613bcd81613b53565b85815284602082015260a06040820152600061423c60a0830186613e54565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200c05e97ddf19299c9a131aa1b787b8673290777927fbc8d07bb2433b2aa0707864736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x60806040526004361061042a5760003560e01c80638366e79a11610229578063cc2ffe7c1161012e578063ea4cfe12116100b6578063f2fde38b1161007a578063f2fde38b14610c3c578063f5648a4f14610c5c578063f637434214610c71578063f8b45b0514610c87578063fb002c9714610c9d57600080fd5b8063ea4cfe1214610bba578063eb1e361514610bda578063eb472fc414610bf0578063ee40166e14610c10578063f11a24d314610c2657600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b09578063dd62ed3e14610b29578063e210488d14610b6f578063e2f4560514610b8f578063e884f26014610ba557600080fd5b8063cc2ffe7c14610a90578063d0d52b5d14610aa6578063d257b34f14610ad3578063d85ba06314610af357600080fd5b8063a62068ce116101b1578063c024666811610180578063c0246668146109f6578063c17b5b8c14610a16578063c18bc19514610a36578063c5f956af14610a56578063c876d0b914610a7657600080fd5b8063a62068ce14610971578063a9059cbb14610987578063b62496f5146109a7578063bbc0c742146109d757600080fd5b806395d89b41116101f857806395d89b41146108e55780639a5bd2dd146108fa5780639a7a23d61461091c578063a28e86d31461093c578063a457c2d71461095157600080fd5b80638366e79a1461086157806385ecfd281461088157806388e765ff146108b15780638da5cb5b146108c757600080fd5b806351f205e41161032f5780636b0a894c116102b7578063715018a611610286578063715018a6146107d7578063751039fc146107ec5780637571336a146108015780638095d5641461082157806382aa7c681461084157600080fd5b80636b0a894c1461076b5780636b2fb124146107815780636ddd17131461079757806370a08231146107b757600080fd5b80635c068a8c116102fe5780635c068a8c146106f45780635eed98e21461070a5780636605bfda1461071f57806366d602ae1461073f5780636a486a8e1461075557600080fd5b806351f205e41461069257806358a6d531146106a75780635a139dd4146106be5780635bb988c9146106d457600080fd5b806323b872dd116103b2578063452ed4f111610381578063452ed4f11461060c578063499b83941461062c5780634a62bb651461064c5780634f77f6c01461066657806350f4a5341461067c57600080fd5b806323b872dd146105905780632be32b61146105b0578063313ce567146105d057806339509351146105ec57600080fd5b806310d5de53116103f957806310d5de53146104eb5780631805805b1461051b57806318160ddd1461053b5780631a8145bb1461055a5780632307b4411461057057600080fd5b806306fdde03146104365780630758d92414610461578063095ea7b31461049957806310c01979146104c957600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cb3565b6040516104589190613afe565b60405180910390f35b34801561046d57600080fd5b50600954610481906001600160a01b031681565b6040516001600160a01b039091168152602001610458565b3480156104a557600080fd5b506104b96104b4366004613b6b565b610d45565b6040519015158152602001610458565b3480156104d557600080fd5b506104e96104e4366004613b97565b610d5b565b005b3480156104f757600080fd5b506104b9610506366004613bb0565b60286020526000908152604090205460ff1681565b34801561052757600080fd5b506104e9610536366004613bb0565b610dba565b34801561054757600080fd5b506002545b604051908152602001610458565b34801561056657600080fd5b5061054c60255481565b34801561057c57600080fd5b506104e961058b366004613d0e565b610e70565b34801561059c57600080fd5b506104b96105ab366004613d72565b610f79565b3480156105bc57600080fd5b506104e96105cb366004613b97565b611023565b3480156105dc57600080fd5b5060405160128152602001610458565b3480156105f857600080fd5b506104b9610607366004613b6b565b6111c4565b34801561061857600080fd5b50600a54610481906001600160a01b031681565b34801561063857600080fd5b506104e9610647366004613bb0565b611200565b34801561065857600080fd5b506013546104b99060ff1681565b34801561067257600080fd5b5061054c60215481565b34801561068857600080fd5b5061054c60155481565b34801561069e57600080fd5b506104e96112d9565b3480156106b357600080fd5b50600f5443106104b9565b3480156106ca57600080fd5b5061054c601a5481565b3480156106e057600080fd5b506104e96106ef366004613bb0565b6113e2565b34801561070057600080fd5b5061054c601c5481565b34801561071657600080fd5b506104e9611495565b34801561072b57600080fd5b506104e961073a366004613bb0565b6114f1565b34801561074b57600080fd5b5061054c60075481565b34801561076157600080fd5b5061054c60205481565b34801561077757600080fd5b5061054c60125481565b34801561078d57600080fd5b5061054c60235481565b3480156107a357600080fd5b506013546104b99062010000900460ff1681565b3480156107c357600080fd5b5061054c6107d2366004613bb0565b6115c7565b3480156107e357600080fd5b506104e96115e2565b3480156107f857600080fd5b506104e9611656565b34801561080d57600080fd5b506104e961081c366004613dc1565b61168c565b34801561082d57600080fd5b506104e961083c366004613dfa565b611754565b34801561084d57600080fd5b506104e961085c366004613b97565b6117f7565b34801561086d57600080fd5b506104b961087c366004613e26565b6118eb565b34801561088d57600080fd5b506104b961089c366004613bb0565b60106020526000908152604090205460ff1681565b3480156108bd57600080fd5b5061054c60065481565b3480156108d357600080fd5b506005546001600160a01b0316610481565b3480156108f157600080fd5b5061044b611b25565b34801561090657600080fd5b5061090f611b34565b6040516104589190613e98565b34801561092857600080fd5b506104e9610937366004613dc1565b611b95565b34801561094857600080fd5b506104e9611c89565b34801561095d57600080fd5b506104b961096c366004613b6b565b611cc2565b34801561097d57600080fd5b5061054c600f5481565b34801561099357600080fd5b506104b96109a2366004613b6b565b611d5b565b3480156109b357600080fd5b506104b96109c2366004613bb0565b60296020526000908152604090205460ff1681565b3480156109e357600080fd5b506013546104b990610100900460ff1681565b348015610a0257600080fd5b506104e9610a11366004613dc1565b611d68565b348015610a2257600080fd5b506104e9610a31366004613dfa565b611df1565b348015610a4257600080fd5b506104e9610a51366004613b97565b611e94565b348015610a6257600080fd5b50600d54610481906001600160a01b031681565b348015610a8257600080fd5b506018546104b99060ff1681565b348015610a9c57600080fd5b5061054c60265481565b348015610ab257600080fd5b5061054c610ac1366004613bb0565b60146020526000908152604090205481565b348015610adf57600080fd5b506104e9610aee366004613b97565b612033565b348015610aff57600080fd5b5061054c60195481565b348015610b1557600080fd5b506104e9610b24366004613b97565b61217e565b348015610b3557600080fd5b5061054c610b44366004613e26565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610b7b57600080fd5b506104e9610b8a366004613eab565b61231a565b348015610b9b57600080fd5b5061054c600b5481565b348015610bb157600080fd5b506104e961268e565b348015610bc657600080fd5b50600c54610481906001600160a01b031681565b348015610be657600080fd5b5061054c60165481565b348015610bfc57600080fd5b50610481610c0b366004613b97565b6126c4565b348015610c1c57600080fd5b5061054c600e5481565b348015610c3257600080fd5b5061054c601b5481565b348015610c4857600080fd5b506104e9610c57366004613bb0565b6126ee565b348015610c6857600080fd5b506104e96127d9565b348015610c7d57600080fd5b5061054c60225481565b348015610c9357600080fd5b5061054c60085481565b348015610ca957600080fd5b5061054c60245481565b606060038054610cc290613f18565b80601f0160208091040260200160405190810160405280929190818152602001828054610cee90613f18565b8015610d3b5780601f10610d1057610100808354040283529160200191610d3b565b820191906000526020600020905b815481529060010190602001808311610d1e57829003601f168201915b5050505050905090565b6000610d52338484612850565b50600192915050565b6005546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610d8590613f52565b60405180910390fd5b600081118015610da057506105a08111155b610da957600080fd5b610db481603c613f9d565b60155550565b6005546001600160a01b03163314610de45760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff1615610e4e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610d85565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b8152600401610d8590613f52565b8051825114610eeb5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d85565b60c8825110610f0c5760405162461bcd60e51b8152600401610d8590613fbc565b60005b8251811015610f74576000838281518110610f2c57610f2c614012565b602002602001015190506000838381518110610f4a57610f4a614012565b60200260200101519050610f5f338383612974565b50508080610f6c90614028565b915050610f0f565b505050565b6000610f86848484612ac9565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561100b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d85565b6110188533858403612850565b506001949350505050565b6005546001600160a01b0316331461104d5760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a764000061271061106260025490565b61106d906001613f9d565b6110779190614041565b6110819190614041565b8110156110e35760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610d85565b670de0b6b3a764000060646110f760025490565b611102906002613f9d565b61110c9190614041565b6111169190614041565b8110156111765760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782062757920616d6f756e7420686967686572604482015267207468616e20322560c01b6064820152608401610d85565b61118881670de0b6b3a7640000613f9d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d529185906111fb908690614063565b612850565b6005546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661128f5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610d85565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146113035760405162461bcd60e51b8152600401610d8590613f52565b600b5461130f306115c7565b1015611385576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d85565b600a805460ff60a01b1916600160a01b1790556113a06136c5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811660009081526010602052604090205460ff166114745760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610d85565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146114bf5760405162461bcd60e51b8152600401610d8590613f52565b601d546021819055601e546022819055601f546023819055916114e29190614063565b6114ec9190614063565b602055565b6005546001600160a01b0316331461151b5760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661157d5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610d85565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461160c5760405162461bcd60e51b8152600401610d8590613f52565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116805760405162461bcd60e51b8152600401610d8590613f52565b6013805460ff19169055565b6005546001600160a01b031633146116b65760405162461bcd60e51b8152600401610d8590613f52565b8061172957600a546001600160a01b03908116908316036117295760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d85565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461177e5760405162461bcd60e51b8152600401610d8590613f52565b601a839055601b829055601c819055806117988385614063565b6117a29190614063565b6019819055600f1015610f745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610d85565b6005546001600160a01b031633146118215760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff16156118795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d85565b600a81111561189a5760405162461bcd60e51b8152600401610d859061407b565b6013805462ffff0019166201010017905543600e8190556118bc908290614063565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146119185760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03831661196e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d85565b6001600160a01b0383163014158061198e5750601354610100900460ff16155b6119f75760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610d85565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906140c2565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad991906140db565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610cc290613f18565b60606011805480602002602001604051908101604052809291908181526020018280548015610d3b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b6e575050505050905090565b6005546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610d8590613f52565b600a546001600160a01b0390811690831603611c435760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d85565b611c4d828261387a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610d8590613f52565b6013805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d85565b611d513385858403612850565b5060019392505050565b6000610d52338484612ac9565b6005546001600160a01b03163314611d925760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611e1b5760405162461bcd60e51b8152600401610d8590613f52565b60218390556022829055602381905580611e358385614063565b611e3f9190614063565b602081905560141015610f745760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610d85565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a76400006103e8611ed360025490565b611ede906005613f9d565b611ee89190614041565b611ef29190614041565b811015611f565760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610d85565b670de0b6b3a76400006064611f6a60025490565b611f75906002613f9d565b611f7f9190614041565b611f899190614041565b811015611fec5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20322560a81b6064820152608401610d85565b611ffe81670de0b6b3a7640000613f9d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016111b9565b6005546001600160a01b0316331461205d5760405162461bcd60e51b8152600401610d8590613f52565b620186a061206a60025490565b612075906001613f9d565b61207f9190614041565b8110156120ec5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d85565b6103e86120f860025490565b612103906001613f9d565b61210d9190614041565b8111156121795760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d85565b600b55565b6005546001600160a01b031633146121a85760405162461bcd60e51b8152600401610d8590613f52565b670de0b6b3a76400006127106121bd60025490565b6121c8906001613f9d565b6121d29190614041565b6121dc9190614041565b81101561223f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610d85565b670de0b6b3a7640000606461225360025490565b61225e906002613f9d565b6122689190614041565b6122729190614041565b8110156122d35760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610d85565b6122e581670de0b6b3a7640000613f9d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016111b9565b6005546001600160a01b031633146123445760405162461bcd60e51b8152600401610d8590613f52565b601354610100900460ff16156123b05760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610d85565b600a81106123d05760405162461bcd60e51b8152600401610d859061407b565b81518351146124215760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610d85565b60c88351106124425760405162461bcd60e51b8152600401610d8590613fbc565b60005b83518110156124d457600084828151811061246257612462614012565b602002602001015190506016544261247a9190614063565b6001600160a01b03821660009081526014602052604081209190915584518590849081106124aa576124aa614012565b602002602001015190506124bf338383612974565b505080806124cc90614028565b915050612445565b506013805462ffff0019166201010017905543600e8190556124f7908290614063565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a16000471161257f5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610d85565b600061258a306115c7565b116125e65760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610d85565b6009546126019030906001600160a01b03166111fb826115c7565b6009546001600160a01b031663f305d719473061261d816115c7565b60008033426040518863ffffffff1660e01b8152600401612643969594939291906140f8565b60606040518083038185885af1158015612661573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126869190614133565b505050505050565b6005546001600160a01b031633146126b85760405162461bcd60e51b8152600401610d8590613f52565b6018805460ff19169055565b601181815481106126d457600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146127185760405162461bcd60e51b8152600401610d8590613f52565b6001600160a01b03811661277d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d85565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146128035760405162461bcd60e51b8152600401610d8590613f52565b604051600090339047908381818185875af1925050503d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b50505050565b6001600160a01b0383166128b25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d85565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d85565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661299a5760405162461bcd60e51b8152600401610d8590614161565b6001600160a01b0382166129c05760405162461bcd60e51b8152600401610d85906141a6565b6001600160a01b03831660009081526020819052604090205481811015612a385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d85565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a6f908490614063565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612abb91815260200190565b60405180910390a350505050565b6001600160a01b038316612aef5760405162461bcd60e51b8152600401610d8590614161565b6001600160a01b038216612b155760405162461bcd60e51b8152600401610d85906141a6565b60008111612b655760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d85565b601354610100900460ff16612bf8576001600160a01b03831660009081526027602052604090205460ff1680612bb357506001600160a01b03821660009081526027602052604090205460ff165b612bf85760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d85565b600f544310158015612c115750601354610100900460ff165b15612ce1576001600160a01b03831660009081526010602052604090205460ff161580612c4b57506005546001600160a01b038381169116145b80612c6057506001600160a01b03821661dead145b612ce15760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610d85565b60135460ff16156131a4576005546001600160a01b03848116911614801590612d1857506005546001600160a01b03838116911614155b8015612d2f57506001600160a01b03821661dead14155b8015612d5457506001600160a01b03831660009081526027602052604090205460ff16155b8015612d7957506001600160a01b03821660009081526027602052604090205460ff16155b156131a45760185460ff1615612e92576009546001600160a01b03838116911614801590612db55750600a546001600160a01b03838116911614155b15612e9257612dc56002436141e9565b32600090815260176020526040902054108015612e035750612de86002436141e9565b6001600160a01b038316600090815260176020526040902054105b612e6d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d85565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff168015612ed357506001600160a01b03821660009081526028602052604090205460ff16155b15612f9f57600654811115612f405760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc213abca0b6b7bab73a1760991b6064820152608401610d85565b600854612f4c836115c7565b612f569083614063565b1115612f9a5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610d85565b6131a4565b6001600160a01b03821660009081526029602052604090205460ff168015612fe057506001600160a01b03831660009081526028602052604090205460ff16155b156130d45760075481111561304f5760405162461bcd60e51b815260206004820152602f60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526e1036b0bc29b2b63620b6b7bab73a1760891b6064820152608401610d85565b6001600160a01b0383166000908152601460205260409020544210156130a95760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610d85565b6015546130b69042614063565b6001600160a01b0384166000908152601460205260409020556131a4565b6001600160a01b03821660009081526028602052604090205460ff1615801561311657506001600160a01b03821660009081526027602052604090205460ff16155b156131a45760405162461bcd60e51b815260206004820152605260248201527f496e766573746f72732063616e6e6f74207472616e7366657220616e64206d7560448201527f73742073656c6c206f6e6c79206f72207472616e7366657220746f206120776860648201527134ba32b634b9ba32b21030b2323932b9b99760711b608482015260a401610d85565b60006131af306115c7565b600b54909150811080159081906131ce575060135462010000900460ff165b80156131e45750600a54600160a01b900460ff16155b801561320857506001600160a01b03841660009081526029602052604090205460ff165b1561323657600a805460ff60a01b1916600160a01b1790556132286136c5565b600a805460ff60a01b191690555b6001600160a01b03851660009081526027602052604090205460019060ff168061327857506001600160a01b03851660009081526027602052604090205460ff165b15613281575060005b600081156136b157600f544310806132c75750670c7d713b49da00006006546132aa91906141e9565b85101580156132c7575043600f5460086132c49190614063565b10155b80156132eb57506001600160a01b03871660009081526029602052604090205460ff165b801561331057506001600160a01b03861660009081526029602052604090205460ff16155b801561333557506001600160a01b03861660009081526027602052604090205460ff16155b801561334357506000601954115b156134fa57600f54431061336a5760016006600082825461336491906141e9565b90915550505b6001600160a01b03861660009081526010602052604090205460ff1661344a576001600160a01b0386166000908152601060205260408120805460ff1916600190811790915560128054919290916133c3908490614063565b9091555050601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064613457866063613f9d565b6134619190614041565b9050601954601b54826134749190613f9d565b61347e9190614041565b6025600082825461348f9190614063565b9091555050601954601a546134a49083613f9d565b6134ae9190614041565b602460008282546134bf9190614063565b9091555050601954601c546134d49083613f9d565b6134de9190614041565b602660008282546134ef9190614063565b909155506136939050565b6001600160a01b03861660009081526029602052604090205460ff16801561352457506000602054115b156135b6576064602054866135399190613f9d565b6135439190614041565b9050602054602254826135569190613f9d565b6135609190614041565b602560008282546135719190614063565b90915550506020546021546135869083613f9d565b6135909190614041565b602460008282546135a19190614063565b90915550506020546023546134d49083613f9d565b6001600160a01b03871660009081526029602052604090205460ff1680156135e057506000601954115b15613693576064601954866135f59190613f9d565b6135ff9190614041565b9050601954601b54826136129190613f9d565b61361c9190614041565b6025600082825461362d9190614063565b9091555050601954601a546136429083613f9d565b61364c9190614041565b6024600082825461365d9190614063565b9091555050601954601c546136729083613f9d565b61367c9190614041565b6026600082825461368d9190614063565b90915550505b80156136a4576136a4873083612974565b6136ae81866141e9565b94505b6136bc878787612974565b50505050505050565b60006136d0306115c7565b905060006026541180156136ee57506026546136eb306115c7565b10155b1561371057600d546026546137109130916001600160a01b0390911690612974565b60006026819055602454602554829161372891614063565b6137329190614063565b905081158061373f575080155b15613748575050565b600b5461375690600a613f9d565b82111561376e57600b5461376b90600a613f9d565b91505b600080600283602554866137829190613f9d565b61378c9190614041565b6137969190614041565b90506137aa6137a582866141e9565b6138a8565b602554479081906000906137c090600290614041565b6137ca90876141e9565b6024546137d79085613f9d565b6137e19190614041565b90506137ed81836141e9565b6000602581905560248190556026559150831580159061380d5750600082115b1561381c5761381c84836139fa565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613869576040519150601f19603f3d011682016040523d82523d6000602084013e61386e565b606091505b50505050505050505050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611c4d8282613a9b565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106138dd576138dd614012565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395a9190614200565b8160018151811061396d5761396d614012565b6001600160a01b0392831660209182029290920101526009546139939130911684612850565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906139cc90859060009086903090429060040161421d565b600060405180830381600087803b1580156139e657600080fd5b505af1158015612686573d6000803e3d6000fd5b600954613a129030906001600160a01b031684612850565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613a519030908790600090819061dead9042906004016140f8565b60606040518083038185885af1158015613a6f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a949190614133565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015613b2b57858101830151858201604001528201613b0f565b81811115613b3d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613b6857600080fd5b50565b60008060408385031215613b7e57600080fd5b8235613b8981613b53565b946020939093013593505050565b600060208284031215613ba957600080fd5b5035919050565b600060208284031215613bc257600080fd5b8135613bcd81613b53565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c1357613c13613bd4565b604052919050565b600067ffffffffffffffff821115613c3557613c35613bd4565b5060051b60200190565b600082601f830112613c5057600080fd5b81356020613c65613c6083613c1b565b613bea565b82815260059290921b84018101918181019086841115613c8457600080fd5b8286015b84811015613ca8578035613c9b81613b53565b8352918301918301613c88565b509695505050505050565b600082601f830112613cc457600080fd5b81356020613cd4613c6083613c1b565b82815260059290921b84018101918181019086841115613cf357600080fd5b8286015b84811015613ca85780358352918301918301613cf7565b60008060408385031215613d2157600080fd5b823567ffffffffffffffff80821115613d3957600080fd5b613d4586838701613c3f565b93506020850135915080821115613d5b57600080fd5b50613d6885828601613cb3565b9150509250929050565b600080600060608486031215613d8757600080fd5b8335613d9281613b53565b92506020840135613da281613b53565b929592945050506040919091013590565b8015158114613b6857600080fd5b60008060408385031215613dd457600080fd5b8235613ddf81613b53565b91506020830135613def81613db3565b809150509250929050565b600080600060608486031215613e0f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613e3957600080fd5b8235613e4481613b53565b91506020830135613def81613b53565b600081518084526020808501945080840160005b83811015613e8d5781516001600160a01b031687529582019590820190600101613e68565b509495945050505050565b602081526000613bcd6020830184613e54565b600080600060608486031215613ec057600080fd5b833567ffffffffffffffff80821115613ed857600080fd5b613ee487838801613c3f565b94506020860135915080821115613efa57600080fd5b50613f0786828701613cb3565b925050604084013590509250925092565b600181811c90821680613f2c57607f821691505b602082108103613f4c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613fb757613fb7613f87565b500290565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161403a5761403a613f87565b5060010190565b60008261405e57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561407657614076613f87565b500190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b6000602082840312156140d457600080fd5b5051919050565b6000602082840312156140ed57600080fd5b8151613bcd81613db3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561414857600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156141fb576141fb613f87565b500390565b60006020828403121561421257600080fd5b8151613bcd81613b53565b85815284602082015260a06040820152600061423c60a0830186613e54565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212200c05e97ddf19299c9a131aa1b787b8673290777927fbc8d07bb2433b2aa0707864736f6c634300080d0033
Deployed Bytecode Sourcemap
10670:26763:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4402:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10820:27;;;;;;;;;;-1:-1:-1;10820:27:0;;;;-1:-1:-1;;;;;10820:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10820:27:0;616:221:1;5457:210:0;;;;;;;;;;-1:-1:-1;5457:210:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;5457:210:0;1298:187:1;20657:197:0;;;;;;;;;;-1:-1:-1;20657:197:0;;;;;:::i;:::-;;:::i;:::-;;12547:63;;;;;;;;;;-1:-1:-1;12547:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18347:194;;;;;;;;;;-1:-1:-1;18347:194:0;;;;;:::i;:::-;;:::i;4723:108::-;;;;;;;;;;-1:-1:-1;4811:12:0;;4723:108;;;2073:25:1;;;2061:2;2046:18;4723:108:0;1927:177:1;12326:33:0;;;;;;;;;;;;;;;;21095:719;;;;;;;;;;-1:-1:-1;21095:719:0;;;;;:::i;:::-;;:::i;5675:529::-;;;;;;;;;;-1:-1:-1;5675:529:0;;;;;:::i;:::-;;:::i;18706:463::-;;;;;;;;;;-1:-1:-1;18706:463:0;;;;;:::i;:::-;;:::i;4622:93::-;;;;;;;;;;-1:-1:-1;4622:93:0;;4705:2;5321:36:1;;5309:2;5294:18;4622:93:0;5179:184:1;6212:297:0;;;;;;;;;;-1:-1:-1;6212:297:0;;;;;:::i;:::-;;:::i;10854:21::-;;;;;;;;;;-1:-1:-1;10854:21:0;;;;-1:-1:-1;;;;;10854:21:0;;;33869:357;;;;;;;;;;-1:-1:-1;33869:357:0;;;;;:::i;:::-;;:::i;11268:33::-;;;;;;;;;;-1:-1:-1;11268:33:0;;;;;;;;12169:32;;;;;;;;;;;;;;;;11488:44;;;;;;;;;;;;;;;;34604:349;;;;;;;;;;;;;:::i;30195:121::-;;;;;;;;;;-1:-1:-1;30290:18:0;;30275:12;:33;30195:121;;11878:31;;;;;;;;;;;;;;;;18158:181;;;;;;;;;;-1:-1:-1;18158:181:0;;;;;:::i;:::-;;:::i;11953:29::-;;;;;;;;;;;;;;;;23648:294;;;;;;;;;;;;;:::i;34234:318::-;;;;;;;;;;-1:-1:-1;34234:318:0;;;;;:::i;:::-;;:::i;10748:28::-;;;;;;;;;;;;;;;;12134;;;;;;;;;;;;;;;;11234:25;;;;;;;;;;;;;;;;12246:30;;;;;;;;;;;;;;;;11348:31;;;;;;;;;;-1:-1:-1;11348:31:0;;;;;;;;;;;4839:177;;;;;;;;;;-1:-1:-1;4839:177:0;;;;;:::i;:::-;;:::i;8933:150::-;;;;;;;;;;;;;:::i;34961:84::-;;;;;;;;;;;;;:::i;21822:334::-;;;;;;;;;;-1:-1:-1;21822:334:0;;;;;:::i;:::-;;:::i;22769:427::-;;;;;;;;;;-1:-1:-1;22769:427:0;;;;;:::i;:::-;;:::i;17574:464::-;;;;;;;;;;-1:-1:-1;17574:464:0;;;;;:::i;:::-;;:::i;33039:567::-;;;;;;;;;;-1:-1:-1;33039:567:0;;;;;:::i;:::-;;:::i;11149:43::-;;;;;;;;;;-1:-1:-1;11149:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10714:27;;;;;;;;;;;;;;;;8719:79;;;;;;;;;;-1:-1:-1;8784:6:0;;-1:-1:-1;;;;;8784:6:0;8719:79;;4510:104;;;;;;;;;;;;;:::i;18046:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22164:353::-;;;;;;;;;;-1:-1:-1;22164:353:0;;;;;:::i;:::-;;:::i;35053:84::-;;;;;;;;;;;;;:::i;6517:482::-;;;;;;;;;;-1:-1:-1;6517:482:0;;;;;:::i;:::-;;:::i;11109:33::-;;;;;;;;;;;;;;;;5024:216;;;;;;;;;;-1:-1:-1;5024:216:0;;;;;:::i;:::-;;:::i;12768:57::-;;;;;;;;;;-1:-1:-1;12768:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11308:33;;;;;;;;;;-1:-1:-1;11308:33:0;;;;;;;;;;;23950:182;;;;;;;;;;-1:-1:-1;23950:182:0;;;;;:::i;:::-;;:::i;23204:436::-;;;;;;;;;;-1:-1:-1;23204:436:0;;;;;:::i;:::-;;:::i;19667:476::-;;;;;;;;;;-1:-1:-1;19667:476:0;;;;;:::i;:::-;;:::i;10993:30::-;;;;;;;;;;-1:-1:-1;10993:30:0;;;;-1:-1:-1;;;;;10993:30:0;;;11796:39;;;;;;;;;;-1:-1:-1;11796:39:0;;;;;;;;12366:32;;;;;;;;;;;;;;;;11426:55;;;;;;;;;;-1:-1:-1;11426:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;20221:428;;;;;;;;;;-1:-1:-1;20221:428:0;;;;;:::i;:::-;;:::i;11844:27::-;;;;;;;;;;;;;;;;19177:482;;;;;;;;;;-1:-1:-1;19177:482:0;;;;;:::i;:::-;;:::i;5248:201::-;;;;;;;;;;-1:-1:-1;5248:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5414:18:0;;;5382:7;5414:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5248:201;35145:2285;;;;;;;;;;-1:-1:-1;35145:2285:0;;;;;:::i;:::-;;:::i;10912:33::-;;;;;;;;;;;;;;;;18602:98;;;;;;;;;;;;;:::i;10954:32::-;;;;;;;;;;-1:-1:-1;10954:32:0;;;;-1:-1:-1;;;;;10954:32:0;;;11550:46;;;;;;;;;;;;;;;;11199:28;;;;;;;;;;-1:-1:-1;11199:28:0;;;;;:::i;:::-;;:::i;11032:37::-;;;;;;;;;;;;;;;;11916:30;;;;;;;;;;;;;;;;9091:281;;;;;;;;;;-1:-1:-1;9091:281:0;;;;;:::i;:::-;;:::i;33676:185::-;;;;;;;;;;;;;:::i;12208:31::-;;;;;;;;;;;;;;;;10783:24;;;;;;;;;;;;;;;;12285:34;;;;;;;;;;;;;;;;4402:100;4456:13;4489:5;4482:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4402:100;:::o;5457:210::-;5576:4;5598:39;552:10;5621:7;5630:6;5598:8;:39::i;:::-;-1:-1:-1;5655:4:0;5457:210;;;;:::o;20657:197::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;;;;;;;;;20765:1:::1;20749:13;:17;:42;;;;;20787:4;20770:13;:21;;20749:42;20741:51;;;::::0;::::1;;20821:25;:13:::0;20837:9:::1;20821:25;:::i;:::-;20803:15;:43:::0;-1:-1:-1;20657:197:0:o;18347:194::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;18433:13:::1;::::0;::::1;::::0;::::1;;;18432:14;18424:68;;;::::0;-1:-1:-1;;;18424:68:0;;9453:2:1;18424:68:0::1;::::0;::::1;9435:21:1::0;9492:2;9472:18;;;9465:30;9531:34;9511:18;;;9504:62;-1:-1:-1;;;9582:18:1;;;9575:39;9631:19;;18424:68:0::1;9251:405:1::0;18424:68:0::1;18503:9;:30:::0;;-1:-1:-1;;;;;;18503:30:0::1;-1:-1:-1::0;;;;;18503:30:0;;;::::1;::::0;;;::::1;::::0;;18347:194::o;21095:719::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;21276:15:::1;:22;21258:7;:14;:40;21236:120;;;::::0;-1:-1:-1;;;21236:120:0;;9863:2:1;21236:120:0::1;::::0;::::1;9845:21:1::0;9902:2;9882:18;;;9875:30;9941:32;9921:18;;;9914:60;9991:18;;21236:120:0::1;9661:354:1::0;21236:120:0::1;21406:3;21389:7;:14;:20;21367:124;;;;-1:-1:-1::0;;;21367:124:0::1;;;;;;;:::i;:::-;21605:9;21600:207;21624:7;:14;21620:1;:18;21600:207;;;21660:14;21677:7;21685:1;21677:10;;;;;;;;:::i;:::-;;;;;;;21660:27;;21702:14;21719:15;21735:1;21719:18;;;;;;;;:::i;:::-;;;;;;;21702:35;;21752:43;21768:10;21780:6;21788;21752:15;:43::i;:::-;21645:162;;21640:3;;;;;:::i;:::-;;;;21600:207;;;;21095:719:::0;;:::o;5675:529::-;5815:4;5832:36;5842:6;5850:9;5861:6;5832:9;:36::i;:::-;-1:-1:-1;;;;;5908:19:0;;5881:24;5908:19;;;:11;:19;;;;;;;;552:10;5908:33;;;;;;;;5974:26;;;;5952:116;;;;-1:-1:-1;;;5952:116:0;;10917:2:1;5952:116:0;;;10899:21:1;10956:2;10936:18;;;10929:30;10995:34;10975:18;;;10968:62;-1:-1:-1;;;11046:18:1;;;11039:38;11094:19;;5952:116:0;10715:404:1;5952:116:0;6104:57;6113:6;552:10;6154:6;6135:16;:25;6104:8;:57::i;:::-;-1:-1:-1;6192:4:0;;5675:529;-1:-1:-1;;;;5675:529:0:o;18706:463::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;18844:4:::1;18835:5;18814:13;4811:12:::0;;;4723:108;18814:13:::1;:17;::::0;18830:1:::1;18814:17;:::i;:::-;18813:27;;;;:::i;:::-;18812:36;;;;:::i;:::-;18802:6;:46;;18780:138;;;::::0;-1:-1:-1;;;18780:138:0;;11548:2:1;18780:138:0::1;::::0;::::1;11530:21:1::0;11587:2;11567:18;;;11560:30;11626:34;11606:18;;;11599:62;-1:-1:-1;;;11677:18:1;;;11670:40;11727:19;;18780:138:0::1;11346:406:1::0;18780:138:0::1;18991:4;18984:3;18963:13;4811:12:::0;;;4723:108;18963:13:::1;:17;::::0;18979:1:::1;18963:17;:::i;:::-;18962:25;;;;:::i;:::-;18961:34;;;;:::i;:::-;18951:6;:44;;18929:134;;;::::0;-1:-1:-1;;;18929:134:0;;11959:2:1;18929:134:0::1;::::0;::::1;11941:21:1::0;11998:2;11978:18;;;11971:30;12037:34;12017:18;;;12010:62;-1:-1:-1;;;12088:18:1;;;12081:38;12136:19;;18929:134:0::1;11757:404:1::0;18929:134:0::1;19097:15;:6:::0;19107:4:::1;19097:15;:::i;:::-;19082:12;:30:::0;;;19128:33:::1;::::0;2073:25:1;;;19128:33:0::1;::::0;2061:2:1;2046:18;19128:33:0::1;;;;;;;;18706:463:::0;:::o;6212:297::-;552:10;6327:4;6421:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6421:34:0;;;;;;;;;;6327:4;;6349:130;;6399:7;;6421:47;;6458:10;;6421:47;:::i;:::-;6349:8;:130::i;33869:357::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34002:32:0;::::1;33980:120;;;::::0;-1:-1:-1;;;33980:120:0;;12501:2:1;33980:120:0::1;::::0;::::1;12483:21:1::0;12540:2;12520:18;;;12513:30;12579:34;12559:18;;;12552:62;-1:-1:-1;;;12630:18:1;;;12623:36;12676:19;;33980:120:0::1;12299:402:1::0;33980:120:0::1;34111:17;:47:::0;;-1:-1:-1;;;;;;34111:47:0::1;-1:-1:-1::0;;;;;34111:47:0;::::1;::::0;;::::1;::::0;;;34174:44:::1;::::0;::::1;::::0;-1:-1:-1;;34174:44:0::1;33869:357:::0;:::o;34604:349::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;34709:18:::1;;34681:24;34699:4;34681:9;:24::i;:::-;:46;;34659:160;;;::::0;;-1:-1:-1;;;34659:160:0;;12908:2:1;34659:160:0::1;::::0;::::1;12890:21:1::0;12927:18;;;12920:30;;;;12986:34;12966:18;;;12959:62;13057:34;13037:18;;;13030:62;13109:19;;34659:160:0::1;12706:428:1::0;34659:160:0::1;34830:8;:15:::0;;-1:-1:-1;;;;34830:15:0::1;-1:-1:-1::0;;;34830:15:0::1;::::0;;34856:10:::1;:8;:10::i;:::-;34877:8;:16:::0;;-1:-1:-1;;;;34877:16:0::1;::::0;;34909:36:::1;::::0;34929:15:::1;2073:25:1::0;;34909:36:0::1;::::0;2061:2:1;2046:18;34909:36:0::1;;;;;;;34604:349::o:0;18158:181::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18239:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;18231:62;;;::::0;-1:-1:-1;;;18231:62:0;;13341:2:1;18231:62:0::1;::::0;::::1;13323:21:1::0;13380:2;13360:18;;;13353:30;13419:32;13399:18;;;13392:60;13469:18;;18231:62:0::1;13139:354:1::0;18231:62:0::1;-1:-1:-1::0;;;;;18304:19:0::1;18326:5;18304:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;18304:27:0::1;::::0;;18158:181::o;23648:294::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;23722:25:::1;::::0;23702:17:::1;:45:::0;;;23777:24:::1;::::0;23758:16:::1;:43:::0;;;23830:23:::1;::::0;23812:15:::1;:41:::0;;;23830:23;23880:36:::1;::::0;23777:24;23880:36:::1;:::i;:::-;:54;;;;:::i;:::-;23864:13;:70:::0;23648:294::o;34234:318::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34340:30:0;::::1;34318:116;;;::::0;-1:-1:-1;;;34318:116:0;;13700:2:1;34318:116:0::1;::::0;::::1;13682:21:1::0;13739:2;13719:18;;;13712:30;13778:34;13758:18;;;13751:62;-1:-1:-1;;;13829:18:1;;;13822:34;13873:19;;34318:116:0::1;13498:400:1::0;34318:116:0::1;34445:15;:43:::0;;-1:-1:-1;;;;;;34445:43:0::1;-1:-1:-1::0;;;;;34445:43:0;::::1;::::0;;::::1;::::0;;;34504:40:::1;::::0;::::1;::::0;-1:-1:-1;;34504:40:0::1;34234:318:::0;:::o;4839:177::-;-1:-1:-1;;;;;4990:18:0;4958:7;4990:18;;;;;;;;;;;;4839:177::o;8933:150::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;9026:6:::1;::::0;9005:40:::1;::::0;9042:1:::1;::::0;-1:-1:-1;;;;;9026:6:0::1;::::0;9005:40:::1;::::0;9042:1;;9005:40:::1;9056:6;:19:::0;;-1:-1:-1;;;;;;9056:19:0::1;::::0;;8933:150::o;34961:84::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;35015:14:::1;:22:::0;;-1:-1:-1;;35015:22:0::1;::::0;;34961:84::o;21822:334::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;21942:4:::1;21937:155;;21999:6;::::0;-1:-1:-1;;;;;21999:6:0;;::::1;21989:16:::0;;::::1;::::0;21963:117:::1;;;::::0;-1:-1:-1;;;21963:117:0;;14105:2:1;21963:117:0::1;::::0;::::1;14087:21:1::0;14144:2;14124:18;;;14117:30;14183:34;14163:18;;;14156:62;-1:-1:-1;;;14234:18:1;;;14227:37;14281:19;;21963:117:0::1;13903:403:1::0;21963:117:0::1;-1:-1:-1::0;;;;;22102:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;22102:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21822:334::o;22769:427::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;22925:16:::1;:33:::0;;;22969:15:::1;:31:::0;;;23011:14:::1;:29:::0;;;23028:12;23066:34:::1;22987:13:::0;22944:14;23066:34:::1;:::i;:::-;:51;;;;:::i;:::-;23051:12;:66:::0;;;23152:2:::1;-1:-1:-1::0;23136:18:0::1;23128:60;;;::::0;-1:-1:-1;;;23128:60:0;;14513:2:1;23128:60:0::1;::::0;::::1;14495:21:1::0;14552:2;14532:18;;;14525:30;14591:31;14571:18;;;14564:59;14640:18;;23128:60:0::1;14311:353:1::0;17574:464:0;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;17662:13:::1;::::0;::::1;::::0;::::1;;;17661:14;17653:50;;;::::0;-1:-1:-1;;;17653:50:0;;14871:2:1;17653:50:0::1;::::0;::::1;14853:21:1::0;14910:2;14890:18;;;14883:30;14949:25;14929:18;;;14922:53;14992:18;;17653:50:0::1;14669:347:1::0;17653:50:0::1;17756:2;17736:16;:22;;17714:111;;;;-1:-1:-1::0;;;17714:111:0::1;;;;;;;:::i;:::-;17836:13;:20:::0;;-1:-1:-1;;17867:18:0;;;;;17917:12:::1;17896:18;:33:::0;;;17961:37:::1;::::0;17982:16;;17961:37:::1;:::i;:::-;17940:18;:58:::0;18014:16:::1;::::0;::::1;::::0;;;::::1;17574:464:::0;:::o;33039:567::-;8846:6;;33153:10;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33189:20:0;::::1;33181:59;;;::::0;-1:-1:-1;;;33181:59:0;;15631:2:1;33181:59:0::1;::::0;::::1;15613:21:1::0;15670:2;15650:18;;;15643:30;15709:28;15689:18;;;15682:56;15755:18;;33181:59:0::1;15429:350:1::0;33181:59:0::1;-1:-1:-1::0;;;;;33273:23:0;::::1;33291:4;33273:23;;::::0;:41:::1;;-1:-1:-1::0;33301:13:0::1;::::0;::::1;::::0;::::1;;;33300:14;33273:41;33251:143;;;::::0;-1:-1:-1;;;33251:143:0;;15986:2:1;33251:143:0::1;::::0;::::1;15968:21:1::0;16025:2;16005:18;;;15998:30;16064:34;16044:18;;;16037:62;-1:-1:-1;;;16115:18:1;;;16108:50;16175:19;;33251:143:0::1;15784:416:1::0;33251:143:0::1;33432:39;::::0;-1:-1:-1;;;33432:39:0;;33465:4:::1;33432:39;::::0;::::1;780:51:1::0;33405:24:0::1;::::0;-1:-1:-1;;;;;33432:24:0;::::1;::::0;::::1;::::0;753:18:1;;33432:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33490:46;::::0;-1:-1:-1;;;33490:46:0;;-1:-1:-1;;;;;16586:32:1;;;33490:46:0::1;::::0;::::1;16568:51:1::0;16635:18;;;16628:34;;;33405:66:0;;-1:-1:-1;33490:23:0;;::::1;::::0;::::1;::::0;16541:18:1;;33490:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33552;::::0;;-1:-1:-1;;;;;16586:32:1;;16568:51;;16650:2;16635:18;;16628:34;;;33482:54:0;;-1:-1:-1;33552:46:0::1;::::0;16541:18:1;33552:46:0::1;;;;;;;33170:436;33039:567:::0;;;;:::o;4510:104::-;4566:13;4599:7;4592:14;;;;;:::i;18046:104::-;18095:16;18131:11;18124:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18124:18:0;;;;;;;;;;;;;;;;;;;;;;18046:104;:::o;22164:353::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;22310:6:::1;::::0;-1:-1:-1;;;;;22310:6:0;;::::1;22302:14:::0;;::::1;::::0;22280:121:::1;;;::::0;-1:-1:-1;;;22280:121:0;;17125:2:1;22280:121:0::1;::::0;::::1;17107:21:1::0;17164:2;17144:18;;;17137:30;17203:34;17183:18;;;17176:62;17274:27;17254:18;;;17247:55;17319:19;;22280:121:0::1;16923:421:1::0;22280:121:0::1;22412:41;22441:4;22447:5;22412:28;:41::i;:::-;22469:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;22469:40:0;::::1;::::0;::::1;::::0;;;::::1;22164:353:::0;;:::o;35053:84::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;35108:14:::1;:21:::0;;-1:-1:-1;;35108:21:0::1;35125:4;35108:21;::::0;;35053:84::o;6517:482::-;552:10;6637:4;6686:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6686:34:0;;;;;;;;;;6753:35;;;;6731:122;;;;-1:-1:-1;;;6731:122:0;;17551:2:1;6731:122:0;;;17533:21:1;17590:2;17570:18;;;17563:30;17629:34;17609:18;;;17602:62;-1:-1:-1;;;17680:18:1;;;17673:35;17725:19;;6731:122:0;17349:401:1;6731:122:0;6889:67;552:10;6912:7;6940:15;6921:16;:34;6889:8;:67::i;:::-;-1:-1:-1;6987:4:0;;6517:482;-1:-1:-1;;;6517:482:0:o;5024:216::-;5146:4;5168:42;552:10;5192:9;5203:6;5168:9;:42::i;23950:182::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24035:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24035:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24090:34;;1438:41:1;;;24090:34:0::1;::::0;1411:18:1;24090:34:0::1;;;;;;;23950:182:::0;;:::o;23204:436::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;23361:17:::1;:34:::0;;;23406:16:::1;:32:::0;;;23449:15:::1;:30:::0;;;23467:12;23506:36:::1;23425:13:::0;23381:14;23506:36:::1;:::i;:::-;:54;;;;:::i;:::-;23490:13;:70:::0;;;23596:2:::1;-1:-1:-1::0;23579:19:0::1;23571:61;;;::::0;-1:-1:-1;;;23571:61:0;;17957:2:1;23571:61:0::1;::::0;::::1;17939:21:1::0;17996:2;17976:18;;;17969:30;18035:31;18015:18;;;18008:59;18084:18;;23571:61:0::1;17755:353:1::0;19667:476:0;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;19807:4:::1;19799;19778:13;4811:12:::0;;;4723:108;19778:13:::1;:17;::::0;19794:1:::1;19778:17;:::i;:::-;19777:26;;;;:::i;:::-;19776:35;;;;:::i;:::-;19766:6;:45;;19744:139;;;::::0;-1:-1:-1;;;19744:139:0;;18315:2:1;19744:139:0::1;::::0;::::1;18297:21:1::0;18354:2;18334:18;;;18327:30;18393:34;18373:18;;;18366:62;-1:-1:-1;;;18444:18:1;;;18437:42;18496:19;;19744:139:0::1;18113:408:1::0;19744:139:0::1;19956:4;19949:3;19928:13;4811:12:::0;;;4723:108;19928:13:::1;:17;::::0;19944:1:::1;19928:17;:::i;:::-;19927:25;;;;:::i;:::-;19926:34;;;;:::i;:::-;19916:6;:44;;19894:137;;;::::0;-1:-1:-1;;;19894:137:0;;18728:2:1;19894:137:0::1;::::0;::::1;18710:21:1::0;18767:2;18747:18;;;18740:30;18806:34;18786:18;;;18779:62;-1:-1:-1;;;18857:18:1;;;18850:41;18908:19;;19894:137:0::1;18526:407:1::0;19894:137:0::1;20071:15;:6:::0;20081:4:::1;20071:15;:::i;:::-;20059:9;:27:::0;;;20102:33:::1;::::0;2073:25:1;;;20102:33:0::1;::::0;2061:2:1;2046:18;20102:33:0::1;1927:177:1::0;20221:428:0;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;20361:6:::1;20340:13;4811:12:::0;;;4723:108;20340:13:::1;:17;::::0;20356:1:::1;20340:17;:::i;:::-;20339:28;;;;:::i;:::-;20326:9;:41;;20304:144;;;::::0;-1:-1:-1;;;20304:144:0;;19140:2:1;20304:144:0::1;::::0;::::1;19122:21:1::0;19179:2;19159:18;;;19152:30;19218:34;19198:18;;;19191:62;-1:-1:-1;;;19269:18:1;;;19262:51;19330:19;;20304:144:0::1;18938:417:1::0;20304:144:0::1;20516:4;20495:13;4811:12:::0;;;4723:108;20495:13:::1;:17;::::0;20511:1:::1;20495:17;:::i;:::-;20494:26;;;;:::i;:::-;20481:9;:39;;20459:141;;;::::0;-1:-1:-1;;;20459:141:0;;19562:2:1;20459:141:0::1;::::0;::::1;19544:21:1::0;19601:2;19581:18;;;19574:30;19640:34;19620:18;;;19613:62;-1:-1:-1;;;19691:18:1;;;19684:50;19751:19;;20459:141:0::1;19360:416:1::0;20459:141:0::1;20611:18;:30:::0;20221:428::o;19177:482::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;19316:4:::1;19307:5;19286:13;4811:12:::0;;;4723:108;19286:13:::1;:17;::::0;19302:1:::1;19286:17;:::i;:::-;19285:27;;;;:::i;:::-;19284:36;;;;:::i;:::-;19274:6;:46;;19252:139;;;::::0;-1:-1:-1;;;19252:139:0;;19983:2:1;19252:139:0::1;::::0;::::1;19965:21:1::0;20022:2;20002:18;;;19995:30;20061:34;20041:18;;;20034:62;-1:-1:-1;;;20112:18:1;;;20105:41;20163:19;;19252:139:0::1;19781:407:1::0;19252:139:0::1;19464:4;19457:3;19436:13;4811:12:::0;;;4723:108;19436:13:::1;:17;::::0;19452:1:::1;19436:17;:::i;:::-;19435:25;;;;:::i;:::-;19434:34;;;;:::i;:::-;19424:6;:44;;19402:135;;;::::0;-1:-1:-1;;;19402:135:0;;20395:2:1;19402:135:0::1;::::0;::::1;20377:21:1::0;20434:2;20414:18;;;20407:30;20473:34;20453:18;;;20446:62;-1:-1:-1;;;20524:18:1;;;20517:39;20573:19;;19402:135:0::1;20193:405:1::0;19402:135:0::1;19585:15;:6:::0;19595:4:::1;19585:15;:::i;:::-;19569:13;:31:::0;;;19616:35:::1;::::0;2073:25:1;;;19616:35:0::1;::::0;2061:2:1;2046:18;19616:35:0::1;1927:177:1::0;35145:2285:0;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;35327:13:::1;::::0;::::1;::::0;::::1;;;35326:14;35318:70;;;::::0;-1:-1:-1;;;35318:70:0;;20805:2:1;35318:70:0::1;::::0;::::1;20787:21:1::0;20844:2;20824:18;;;20817:30;20883:34;20863:18;;;20856:62;-1:-1:-1;;;20934:18:1;;;20927:41;20985:19;;35318:70:0::1;20603:407:1::0;35318:70:0::1;35440:2;35421:16;:21;35399:110;;;;-1:-1:-1::0;;;35399:110:0::1;;;;;;;:::i;:::-;35562:15;:22;35544:7;:14;:40;35522:120;;;::::0;-1:-1:-1;;;35522:120:0;;9863:2:1;35522:120:0::1;::::0;::::1;9845:21:1::0;9902:2;9882:18;;;9875:30;9941:32;9921:18;;;9914:60;9991:18;;35522:120:0::1;9661:354:1::0;35522:120:0::1;35692:3;35675:7;:14;:20;35653:124;;;;-1:-1:-1::0;;;35653:124:0::1;;;;;;;:::i;:::-;35891:9;35886:336;35910:7;:14;35906:1;:18;35886:336;;;35946:14;35963:7;35971:1;35963:10;;;;;;;;:::i;:::-;;;;;;;35946:27;;36037:19;;36019:15;:37;;;;:::i;:::-;-1:-1:-1::0;;;;;35988:28:0;::::1;;::::0;;;:20:::1;:28;::::0;;;;:68;;;;36134:18;;:15;;36150:1;;36134:18;::::1;;;;;:::i;:::-;;;;;;;36117:35;;36167:43;36183:10;36195:6;36203;36167:15;:43::i;:::-;35931:291;;35926:3;;;;;:::i;:::-;;;;35886:336;;;-1:-1:-1::0;36269:13:0::1;:20:::0;;-1:-1:-1;;36300:18:0;;;;;36350:12:::1;36329:18;:33:::0;;;36394:37:::1;::::0;36415:16;;36394:37:::1;:::i;:::-;36373:18;:58:::0;36447:16:::1;::::0;::::1;::::0;;;::::1;36853:1;36829:21;:25;36807:110;;;::::0;-1:-1:-1;;;36807:110:0;;21217:2:1;36807:110:0::1;::::0;::::1;21199:21:1::0;21256:2;21236:18;;;21229:30;21295:34;21275:18;;;21268:62;-1:-1:-1;;;21346:18:1;;;21339:33;21389:19;;36807:110:0::1;21015:399:1::0;36807:110:0::1;36979:1;36952:24;36970:4;36952:9;:24::i;:::-;:28;36930:116;;;::::0;-1:-1:-1;;;36930:116:0;;21621:2:1;36930:116:0::1;::::0;::::1;21603:21:1::0;21660:2;21640:18;;;21633:30;21699:34;21679:18;;;21672:62;-1:-1:-1;;;21750:18:1;;;21743:36;21796:19;;36930:116:0::1;21419:402:1::0;36930:116:0::1;37091:9;::::0;37059:69:::1;::::0;37076:4:::1;::::0;-1:-1:-1;;;;;37091:9:0::1;37103:24;37076:4:::0;37103:9:::1;:24::i;37059:69::-;37139:9;::::0;-1:-1:-1;;;;;37139:9:0::1;:25;37172:21;37217:4;37237:24;37217:4:::0;37237:9:::1;:24::i;:::-;37276:1;37319::::0;37370:10:::1;37396:15;37139:283;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35145:2285:::0;;;:::o;18602:98::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;18664:20:::1;:28:::0;;-1:-1:-1;;18664:28:0::1;::::0;;18602:98::o;11199:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11199:28:0;;-1:-1:-1;11199:28:0;:::o;9091:281::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9194:22:0;::::1;9172:110;;;::::0;-1:-1:-1;;;9172:110:0;;22951:2:1;9172:110:0::1;::::0;::::1;22933:21:1::0;22990:2;22970:18;;;22963:30;23029:34;23009:18;;;23002:62;-1:-1:-1;;;23080:18:1;;;23073:36;23126:19;;9172:110:0::1;22749:402:1::0;9172:110:0::1;9319:6;::::0;9298:38:::1;::::0;-1:-1:-1;;;;;9298:38:0;;::::1;::::0;9319:6:::1;::::0;9298:38:::1;::::0;9319:6:::1;::::0;9298:38:::1;9347:6;:17:::0;;-1:-1:-1;;;;;;9347:17:0::1;-1:-1:-1::0;;;;;9347:17:0;;;::::1;::::0;;;::::1;::::0;;9091:281::o;33676:185::-;8846:6;;-1:-1:-1;;;;;8846:6:0;552:10;8846:22;8838:67;;;;-1:-1:-1;;;8838:67:0;;;;;;;:::i;:::-;33771:82:::1;::::0;33734:12:::1;::::0;33779:10:::1;::::0;33803:21:::1;::::0;33734:12;33771:82;33734:12;33771:82;33803:21;33779:10;33771:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;33676:185:0:o;7988:380::-;-1:-1:-1;;;;;8124:19:0;;8116:68;;;;-1:-1:-1;;;8116:68:0;;23568:2:1;8116:68:0;;;23550:21:1;23607:2;23587:18;;;23580:30;23646:34;23626:18;;;23619:62;-1:-1:-1;;;23697:18:1;;;23690:34;23741:19;;8116:68:0;23366:400:1;8116:68:0;-1:-1:-1;;;;;8203:21:0;;8195:68;;;;-1:-1:-1;;;8195:68:0;;23973:2:1;8195:68:0;;;23955:21:1;24012:2;23992:18;;;23985:30;24051:34;24031:18;;;24024:62;-1:-1:-1;;;24102:18:1;;;24095:32;24144:19;;8195:68:0;23771:398:1;8195:68:0;-1:-1:-1;;;;;8276:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8328:32;;2073:25:1;;;8328:32:0;;2046:18:1;8328:32:0;;;;;;;7988:380;;;:::o;7007:651::-;-1:-1:-1;;;;;7147:20:0;;7139:70;;;;-1:-1:-1;;;7139:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7228:23:0;;7220:71;;;;-1:-1:-1;;;7220:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7328:17:0;;7304:21;7328:17;;;;;;;;;;;7378:23;;;;7356:111;;;;-1:-1:-1;;;7356:111:0;;25186:2:1;7356:111:0;;;25168:21:1;25225:2;25205:18;;;25198:30;25264:34;25244:18;;;25237:62;-1:-1:-1;;;25315:18:1;;;25308:36;25361:19;;7356:111:0;24984:402:1;7356:111:0;-1:-1:-1;;;;;7503:17:0;;;:9;:17;;;;;;;;;;;7523:22;;;7503:42;;7567:20;;;;;;;;:30;;7539:6;;7503:9;7567:30;;7539:6;;7567:30;:::i;:::-;;;;;;;;7632:9;-1:-1:-1;;;;;7615:35:0;7624:6;-1:-1:-1;;;;;7615:35:0;;7643:6;7615:35;;;;2073:25:1;;2061:2;2046:18;;1927:177;7615:35:0;;;;;;;;7128:530;7007:651;;;:::o;24140:6047::-;-1:-1:-1;;;;;24272:18:0;;24264:68;;;;-1:-1:-1;;;24264:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24351:16:0;;24343:64;;;;-1:-1:-1;;;24343:64:0;;;;;;;:::i;:::-;24435:1;24426:6;:10;24418:52;;;;-1:-1:-1;;;24418:52:0;;25593:2:1;24418:52:0;;;25575:21:1;25632:2;25612:18;;;25605:30;25671:31;25651:18;;;25644:59;25720:18;;24418:52:0;25391:353:1;24418:52:0;24488:13;;;;;;;24483:183;;-1:-1:-1;;;;;24544:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24573:23:0;;;;;;:19;:23;;;;;;;;24544:52;24518:136;;;;-1:-1:-1;;;24518:136:0;;25951:2:1;24518:136:0;;;25933:21:1;25990:2;25970:18;;;25963:30;-1:-1:-1;;;26009:18:1;;;26002:52;26071:18;;24518:136:0;25749:346:1;24518:136:0;30290:18;;30275:12;:33;24682:26;:43;;;;-1:-1:-1;24712:13:0;;;;;;;24682:43;24678:268;;;-1:-1:-1;;;;;24769:17:0;;;;;;:11;:17;;;;;;;;24768:18;;:35;;-1:-1:-1;8784:6:0;;-1:-1:-1;;;;;24790:13:0;;;8784:6;;24790:13;24768:35;:60;;;-1:-1:-1;;;;;;24807:21:0;;24821:6;24807:21;24768:60;24742:192;;;;-1:-1:-1;;;24742:192:0;;26302:2:1;24742:192:0;;;26284:21:1;26341:2;26321:18;;;26314:30;26380:34;26360:18;;;26353:62;26451:34;26431:18;;;26424:62;-1:-1:-1;;;26502:19:1;;;26495:37;26549:19;;24742:192:0;26100:474:1;24742:192:0;24962:14;;;;24958:2118;;;8784:6;;-1:-1:-1;;;;;25015:15:0;;;8784:6;;25015:15;;;;:49;;-1:-1:-1;8784:6:0;;-1:-1:-1;;;;;25051:13:0;;;8784:6;;25051:13;;25015:49;:91;;;;-1:-1:-1;;;;;;25085:21:0;;25099:6;25085:21;;25015:91;:138;;;;-1:-1:-1;;;;;;25128:25:0;;;;;;:19;:25;;;;;;;;25127:26;25015:138;:183;;;;-1:-1:-1;;;;;;25175:23:0;;;;;;:19;:23;;;;;;;;25174:24;25015:183;24993:2072;;;25237:20;;;;25233:692;;;25300:9;;-1:-1:-1;;;;;25286:24:0;;;25300:9;;25286:24;;;;:49;;-1:-1:-1;25328:6:0;;-1:-1:-1;;;;;25314:21:0;;;25328:6;;25314:21;;25286:49;25282:624;;;25477:16;25492:1;25477:12;:16;:::i;:::-;25431:9;25402:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;25598:16:0;25613:1;25598:12;:16;:::i;:::-;-1:-1:-1;;;;;25530:32:0;;;;;;:28;:32;;;;;;:84;25402:212;25364:363;;;;-1:-1:-1;;;25364:363:0;;26911:2:1;25364:363:0;;;26893:21:1;26950:2;26930:18;;;26923:30;26989:34;26969:18;;;26962:62;-1:-1:-1;;;27040:18:1;;;27033:51;27101:19;;25364:363:0;26709:417:1;25364:363:0;25783:9;25754:39;;;;:28;:39;;;;;;25796:12;25754:54;;;;-1:-1:-1;;;;;25835:32:0;;;;;;:47;25282:624;-1:-1:-1;;;;;25999:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;26056:35:0;;;;;;:31;:35;;;;;;;;26055:36;25999:92;25973:1077;;;26152:12;;26142:6;:22;;26134:80;;;;-1:-1:-1;;;26134:80:0;;27333:2:1;26134:80:0;;;27315:21:1;27372:2;27352:18;;;27345:30;27411:34;27391:18;;;27384:62;-1:-1:-1;;;27462:18:1;;;27455:43;27515:19;;26134:80:0;27131:409:1;26134:80:0;26271:9;;26254:13;26264:2;26254:9;:13::i;:::-;26245:22;;:6;:22;:::i;:::-;:35;;26237:67;;;;-1:-1:-1;;;26237:67:0;;27747:2:1;26237:67:0;;;27729:21:1;27786:2;27766:18;;;27759:30;-1:-1:-1;;;27805:18:1;;;27798:49;27864:18;;26237:67:0;27545:343:1;26237:67:0;25973:1077;;;-1:-1:-1;;;;;26402:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;26457:37:0;;;;;;:31;:37;;;;;;;;26456:38;26402:92;26376:674;;;26555:13;;26545:6;:23;;26537:83;;;;-1:-1:-1;;;26537:83:0;;28095:2:1;26537:83:0;;;28077:21:1;28134:2;28114:18;;;28107:30;28173:34;28153:18;;;28146:62;-1:-1:-1;;;28224:18:1;;;28217:45;28279:19;;26537:83:0;27893:411:1;26537:83:0;-1:-1:-1;;;;;26651:26:0;;;;;;:20;:26;;;;;;26681:15;-1:-1:-1;26651:45:0;26643:73;;;;-1:-1:-1;;;26643:73:0;;28511:2:1;26643:73:0;;;28493:21:1;28550:2;28530:18;;;28523:30;-1:-1:-1;;;28569:18:1;;;28562:45;28624:18;;26643:73:0;28309:339:1;26643:73:0;26786:15;;26768:33;;:15;:33;:::i;:::-;-1:-1:-1;;;;;26739:26:0;;;;;;:20;:26;;;;;:62;26376:674;;;-1:-1:-1;;;;;26850:35:0;;;;;;:31;:35;;;;;;;;26849:36;:64;;;;-1:-1:-1;;;;;;26890:23:0;;;;;;:19;:23;;;;;;;;26889:24;26849:64;26845:205;;;26938:92;;-1:-1:-1;;;26938:92:0;;28855:2:1;26938:92:0;;;28837:21:1;28894:2;28874:18;;;28867:30;28933:34;28913:18;;;28906:62;29004:34;28984:18;;;28977:62;-1:-1:-1;;;29055:19:1;;;29048:49;29114:19;;26938:92:0;28653:486:1;26845:205:0;27088:28;27119:24;27137:4;27119:9;:24::i;:::-;27195:18;;27088:55;;-1:-1:-1;27171:42:0;;;;;;;27244:22;;-1:-1:-1;27255:11:0;;;;;;;27244:22;:35;;;;-1:-1:-1;27271:8:0;;-1:-1:-1;;;27271:8:0;;;;27270:9;27244:35;:68;;;;-1:-1:-1;;;;;;27283:29:0;;;;;;:25;:29;;;;;;;;27244:68;27226:196;;;27339:8;:15;;-1:-1:-1;;;;27339:15:0;-1:-1:-1;;;27339:15:0;;;27369:10;:8;:10::i;:::-;27394:8;:16;;-1:-1:-1;;;;27394:16:0;;;27226:196;-1:-1:-1;;;;;27553:25:0;;27434:12;27553:25;;;:19;:25;;;;;;27449:4;;27553:25;;;:52;;-1:-1:-1;;;;;;27582:23:0;;;;;;:19;:23;;;;;;;;27553:52;27549:100;;;-1:-1:-1;27632:5:0;27549:100;27661:12;27766:7;27762:2372;;;30290:18;;30275:12;:33;27849:152;;;;27925:8;27910:12;;:23;;;;:::i;:::-;27900:6;:33;;:100;;;;;27988:12;27962:18;;27983:1;27962:22;;;;:::i;:::-;:38;;27900:100;27848:206;;;;-1:-1:-1;;;;;;28023:31:0;;;;;;:25;:31;;;;;;;;27848:206;:257;;;;-1:-1:-1;;;;;;28076:29:0;;;;;;:25;:29;;;;;;;;28075:30;27848:257;:302;;;;-1:-1:-1;;;;;;28127:23:0;;;;;;:19;:23;;;;;;;;28126:24;27848:302;:339;;;;;28186:1;28171:12;;:16;27848:339;27826:2159;;;30290:18;;30275:12;:33;28222:332;;28533:1;28517:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28222:332:0;-1:-1:-1;;;;;28579:15:0;;;;;;:11;:15;;;;;;;;28574:216;;-1:-1:-1;;;;;28619:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;28619:22:0;28637:4;28619:22;;;;;;28664:10;:15;;28637:4;;28664:10;;:15;;28637:4;;28664:15;:::i;:::-;;;;-1:-1:-1;;28702:11:0;:20;;;;;;;-1:-1:-1;28702:20:0;;;;;;;;-1:-1:-1;;;;;;28702:20:0;-1:-1:-1;;;;;28702:20:0;;;;;;;;28750;;780:51:1;;;28750:20:0;;768:2:1;753:18;28750:20:0;;;;;;;28574:216;28833:3;28818:11;:6;28827:2;28818:11;:::i;:::-;28817:19;;;;:::i;:::-;28810:26;;28928:12;;28909:15;;28902:4;:22;;;;:::i;:::-;28901:39;;;;:::i;:::-;28879:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29010:12:0;;28990:16;;28983:23;;:4;:23;:::i;:::-;28982:40;;;;:::i;:::-;28959:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29088:12:0;;29070:14;;29063:21;;:4;:21;:::i;:::-;29062:38;;;;:::i;:::-;29041:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;27826:2159:0;;-1:-1:-1;27826:2159:0;;-1:-1:-1;;;;;29163:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29212:1;29196:13;;:17;29163:50;29159:826;;;29268:3;29251:13;;29242:6;:22;;;;:::i;:::-;29241:30;;;;:::i;:::-;29234:37;;29340:13;;29320:16;;29313:4;:23;;;;:::i;:::-;29312:41;;;;:::i;:::-;29290:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29466:13:0;;29424:17;;29417:24;;:4;:24;:::i;:::-;29416:63;;;;:::i;:::-;29372:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;29546:13:0;;29527:15;;29520:22;;:4;:22;:::i;29159:826::-;-1:-1:-1;;;;;29621:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29671:1;29656:12;;:16;29621:51;29617:368;;;29726:3;29710:12;;29701:6;:21;;;;:::i;:::-;29700:29;;;;:::i;:::-;29693:36;;29797:12;;29778:15;;29771:4;:22;;;;:::i;:::-;29770:39;;;;:::i;:::-;29748:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29879:12:0;;29859:16;;29852:23;;:4;:23;:::i;:::-;29851:40;;;;:::i;:::-;29828:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29957:12:0;;29939:14;;29932:21;;:4;:21;:::i;:::-;29931:38;;;;:::i;:::-;29910:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29617:368:0;30005:8;;30001:91;;30034:42;30050:4;30064;30071;30034:15;:42::i;:::-;30108:14;30118:4;30108:14;;:::i;:::-;;;27762:2372;30146:33;30162:4;30168:2;30172:6;30146:15;:33::i;:::-;24253:5934;;;;24140:6047;;;:::o;31420:1611::-;31459:23;31485:24;31503:4;31485:9;:24::i;:::-;31459:50;;31583:1;31563:17;;:21;:70;;;;;31616:17;;31588:24;31606:4;31588:9;:24::i;:::-;:45;;31563:70;31560:179;;;31690:15;;31708:17;;31651:75;;31675:4;;-1:-1:-1;;;;;31690:15:0;;;;31651;:75::i;:::-;31770:1;31750:17;:21;;;31846:19;;31812:18;;31770:1;;31812:53;;;:::i;:::-;:86;;;;:::i;:::-;31784:114;-1:-1:-1;31915:20:0;;;:46;;-1:-1:-1;31939:22:0;;31915:46;31911:85;;;31978:7;;31420:1611::o;31911:85::-;32030:18;;:23;;32051:2;32030:23;:::i;:::-;32012:15;:41;32008:115;;;32088:18;;:23;;32109:2;32088:23;:::i;:::-;32070:41;;32008:115;32135:12;32209:23;32322:1;32289:17;32254:18;;32236:15;:36;;;;:::i;:::-;32235:71;;;;:::i;:::-;:88;;;;:::i;:::-;32209:114;-1:-1:-1;32336:51:0;32353:33;32209:114;32353:15;:33;:::i;:::-;32336:16;:51::i;:::-;32601:18;;32421:21;;;;32400:18;;32601:22;;32622:1;;32601:22;:::i;:::-;32580:44;;:17;:44;:::i;:::-;32543:19;;32530:32;;:10;:32;:::i;:::-;32529:96;;;;:::i;:::-;32502:123;-1:-1:-1;32638:35:0;32502:123;32638:35;;:::i;:::-;32707:1;32686:18;:22;;;32719:19;:23;;;32753:17;:21;32638:35;-1:-1:-1;32791:19:0;;;;;:42;;;32832:1;32814:15;:19;32791:42;32787:121;;;32850:46;32863:15;32880;32850:12;:46::i;:::-;32942:17;;32934:89;;-1:-1:-1;;;;;32942:17:0;;;;32987:21;;32934:89;;;;32987:21;32942:17;32934:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;31420:1611:0:o;22525:236::-;-1:-1:-1;;;;;22608:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22608:39:0;;;;;;;22658;22608:31;:39;22658:26;:39::i;30324:571::-;30474:16;;;30488:1;30474:16;;;;;;;;30450:21;;30474:16;;;;;;;;;;-1:-1:-1;30474:16:0;30450:40;;30519:4;30501;30506:1;30501:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30501:23:0;;;:7;;;;;;;;;;:23;;;;30545:9;;:16;;;-1:-1:-1;;;30545:16:0;;;;:9;;;;;:14;;:16;;;;;30501:7;;30545:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30535:4;30540:1;30535:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30535:26:0;;;:7;;;;;;;;;:26;30606:9;;30574:56;;30591:4;;30606:9;30618:11;30574:8;:56::i;:::-;30669:9;;:218;;-1:-1:-1;;;30669:218:0;;-1:-1:-1;;;;;30669:9:0;;;;:60;;:218;;30744:11;;30669:9;;30814:4;;30841;;30861:15;;30669:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30903:509;31083:9;;31051:56;;31068:4;;-1:-1:-1;;;;;31083:9:0;31095:11;31051:8;:56::i;:::-;31150:9;;:254;;-1:-1:-1;;;31150:254:0;;-1:-1:-1;;;;;31150:9:0;;;;:25;;31183:9;;31150:254;;31216:4;;31236:11;;31150:9;;;;31356:6;;31378:15;;31150:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30903:509;;:::o;20866:221::-;-1:-1:-1;;;;;20968:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20968:52:0;;;;;;;;;;21036:43;;30155:51:1;;;30222:18;;;30215:50;21036:43:0;;30128:18:1;21036:43:0;;;;;;;20866:221;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:180::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;-1:-1:-1;1641:23:1;;1490:180;-1:-1:-1;1490:180:1:o;1675:247::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;:::-;1911:5;1675:247;-1:-1:-1;;;1675:247:1:o;2109:127::-;2170:10;2165:3;2161:20;2158:1;2151:31;2201:4;2198:1;2191:15;2225:4;2222:1;2215:15;2241:275;2312:2;2306:9;2377:2;2358:13;;-1:-1:-1;;2354:27:1;2342:40;;2412:18;2397:34;;2433:22;;;2394:62;2391:88;;;2459:18;;:::i;:::-;2495:2;2488:22;2241:275;;-1:-1:-1;2241:275:1:o;2521:183::-;2581:4;2614:18;2606:6;2603:30;2600:56;;;2636:18;;:::i;:::-;-1:-1:-1;2681:1:1;2677:14;2693:4;2673:25;;2521:183::o;2709:737::-;2763:5;2816:3;2809:4;2801:6;2797:17;2793:27;2783:55;;2834:1;2831;2824:12;2783:55;2870:6;2857:20;2896:4;2920:60;2936:43;2976:2;2936:43;:::i;:::-;2920:60;:::i;:::-;3014:15;;;3100:1;3096:10;;;;3084:23;;3080:32;;;3045:12;;;;3124:15;;;3121:35;;;3152:1;3149;3142:12;3121:35;3188:2;3180:6;3176:15;3200:217;3216:6;3211:3;3208:15;3200:217;;;3296:3;3283:17;3313:31;3338:5;3313:31;:::i;:::-;3357:18;;3395:12;;;;3233;;3200:217;;;-1:-1:-1;3435:5:1;2709:737;-1:-1:-1;;;;;;2709:737:1:o;3451:662::-;3505:5;3558:3;3551:4;3543:6;3539:17;3535:27;3525:55;;3576:1;3573;3566:12;3525:55;3612:6;3599:20;3638:4;3662:60;3678:43;3718:2;3678:43;:::i;3662:60::-;3756:15;;;3842:1;3838:10;;;;3826:23;;3822:32;;;3787:12;;;;3866:15;;;3863:35;;;3894:1;3891;3884:12;3863:35;3930:2;3922:6;3918:15;3942:142;3958:6;3953:3;3950:15;3942:142;;;4024:17;;4012:30;;4062:12;;;;3975;;3942:142;;4118:595;4236:6;4244;4297:2;4285:9;4276:7;4272:23;4268:32;4265:52;;;4313:1;4310;4303:12;4265:52;4353:9;4340:23;4382:18;4423:2;4415:6;4412:14;4409:34;;;4439:1;4436;4429:12;4409:34;4462:61;4515:7;4506:6;4495:9;4491:22;4462:61;:::i;:::-;4452:71;;4576:2;4565:9;4561:18;4548:32;4532:48;;4605:2;4595:8;4592:16;4589:36;;;4621:1;4618;4611:12;4589:36;;4644:63;4699:7;4688:8;4677:9;4673:24;4644:63;:::i;:::-;4634:73;;;4118:595;;;;;:::o;4718:456::-;4795:6;4803;4811;4864:2;4852:9;4843:7;4839:23;4835:32;4832:52;;;4880:1;4877;4870:12;4832:52;4919:9;4906:23;4938:31;4963:5;4938:31;:::i;:::-;4988:5;-1:-1:-1;5045:2:1;5030:18;;5017:32;5058:33;5017:32;5058:33;:::i;:::-;4718:456;;5110:7;;-1:-1:-1;;;5164:2:1;5149:18;;;;5136:32;;4718:456::o;5576:118::-;5662:5;5655:13;5648:21;5641:5;5638:32;5628:60;;5684:1;5681;5674:12;5699:382;5764:6;5772;5825:2;5813:9;5804:7;5800:23;5796:32;5793:52;;;5841:1;5838;5831:12;5793:52;5880:9;5867:23;5899:31;5924:5;5899:31;:::i;:::-;5949:5;-1:-1:-1;6006:2:1;5991:18;;5978:32;6019:30;5978:32;6019:30;:::i;:::-;6068:7;6058:17;;;5699:382;;;;;:::o;6086:316::-;6163:6;6171;6179;6232:2;6220:9;6211:7;6207:23;6203:32;6200:52;;;6248:1;6245;6238:12;6200:52;-1:-1:-1;;6271:23:1;;;6341:2;6326:18;;6313:32;;-1:-1:-1;6392:2:1;6377:18;;;6364:32;;6086:316;-1:-1:-1;6086:316:1:o;6407:388::-;6475:6;6483;6536:2;6524:9;6515:7;6511:23;6507:32;6504:52;;;6552:1;6549;6542:12;6504:52;6591:9;6578:23;6610:31;6635:5;6610:31;:::i;:::-;6660:5;-1:-1:-1;6717:2:1;6702:18;;6689:32;6730:33;6689:32;6730:33;:::i;6800:461::-;6853:3;6891:5;6885:12;6918:6;6913:3;6906:19;6944:4;6973:2;6968:3;6964:12;6957:19;;7010:2;7003:5;6999:14;7031:1;7041:195;7055:6;7052:1;7049:13;7041:195;;;7120:13;;-1:-1:-1;;;;;7116:39:1;7104:52;;7176:12;;;;7211:15;;;;7152:1;7070:9;7041:195;;;-1:-1:-1;7252:3:1;;6800:461;-1:-1:-1;;;;;6800:461:1:o;7266:261::-;7445:2;7434:9;7427:21;7408:4;7465:56;7517:2;7506:9;7502:18;7494:6;7465:56;:::i;7532:663::-;7659:6;7667;7675;7728:2;7716:9;7707:7;7703:23;7699:32;7696:52;;;7744:1;7741;7734:12;7696:52;7784:9;7771:23;7813:18;7854:2;7846:6;7843:14;7840:34;;;7870:1;7867;7860:12;7840:34;7893:61;7946:7;7937:6;7926:9;7922:22;7893:61;:::i;:::-;7883:71;;8007:2;7996:9;7992:18;7979:32;7963:48;;8036:2;8026:8;8023:16;8020:36;;;8052:1;8049;8042:12;8020:36;;8075:63;8130:7;8119:8;8108:9;8104:24;8075:63;:::i;:::-;8065:73;;;8185:2;8174:9;8170:18;8157:32;8147:42;;7532:663;;;;;:::o;8200:380::-;8279:1;8275:12;;;;8322;;;8343:61;;8397:4;8389:6;8385:17;8375:27;;8343:61;8450:2;8442:6;8439:14;8419:18;8416:38;8413:161;;8496:10;8491:3;8487:20;8484:1;8477:31;8531:4;8528:1;8521:15;8559:4;8556:1;8549:15;8413:161;;8200:380;;;:::o;8585:356::-;8787:2;8769:21;;;8806:18;;;8799:30;8865:34;8860:2;8845:18;;8838:62;8932:2;8917:18;;8585:356::o;8946:127::-;9007:10;9002:3;8998:20;8995:1;8988:31;9038:4;9035:1;9028:15;9062:4;9059:1;9052:15;9078:168;9118:7;9184:1;9180;9176:6;9172:14;9169:1;9166:21;9161:1;9154:9;9147:17;9143:45;9140:71;;;9191:18;;:::i;:::-;-1:-1:-1;9231:9:1;;9078:168::o;10020:418::-;10222:2;10204:21;;;10261:2;10241:18;;;10234:30;10300:34;10295:2;10280:18;;10273:62;-1:-1:-1;;;10366:2:1;10351:18;;10344:52;10428:3;10413:19;;10020:418::o;10443:127::-;10504:10;10499:3;10495:20;10492:1;10485:31;10535:4;10532:1;10525:15;10559:4;10556:1;10549:15;10575:135;10614:3;10635:17;;;10632:43;;10655:18;;:::i;:::-;-1:-1:-1;10702:1:1;10691:13;;10575:135::o;11124:217::-;11164:1;11190;11180:132;;11234:10;11229:3;11225:20;11222:1;11215:31;11269:4;11266:1;11259:15;11297:4;11294:1;11287:15;11180:132;-1:-1:-1;11326:9:1;;11124:217::o;12166:128::-;12206:3;12237:1;12233:6;12230:1;12227:13;12224:39;;;12243:18;;:::i;:::-;-1:-1:-1;12279:9:1;;12166:128::o;15021:403::-;15223:2;15205:21;;;15262:2;15242:18;;;15235:30;15301:34;15296:2;15281:18;;15274:62;-1:-1:-1;;;15367:2:1;15352:18;;15345:37;15414:3;15399:19;;15021:403::o;16205:184::-;16275:6;16328:2;16316:9;16307:7;16303:23;16299:32;16296:52;;;16344:1;16341;16334:12;16296:52;-1:-1:-1;16367:16:1;;16205:184;-1:-1:-1;16205:184:1:o;16673:245::-;16740:6;16793:2;16781:9;16772:7;16768:23;16764:32;16761:52;;;16809:1;16806;16799:12;16761:52;16841:9;16835:16;16860:28;16882:5;16860:28;:::i;21826:607::-;-1:-1:-1;;;;;22185:15:1;;;22167:34;;22232:2;22217:18;;22210:34;;;;22275:2;22260:18;;22253:34;;;;22318:2;22303:18;;22296:34;;;;22367:15;;;22361:3;22346:19;;22339:44;22147:3;22399:19;;22392:35;;;;22116:3;22101:19;;21826:607::o;22438:306::-;22526:6;22534;22542;22595:2;22583:9;22574:7;22570:23;22566:32;22563:52;;;22611:1;22608;22601:12;22563:52;22640:9;22634:16;22624:26;;22690:2;22679:9;22675:18;22669:25;22659:35;;22734:2;22723:9;22719:18;22713:25;22703:35;;22438:306;;;;;:::o;24174:401::-;24376:2;24358:21;;;24415:2;24395:18;;;24388:30;24454:34;24449:2;24434:18;;24427:62;-1:-1:-1;;;24520:2:1;24505:18;;24498:35;24565:3;24550:19;;24174:401::o;24580:399::-;24782:2;24764:21;;;24821:2;24801:18;;;24794:30;24860:34;24855:2;24840:18;;24833:62;-1:-1:-1;;;24926:2:1;24911:18;;24904:33;24969:3;24954:19;;24580:399::o;26579:125::-;26619:4;26647:1;26644;26641:8;26638:34;;;26652:18;;:::i;:::-;-1:-1:-1;26689:9:1;;26579:125::o;29144:251::-;29214:6;29267:2;29255:9;29246:7;29242:23;29238:32;29235:52;;;29283:1;29280;29273:12;29235:52;29315:9;29309:16;29334:31;29359:5;29334:31;:::i;29400:582::-;29699:6;29688:9;29681:25;29742:6;29737:2;29726:9;29722:18;29715:34;29785:3;29780:2;29769:9;29765:18;29758:31;29662:4;29806:57;29858:3;29847:9;29843:19;29835:6;29806:57;:::i;:::-;-1:-1:-1;;;;;29899:32:1;;;;29894:2;29879:18;;29872:60;-1:-1:-1;29963:3:1;29948:19;29941:35;29798:65;29400:582;-1:-1:-1;;;29400:582:1:o
Swarm Source
ipfs://0c05e97ddf19299c9a131aa1b787b8673290777927fbc8d07bb2433b2aa07078
Loading...
Loading
Loading...
Loading
[ 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.