More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 600 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19879209 | 73 days ago | IN | 0 ETH | 0.00014664 | ||||
Approve | 16535053 | 543 days ago | IN | 0 ETH | 0.00081866 | ||||
Approve | 16463677 | 553 days ago | IN | 0 ETH | 0.00040547 | ||||
Approve | 16401480 | 561 days ago | IN | 0 ETH | 0.00169031 | ||||
Approve | 16341036 | 570 days ago | IN | 0 ETH | 0.0004838 | ||||
Approve | 16330813 | 571 days ago | IN | 0 ETH | 0.00038944 | ||||
Approve | 16188008 | 591 days ago | IN | 0 ETH | 0.00060244 | ||||
Approve | 16160048 | 595 days ago | IN | 0 ETH | 0.00059725 | ||||
Approve | 16069339 | 608 days ago | IN | 0 ETH | 0.00116214 | ||||
Approve | 15965303 | 622 days ago | IN | 0 ETH | 0.00035452 | ||||
Approve | 15926575 | 628 days ago | IN | 0 ETH | 0.00266059 | ||||
Transfer | 15920022 | 629 days ago | IN | 0 ETH | 0.00143715 | ||||
Transfer | 15911713 | 630 days ago | IN | 0 ETH | 0.00075115 | ||||
Transfer | 15911616 | 630 days ago | IN | 0 ETH | 0.00077432 | ||||
Approve | 15909350 | 630 days ago | IN | 0 ETH | 0.00054216 | ||||
Transfer | 15906852 | 630 days ago | IN | 0 ETH | 0.00064178 | ||||
Transfer | 15906451 | 630 days ago | IN | 0 ETH | 0.000613 | ||||
Transfer | 15906092 | 631 days ago | IN | 0 ETH | 0.00063517 | ||||
Transfer | 15905869 | 631 days ago | IN | 0 ETH | 0.00059995 | ||||
Transfer | 15905771 | 631 days ago | IN | 0 ETH | 0.00077782 | ||||
Transfer | 15905738 | 631 days ago | IN | 0 ETH | 0.00110672 | ||||
Transfer | 15905630 | 631 days ago | IN | 0 ETH | 0.00080327 | ||||
Transfer | 15905467 | 631 days ago | IN | 0 ETH | 0.000641 | ||||
Transfer | 15905423 | 631 days ago | IN | 0 ETH | 0.00062796 | ||||
Transfer | 15905395 | 631 days ago | IN | 0 ETH | 0.0006236 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15885377 | 633 days ago | 0.03195218 ETH | ||||
15885377 | 633 days ago | 0.00644835 ETH | ||||
15885377 | 633 days ago | 0.02564863 ETH | ||||
15885377 | 633 days ago | 0.00472766 ETH | ||||
15885377 | 633 days ago | 0.06877684 ETH | ||||
15885215 | 633 days ago | 0.04222127 ETH | ||||
15885215 | 633 days ago | 0.00603161 ETH | ||||
15885215 | 633 days ago | 0.03015805 ETH | ||||
15885215 | 633 days ago | 0.00904741 ETH | ||||
15885215 | 633 days ago | 0.08745836 ETH | ||||
15885192 | 633 days ago | 0.04211874 ETH | ||||
15885192 | 633 days ago | 0.00601696 ETH | ||||
15885192 | 633 days ago | 0.03008481 ETH | ||||
15885192 | 633 days ago | 0.00902544 ETH | ||||
15885192 | 633 days ago | 0.08724596 ETH | ||||
15885151 | 633 days ago | 0.03959399 ETH | ||||
15885151 | 633 days ago | 0.00565628 ETH | ||||
15885151 | 633 days ago | 0.02828142 ETH | ||||
15885151 | 633 days ago | 0.00848442 ETH | ||||
15885151 | 633 days ago | 0.08201613 ETH | ||||
15884879 | 633 days ago | 0.05420749 ETH | ||||
15884879 | 633 days ago | 0.01167822 ETH | ||||
15884879 | 633 days ago | 0.04462108 ETH | ||||
15884879 | 633 days ago | 0.0071898 ETH | ||||
15884879 | 633 days ago | 0.11769661 ETH |
Loading...
Loading
Contract Name:
DAOWhale
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-25 */ // SPDX-License-Identifier: MIT /* * * https://daowhale.live * */ pragma solidity 0.8.17; 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 DAOWhale 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; address public teamAddress; 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; // 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 public buyTeamFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public sellTreasuryFee; uint256 public sellTeamFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; uint256 public tokensForTreasury; uint256 public tokensForTeam; /******************/ // 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 UpdatedTeamAddress(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("DAOWhale", "WAO") { address newOwner = msg.sender; // can leave alone if owner is deployer. // initialize router IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); dexRouter = _dexRouter; // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 888 * 1e6 * 1e18; // 888 million maxBuyAmount = (totalSupply * 25) / 10000; // 0.25% maxSellAmount = (totalSupply * 25) / 10000; // 0.25% maxWallet = (totalSupply * 1) / 100; // 1% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % buyOperationsFee = 3; buyLiquidityFee = 0; buyTreasuryFee = 3; buyTeamFee = 1; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee + buyTeamFee; sellOperationsFee = 7; sellLiquidityFee = 3; sellTreasuryFee = 5; sellTeamFee = 1; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellTeamFee; operationsAddress = address(0xaECeAd12509D2c966dDdeD53fBB198DedB4124A5); treasuryAddress = address(0x639C4Fe68Cc9DD9dA3990b78d5BAa0F5E4e00E14); teamAddress = address(0x012683b865ED2c8dB3F4569a11BF962C40B926B0); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); _excludeFromMaxTransaction(address(treasuryAddress), true); _excludeFromMaxTransaction(address(teamAddress), true); _excludeFromMaxTransaction( address(0xd0012d64Fc164d014d973e855152DB75Cb8f5Fb2), true ); // Reserves excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); excludeFromFees(address(treasuryAddress), true); excludeFromFees(address(teamAddress), true); excludeFromFees( address(0xd0012d64Fc164d014d973e855152DB75Cb8f5Fb2), true ); // Reserves _createInitialSupply(address(0xdead), (totalSupply * 20) / 100); // Burn _createInitialSupply(newOwner, (totalSupply * 62) / 100); // LP, presale _createInitialSupply(teamAddress, (totalSupply * 3) / 100); // Team _createInitialSupply( address(0xd0012d64Fc164d014d973e855152DB75Cb8f5Fb2), (totalSupply * 15) / 100 ); // Reserves transferOwnership(newOwner); } receive() external payable {} // only use if conducting a presale function addPresaleAddressForExclusions(address _presaleAddress) external onlyOwner { excludeFromFees(_presaleAddress, true); _excludeFromMaxTransaction(_presaleAddress, true); } 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%" ); maxBuyAmount = newNum * (10**18); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 10000) / 1e18, "Cannot set max sell amount lower than 0.01%" ); maxSellAmount = newNum * (10**18); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max sell amount lower than 0.5%" ); maxWallet = newNum * (10**18); 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 _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } 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, uint256 _teamFee ) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyTreasuryFee = _treasuryFee; buyTeamFee = _teamFee; buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee + buyTeamFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees( uint256 _operationsFee, uint256 _liquidityFee, uint256 _treasuryFee, uint256 _teamFee ) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellTreasuryFee = _treasuryFee; sellTeamFee = _teamFee; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellTeamFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } 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 max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[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; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; tokensForTreasury += (fees * buyTreasuryFee) / buyTotalFees; tokensForTeam += (fees * buyTeamFee) / 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; tokensForTeam += (fees * sellTeamFee) / 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; tokensForTeam += (fees * buyTeamFee) / 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)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForTreasury + tokensForTeam; 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)); uint256 ethForTreasury = (ethBalance * tokensForTreasury) / (totalTokensToSwap - (tokensForLiquidity / 2)); uint256 ethForTeam = (ethBalance * tokensForTeam) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForOperations + ethForTreasury + ethForTeam; tokensForLiquidity = 0; tokensForOperations = 0; tokensForTreasury = 0; tokensForTeam = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(treasuryAddress).call{value: ethForTreasury}(""); (success, ) = address(teamAddress).call{value: ethForTeam}(""); (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), "_operationsAddress address cannot be 0" ); treasuryAddress = payable(_treasuryAddress); emit UpdatedTreasuryAddress(_treasuryAddress); } function setTeamAddress(address _teamAddress) external onlyOwner { require(_teamAddress != address(0), "_teamAddress address cannot be 0"); teamAddress = payable(_teamAddress); emit UpdatedTeamAddress(_teamAddress); } // 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); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; } function restoreLimits() external onlyOwner { limitsInEffect = true; } // 24-48 hours function sellTaxToTwelvePercent() external onlyOwner { sellOperationsFee = 5; sellLiquidityFee = 3; sellTreasuryFee = 3; sellTeamFee = 1; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellTeamFee; } // Reset to normal sell tax - after 48 hours function sellTaxToNormal() external onlyOwner { sellOperationsFee = 3; sellLiquidityFee = 0; sellTreasuryFee = 3; sellTeamFee = 1; sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellTeamFee; } 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); } } }
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":"UpdatedTeamAddress","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":"_presaleAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","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":"buyTeamFee","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":[],"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":[],"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":[{"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":"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":"sellTaxToNormal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxToTwelvePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTeamFee","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":"_teamAddress","type":"address"}],"name":"setTeamAddress","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":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"tokensForTeam","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"},{"internalType":"uint256","name":"_teamFee","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"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600f556014805462ffffff191660019081179091556016805460ff19169091179055600860809081526744414f5768616c6560c01b60a052610100604052600360c08181526257414f60e81b60e052906200005d8382620009d0565b5060046200006c8282620009d0565b505050600062000081620005c860201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004a0a833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000128573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014e919062000a9c565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d7919062000a9c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b919062000a9c565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000277906001620005cc565b600a5462000290906001600160a01b031660016200062f565b6b02de89507556d84678000000612710620002ad82601962000ae4565b620002b9919062000b04565b600655612710620002cc82601962000ae4565b620002d8919062000b04565b6007556064620002ea82600162000ae4565b620002f6919062000b04565b6008556127106200030982600562000ae4565b62000315919062000b04565b600b556003601881905560006019819055601a8290556001601b819055919062000340908262000b27565b6200034c919062000b27565b62000358919062000b27565b6017556007601d8190556003601e8190556005601f81905560016020819055929091620003859162000b27565b62000391919062000b27565b6200039d919062000b27565b601c55600c80546001600160a01b031990811673aecead12509d2c966ddded53fbb198dedb4124a517909155600d8054821673639c4fe68cc9dd9da3990b78d5baa0f5e4e00e14179055600e805490911673012683b865ed2c8db3f4569a11bf962c40b926b017905562000413836001620005cc565b62000420306001620005cc565b6200042f61dead6001620005cc565b600c5462000448906001600160a01b03166001620005cc565b600d5462000461906001600160a01b03166001620005cc565b600e546200047a906001600160a01b03166001620005cc565b6200049b73d0012d64fc164d014d973e855152db75cb8f5fb26001620005cc565b620004a88360016200069b565b620004b53060016200069b565b620004c461dead60016200069b565b600c54620004dd906001600160a01b031660016200069b565b600d54620004f6906001600160a01b031660016200069b565b600e546200050f906001600160a01b031660016200069b565b6200053073d0012d64fc164d014d973e855152db75cb8f5fb260016200069b565b6200055861dead60646200054684601462000ae4565b62000552919062000b04565b62000749565b6200056c8360646200054684603e62000ae4565b600e546200058c906001600160a01b031660646200054684600362000ae4565b620005b473d0012d64fc164d014d973e855152db75cb8f5fb260646200054684600f62000ae4565b620005bf836200082e565b50505062000b3d565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556200065f8282620005cc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006ea5760405162461bcd60e51b81526020600482018190526024820152600080516020620049ea83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006e1565b8060026000828254620007b5919062000b27565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e490849062000b27565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008795760405162461bcd60e51b81526020600482018190526024820152600080516020620049ea8339815191526044820152606401620006e1565b6001600160a01b038116620008e05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620006e1565b6005546040516001600160a01b0380841692169060008051602062004a0a83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200095657607f821691505b6020821081036200097757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009cb57600081815260208120601f850160051c81016020861015620009a65750805b601f850160051c820191505b81811015620009c757828155600101620009b2565b5050505b505050565b81516001600160401b03811115620009ec57620009ec6200092b565b62000a0481620009fd845462000941565b846200097d565b602080601f83116001811462000a3c576000841562000a235750858301515b600019600386901b1c1916600185901b178555620009c7565b600085815260208120601f198616915b8281101562000a6d5788860151825594840194600190910190840162000a4c565b508582101562000a8c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000aaf57600080fd5b81516001600160a01b038116811462000ac757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000afe5762000afe62000ace565b92915050565b60008262000b2257634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000afe5762000afe62000ace565b613e9d8062000b4d6000396000f3fe6080604052600436106104405760003560e01c806388e765ff11610234578063d729715f1161012e578063eb472fc4116100b6578063f5648a4f1161007a578063f5648a4f14610c90578063f637434214610ca5578063f8b45b0514610cbb578063fb002c9714610cd1578063fde83a3414610ce757600080fd5b8063eb472fc414610c0f578063ed0720f814610c2f578063ee40166e14610c44578063f11a24d314610c5a578063f2fde38b14610c7057600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610b5e578063e2f4560514610ba4578063e7ad9fcd14610bba578063e884f26014610bda578063ea4cfe1214610bef57600080fd5b8063d729715f14610afd578063d85ba06314610b13578063dc3f0d0f14610b29578063dd3c8e9a14610b4957600080fd5b8063a716b773116101bc578063c18bc19511610180578063c18bc19514610a6d578063c5f956af14610a8d578063c876d0b914610aad578063cc2ffe7c14610ac7578063d257b34f14610add57600080fd5b8063a716b773146109be578063a9059cbb146109de578063b62496f5146109fe578063bbc0c74214610a2e578063c024666814610a4d57600080fd5b80639a7a23d6116102035780639a7a23d61461093d5780639c2e4ac61461095d578063a28e86d314610973578063a457c2d714610988578063a62068ce146109a857600080fd5b806388e765ff146108d25780638da5cb5b146108e857806395d89b41146109065780639a5bd2dd1461091b57600080fd5b806351f205e4116103455780636b0a894c116102cd578063751039fc11610291578063751039fc1461082d5780637571336a1461084257806382aa7c68146108625780638366e79a1461088257806385ecfd28146108a257600080fd5b80636b0a894c146107965780636b2fb124146107ac5780636ddd1713146107c257806370a08231146107e2578063715018a61461081857600080fd5b80635c068a8c116103145780635c068a8c146107145780636605bfda1461072a5780636690864e1461074a57806366d602ae1461076a5780636a486a8e1461078057600080fd5b806351f205e4146106b257806358a6d531146106c75780635a139dd4146106de5780635bb988c9146106f457600080fd5b806323b872dd116103c857806339509351116103975780633950935114610622578063452ed4f114610642578063499b8394146106625780634a62bb65146106825780634f77f6c01461069c57600080fd5b806323b872dd146105a65780632be32b61146105c65780632e6ed7ef146105e6578063313ce5671461060657600080fd5b80631805805b1161040f5780631805805b1461050f57806318160ddd146105315780631a8145bb146105505780631c75f085146105665780632307b4411461058657600080fd5b806306fdde031461044c5780630758d92414610477578063095ea7b3146104af57806310d5de53146104df57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610cfd565b60405161046e9190613826565b60405180910390f35b34801561048357600080fd5b50600954610497906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b3480156104bb57600080fd5b506104cf6104ca366004613889565b610d8f565b604051901515815260200161046e565b3480156104eb57600080fd5b506104cf6104fa3660046138b5565b60266020526000908152604090205460ff1681565b34801561051b57600080fd5b5061052f61052a3660046138b5565b610da6565b005b34801561053d57600080fd5b506002545b60405190815260200161046e565b34801561055c57600080fd5b5061054260225481565b34801561057257600080fd5b50600e54610497906001600160a01b031681565b34801561059257600080fd5b5061052f6105a13660046139af565b610e65565b3480156105b257600080fd5b506104cf6105c1366004613a71565b610fbd565b3480156105d257600080fd5b5061052f6105e1366004613ab2565b611067565b3480156105f257600080fd5b5061052f610601366004613acb565b611175565b34801561061257600080fd5b506040516012815260200161046e565b34801561062e57600080fd5b506104cf61063d366004613889565b61122e565b34801561064e57600080fd5b50600a54610497906001600160a01b031681565b34801561066e57600080fd5b5061052f61067d3660046138b5565b61126a565b34801561068e57600080fd5b506014546104cf9060ff1681565b3480156106a857600080fd5b50610542601d5481565b3480156106be57600080fd5b5061052f611304565b3480156106d357600080fd5b5060105443106104cf565b3480156106ea57600080fd5b5061054260185481565b34801561070057600080fd5b5061052f61070f3660046138b5565b611414565b34801561072057600080fd5b50610542601a5481565b34801561073657600080fd5b5061052f6107453660046138b5565b6114c7565b34801561075657600080fd5b5061052f6107653660046138b5565b611561565b34801561077657600080fd5b5061054260075481565b34801561078c57600080fd5b50610542601c5481565b3480156107a257600080fd5b5061054260135481565b3480156107b857600080fd5b50610542601f5481565b3480156107ce57600080fd5b506014546104cf9062010000900460ff1681565b3480156107ee57600080fd5b506105426107fd3660046138b5565b6001600160a01b031660009081526020819052604090205490565b34801561082457600080fd5b5061052f61162b565b34801561083957600080fd5b5061052f61169f565b34801561084e57600080fd5b5061052f61085d366004613b0b565b6116d5565b34801561086e57600080fd5b5061052f61087d366004613ab2565b61179d565b34801561088e57600080fd5b506104cf61089d366004613b44565b6118d1565b3480156108ae57600080fd5b506104cf6108bd3660046138b5565b60116020526000908152604090205460ff1681565b3480156108de57600080fd5b5061054260065481565b3480156108f457600080fd5b506005546001600160a01b0316610497565b34801561091257600080fd5b50610461611b0b565b34801561092757600080fd5b50610930611b1a565b60405161046e9190613bb6565b34801561094957600080fd5b5061052f610958366004613b0b565b611b7b565b34801561096957600080fd5b50610542601b5481565b34801561097f57600080fd5b5061052f611c6f565b34801561099457600080fd5b506104cf6109a3366004613889565b611ca8565b3480156109b457600080fd5b5061054260105481565b3480156109ca57600080fd5b5061052f6109d93660046138b5565b611d41565b3480156109ea57600080fd5b506104cf6109f9366004613889565b611d84565b348015610a0a57600080fd5b506104cf610a193660046138b5565b60276020526000908152604090205460ff1681565b348015610a3a57600080fd5b506014546104cf90610100900460ff1681565b348015610a5957600080fd5b5061052f610a68366004613b0b565b611d91565b348015610a7957600080fd5b5061052f610a88366004613ab2565b611e1a565b348015610a9957600080fd5b50600d54610497906001600160a01b031681565b348015610ab957600080fd5b506016546104cf9060ff1681565b348015610ad357600080fd5b5061054260235481565b348015610ae957600080fd5b5061052f610af8366004613ab2565b611f21565b348015610b0957600080fd5b5061054260205481565b348015610b1f57600080fd5b5061054260175481565b348015610b3557600080fd5b5061052f610b44366004613ab2565b61206c565b348015610b5557600080fd5b5061052f612174565b348015610b6a57600080fd5b50610542610b79366004613b44565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bb057600080fd5b50610542600b5481565b348015610bc657600080fd5b5061052f610bd5366004613acb565b6121dd565b348015610be657600080fd5b5061052f612290565b348015610bfb57600080fd5b50600c54610497906001600160a01b031681565b348015610c1b57600080fd5b50610497610c2a366004613ab2565b6122c6565b348015610c3b57600080fd5b5061052f6122f0565b348015610c5057600080fd5b50610542600f5481565b348015610c6657600080fd5b5061054260195481565b348015610c7c57600080fd5b5061052f610c8b3660046138b5565b612340565b348015610c9c57600080fd5b5061052f61242b565b348015610cb157600080fd5b50610542601e5481565b348015610cc757600080fd5b5061054260085481565b348015610cdd57600080fd5b5061054260215481565b348015610cf357600080fd5b5061054260245481565b606060038054610d0c90613bc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3890613bc9565b8015610d855780601f10610d5a57610100808354040283529160200191610d85565b820191906000526020600020905b815481529060010190602001808311610d6857829003601f168201915b5050505050905090565b6000610d9c338484612497565b5060015b92915050565b6005546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610dd090613c03565b60405180910390fd5b601454610100900460ff1615610e435760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610dd0565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610dd090613c03565b8051825114610ee05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610dd0565b60c8825110610f505760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610dd0565b60005b8251811015610fb8576000838281518110610f7057610f70613c38565b602002602001015190506000838381518110610f8e57610f8e613c38565b60200260200101519050610fa33383836125bb565b50508080610fb090613c64565b915050610f53565b505050565b6000610fca848484612710565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dd0565b61105c8533858403612497565b506001949350505050565b6005546001600160a01b031633146110915760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006127106110a660025490565b6110b1906001613c7d565b6110bb9190613c94565b6110c59190613c94565b8110156111275760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610dd0565b61113981670de0b6b3a7640000613c7d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461119f5760405162461bcd60e51b8152600401610dd090613c03565b60188490556019839055601a829055601b81905580826111bf8587613cb6565b6111c99190613cb6565b6111d39190613cb6565b6017819055600f10156112285760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610dd0565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d9c918590611265908690613cb6565b612497565b6005546001600160a01b031633146112945760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166112ba5760405162461bcd60e51b8152600401610dd090613cc9565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461132e5760405162461bcd60e51b8152600401610dd090613c03565b600b543060009081526020819052604090205410156113b7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dd0565b600a805460ff60a01b1916600160a01b1790556113d26132d9565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b03811660009081526011602052604090205460ff166114a65760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610dd0565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b031633146114f15760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166115175760405162461bcd60e51b8152600401610dd090613cc9565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166115e15760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610dd0565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f12200021375690600090a250565b6005546001600160a01b031633146116555760405162461bcd60e51b8152600401610dd090613c03565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116c95760405162461bcd60e51b8152600401610dd090613c03565b6014805460ff19169055565b6005546001600160a01b031633146116ff5760405162461bcd60e51b8152600401610dd090613c03565b8061177257600a546001600160a01b03908116908316036117725760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610dd0565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117c75760405162461bcd60e51b8152600401610dd090613c03565b601454610100900460ff161561181f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610dd0565b600a8111156118805760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610dd0565b6014805462ffff0019166201010017905543600f8190556118a2908290613cb6565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118fe5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0383166119545760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610dd0565b6001600160a01b038316301415806119745750601454610100900460ff16155b6119dd5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610dd0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190613d0f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf9190613d28565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610d0c90613bc9565b60606012805480602002602001604051908101604052809291908181526020018280548015610d8557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b54575050505050905090565b6005546001600160a01b03163314611ba55760405162461bcd60e51b8152600401610dd090613c03565b600a546001600160a01b0390811690831603611c295760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dd0565b611c33828261358d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611c995760405162461bcd60e51b8152600401610dd090613c03565b6014805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d2a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dd0565b611d373385858403612497565b5060019392505050565b6005546001600160a01b03163314611d6b5760405162461bcd60e51b8152600401610dd090613c03565b611d76816001611d91565b611d818160016135b7565b50565b6000610d9c338484612710565b6005546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611e445760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006103e8611e5960025490565b611e64906005613c7d565b611e6e9190613c94565b611e789190613c94565b811015611eda5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610dd0565b611eec81670de0b6b3a7640000613c7d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161116a565b6005546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610dd090613c03565b620186a0611f5860025490565b611f63906001613c7d565b611f6d9190613c94565b811015611fda5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dd0565b6103e8611fe660025490565b611ff1906001613c7d565b611ffb9190613c94565b8111156120675760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610dd0565b600b55565b6005546001600160a01b031633146120965760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006127106120ab60025490565b6120b6906001613c7d565b6120c09190613c94565b6120ca9190613c94565b81101561212d5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610dd0565b61213f81670de0b6b3a7640000613c7d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161116a565b6005546001600160a01b0316331461219e5760405162461bcd60e51b8152600401610dd090613c03565b6003601d8190556000601e819055601f8290556001602081905591906121c49082613cb6565b6121ce9190613cb6565b6121d89190613cb6565b601c55565b6005546001600160a01b031633146122075760405162461bcd60e51b8152600401610dd090613c03565b601d849055601e839055601f829055602081905580826122278587613cb6565b6122319190613cb6565b61223b9190613cb6565b601c819055601410156112285760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610dd0565b6005546001600160a01b031633146122ba5760405162461bcd60e51b8152600401610dd090613c03565b6016805460ff19169055565b601281815481106122d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461231a5760405162461bcd60e51b8152600401610dd090613c03565b6005601d8190556003601e819055601f81905560016020819055916121c4908290613cb6565b6005546001600160a01b0316331461236a5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166123cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124555760405162461bcd60e51b8152600401610dd090613c03565b604051600090339047908381818185875af1925050503d8060008114611228576040519150601f19603f3d011682016040523d82523d6000602084013e611228565b6001600160a01b0383166124f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd0565b6001600160a01b03821661255a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125e15760405162461bcd60e51b8152600401610dd090613d45565b6001600160a01b0382166126075760405162461bcd60e51b8152600401610dd090613d8a565b6001600160a01b0383166000908152602081905260409020548181101561267f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dd0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126b6908490613cb6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161270291815260200190565b60405180910390a350505050565b6001600160a01b0383166127365760405162461bcd60e51b8152600401610dd090613d45565b6001600160a01b03821661275c5760405162461bcd60e51b8152600401610dd090613d8a565b600081116127ac5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610dd0565b601454610100900460ff1661283f576001600160a01b03831660009081526025602052604090205460ff16806127fa57506001600160a01b03821660009081526025602052604090205460ff165b61283f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dd0565b60105443101580156128585750601454610100900460ff165b15612928576001600160a01b03831660009081526011602052604090205460ff16158061289257506005546001600160a01b038381169116145b806128a757506001600160a01b03821661dead145b6129285760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610dd0565b60145460ff1615612d26576005546001600160a01b0384811691161480159061295f57506005546001600160a01b03838116911614155b801561297657506001600160a01b03821661dead14155b801561299b57506001600160a01b03831660009081526025602052604090205460ff16155b80156129c057506001600160a01b03821660009081526025602052604090205460ff16155b15612d265760165460ff1615612ad9576009546001600160a01b038381169116148015906129fc5750600a546001600160a01b03838116911614155b15612ad957612a0c600243613dcd565b32600090815260156020526040902054108015612a4a5750612a2f600243613dcd565b6001600160a01b038316600090815260156020526040902054105b612ab45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610dd0565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612b1a57506001600160a01b03821660009081526026602052604090205460ff16155b15612bf157600654811115612b825760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610dd0565b6008546001600160a01b038316600090815260208190526040902054612ba89083613cb6565b1115612bec5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610dd0565b612d26565b6001600160a01b03821660009081526027602052604090205460ff168015612c3257506001600160a01b03831660009081526026602052604090205460ff16155b15612c9c57600754811115612bec5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610dd0565b6001600160a01b03821660009081526026602052604090205460ff16612d26576008546001600160a01b038316600090815260208190526040902054612ce29083613cb6565b1115612d265760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610dd0565b30600090815260208190526040902054600b5481108015908190612d52575060145462010000900460ff165b8015612d685750600a54600160a01b900460ff16155b8015612d8c57506001600160a01b03841660009081526027602052604090205460ff165b15612dba57600a805460ff60a01b1916600160a01b179055612dac6132d9565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680612dfc57506001600160a01b03851660009081526025602052604090205460ff165b15612e05575060005b600081156132c557601054431080612e4b5750670c7d713b49da0000600654612e2e9190613dcd565b8510158015612e4b5750436010546008612e489190613cb6565b10155b8015612e6f57506001600160a01b03871660009081526027602052604090205460ff165b8015612e9457506001600160a01b03861660009081526027602052604090205460ff16155b8015612eb957506001600160a01b03861660009081526025602052604090205460ff16155b8015612ec757506000601754115b156130ae576010544310612eee57600160066000828254612ee89190613dcd565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16612fce576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091612f47908490613cb6565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fdb866063613c7d565b612fe59190613c94565b905060175460195482612ff89190613c7d565b6130029190613c94565b602260008282546130139190613cb6565b90915550506017546018546130289083613c7d565b6130329190613c94565b602160008282546130439190613cb6565b9091555050601754601a546130589083613c7d565b6130629190613c94565b602360008282546130739190613cb6565b9091555050601754601b546130889083613c7d565b6130929190613c94565b602460008282546130a39190613cb6565b909155506132a79050565b6001600160a01b03861660009081526027602052604090205460ff1680156130d857506000601c54115b1561319a576064601c54866130ed9190613c7d565b6130f79190613c94565b9050601c54601e548261310a9190613c7d565b6131149190613c94565b602260008282546131259190613cb6565b9091555050601c54601d5461313a9083613c7d565b6131449190613c94565b602160008282546131559190613cb6565b9091555050601c54601f5461316a9083613c7d565b6131749190613c94565b602360008282546131859190613cb6565b9091555050601c546020546130889083613c7d565b6001600160a01b03871660009081526027602052604090205460ff1680156131c457506000601754115b156132a7576064601754866131d99190613c7d565b6131e39190613c94565b9050601754601954826131f69190613c7d565b6132009190613c94565b602260008282546132119190613cb6565b90915550506017546018546132269083613c7d565b6132309190613c94565b602160008282546132419190613cb6565b9091555050601754601a546132569083613c7d565b6132609190613c94565b602360008282546132719190613cb6565b9091555050601754601b546132869083613c7d565b6132909190613c94565b602460008282546132a19190613cb6565b90915550505b80156132b8576132b88730836125bb565b6132c28186613dcd565b94505b6132d08787876125bb565b50505050505050565b30600090815260208190526040812054905060006024546023546021546022546133039190613cb6565b61330d9190613cb6565b6133179190613cb6565b9050811580613324575080155b1561332d575050565b600b5461333b90600a613c7d565b82111561335357600b5461335090600a613c7d565b91505b600080600283602254866133679190613c7d565b6133719190613c94565b61337b9190613c94565b905061338f61338a8286613dcd565b61361a565b602254479081906000906133a590600290613c94565b6133af9087613dcd565b6021546133bc9085613c7d565b6133c69190613c94565b9050600060026022546133d99190613c94565b6133e39088613dcd565b6023546133f09086613c7d565b6133fa9190613c94565b90506000600260225461340d9190613c94565b6134179089613dcd565b6024546134249087613c7d565b61342e9190613c94565b90508061343b8385613cb6565b6134459190613cb6565b61344f9085613dcd565b6000602281905560218190556023819055602455935085158015906134745750600084115b15613483576134838685613774565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146134d0576040519150601f19603f3d011682016040523d82523d6000602084013e6134d5565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613525576040519150601f19603f3d011682016040523d82523d6000602084013e61352a565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d806000811461357a576040519150601f19603f3d011682016040523d82523d6000602084013e61357f565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611c3382825b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364f5761364f613c38565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc9190613de0565b816001815181106136df576136df613c38565b6001600160a01b0392831660209182029290920101526009546137059130911684612497565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061373e908590600090869030904290600401613dfd565b600060405180830381600087803b15801561375857600080fd5b505af115801561376c573d6000803e3d6000fd5b505050505050565b60095461378c9030906001600160a01b031684612497565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156137fa573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061381f9190613e39565b5050505050565b600060208083528351808285015260005b8181101561385357858101830151858201604001528201613837565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d8157600080fd5b6000806040838503121561389c57600080fd5b82356138a781613874565b946020939093013593505050565b6000602082840312156138c757600080fd5b81356138d281613874565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613918576139186138d9565b604052919050565b600067ffffffffffffffff82111561393a5761393a6138d9565b5060051b60200190565b600082601f83011261395557600080fd5b8135602061396a61396583613920565b6138ef565b82815260059290921b8401810191818101908684111561398957600080fd5b8286015b848110156139a4578035835291830191830161398d565b509695505050505050565b600080604083850312156139c257600080fd5b823567ffffffffffffffff808211156139da57600080fd5b818501915085601f8301126139ee57600080fd5b813560206139fe61396583613920565b82815260059290921b84018101918181019089841115613a1d57600080fd5b948201945b83861015613a44578535613a3581613874565b82529482019490820190613a22565b96505086013592505080821115613a5a57600080fd5b50613a6785828601613944565b9150509250929050565b600080600060608486031215613a8657600080fd5b8335613a9181613874565b92506020840135613aa181613874565b929592945050506040919091013590565b600060208284031215613ac457600080fd5b5035919050565b60008060008060808587031215613ae157600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114611d8157600080fd5b60008060408385031215613b1e57600080fd5b8235613b2981613874565b91506020830135613b3981613afd565b809150509250929050565b60008060408385031215613b5757600080fd5b8235613b6281613874565b91506020830135613b3981613874565b600081518084526020808501945080840160005b83811015613bab5781516001600160a01b031687529582019590820190600101613b86565b509495945050505050565b6020815260006138d26020830184613b72565b600181811c90821680613bdd57607f821691505b602082108103613bfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613c7657613c76613c4e565b5060010190565b8082028115828204841417610da057610da0613c4e565b600082613cb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610da057610da0613c4e565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b600060208284031215613d2157600080fd5b5051919050565b600060208284031215613d3a57600080fd5b81516138d281613afd565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610da057610da0613c4e565b600060208284031215613df257600080fd5b81516138d281613874565b85815284602082015260a060408201526000613e1c60a0830186613b72565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613e4e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f7e53f4a51e38ea2b56695d894cac0a209e64d653ad06935ae80c8ad13cee5ab64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x6080604052600436106104405760003560e01c806388e765ff11610234578063d729715f1161012e578063eb472fc4116100b6578063f5648a4f1161007a578063f5648a4f14610c90578063f637434214610ca5578063f8b45b0514610cbb578063fb002c9714610cd1578063fde83a3414610ce757600080fd5b8063eb472fc414610c0f578063ed0720f814610c2f578063ee40166e14610c44578063f11a24d314610c5a578063f2fde38b14610c7057600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610b5e578063e2f4560514610ba4578063e7ad9fcd14610bba578063e884f26014610bda578063ea4cfe1214610bef57600080fd5b8063d729715f14610afd578063d85ba06314610b13578063dc3f0d0f14610b29578063dd3c8e9a14610b4957600080fd5b8063a716b773116101bc578063c18bc19511610180578063c18bc19514610a6d578063c5f956af14610a8d578063c876d0b914610aad578063cc2ffe7c14610ac7578063d257b34f14610add57600080fd5b8063a716b773146109be578063a9059cbb146109de578063b62496f5146109fe578063bbc0c74214610a2e578063c024666814610a4d57600080fd5b80639a7a23d6116102035780639a7a23d61461093d5780639c2e4ac61461095d578063a28e86d314610973578063a457c2d714610988578063a62068ce146109a857600080fd5b806388e765ff146108d25780638da5cb5b146108e857806395d89b41146109065780639a5bd2dd1461091b57600080fd5b806351f205e4116103455780636b0a894c116102cd578063751039fc11610291578063751039fc1461082d5780637571336a1461084257806382aa7c68146108625780638366e79a1461088257806385ecfd28146108a257600080fd5b80636b0a894c146107965780636b2fb124146107ac5780636ddd1713146107c257806370a08231146107e2578063715018a61461081857600080fd5b80635c068a8c116103145780635c068a8c146107145780636605bfda1461072a5780636690864e1461074a57806366d602ae1461076a5780636a486a8e1461078057600080fd5b806351f205e4146106b257806358a6d531146106c75780635a139dd4146106de5780635bb988c9146106f457600080fd5b806323b872dd116103c857806339509351116103975780633950935114610622578063452ed4f114610642578063499b8394146106625780634a62bb65146106825780634f77f6c01461069c57600080fd5b806323b872dd146105a65780632be32b61146105c65780632e6ed7ef146105e6578063313ce5671461060657600080fd5b80631805805b1161040f5780631805805b1461050f57806318160ddd146105315780631a8145bb146105505780631c75f085146105665780632307b4411461058657600080fd5b806306fdde031461044c5780630758d92414610477578063095ea7b3146104af57806310d5de53146104df57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610cfd565b60405161046e9190613826565b60405180910390f35b34801561048357600080fd5b50600954610497906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b3480156104bb57600080fd5b506104cf6104ca366004613889565b610d8f565b604051901515815260200161046e565b3480156104eb57600080fd5b506104cf6104fa3660046138b5565b60266020526000908152604090205460ff1681565b34801561051b57600080fd5b5061052f61052a3660046138b5565b610da6565b005b34801561053d57600080fd5b506002545b60405190815260200161046e565b34801561055c57600080fd5b5061054260225481565b34801561057257600080fd5b50600e54610497906001600160a01b031681565b34801561059257600080fd5b5061052f6105a13660046139af565b610e65565b3480156105b257600080fd5b506104cf6105c1366004613a71565b610fbd565b3480156105d257600080fd5b5061052f6105e1366004613ab2565b611067565b3480156105f257600080fd5b5061052f610601366004613acb565b611175565b34801561061257600080fd5b506040516012815260200161046e565b34801561062e57600080fd5b506104cf61063d366004613889565b61122e565b34801561064e57600080fd5b50600a54610497906001600160a01b031681565b34801561066e57600080fd5b5061052f61067d3660046138b5565b61126a565b34801561068e57600080fd5b506014546104cf9060ff1681565b3480156106a857600080fd5b50610542601d5481565b3480156106be57600080fd5b5061052f611304565b3480156106d357600080fd5b5060105443106104cf565b3480156106ea57600080fd5b5061054260185481565b34801561070057600080fd5b5061052f61070f3660046138b5565b611414565b34801561072057600080fd5b50610542601a5481565b34801561073657600080fd5b5061052f6107453660046138b5565b6114c7565b34801561075657600080fd5b5061052f6107653660046138b5565b611561565b34801561077657600080fd5b5061054260075481565b34801561078c57600080fd5b50610542601c5481565b3480156107a257600080fd5b5061054260135481565b3480156107b857600080fd5b50610542601f5481565b3480156107ce57600080fd5b506014546104cf9062010000900460ff1681565b3480156107ee57600080fd5b506105426107fd3660046138b5565b6001600160a01b031660009081526020819052604090205490565b34801561082457600080fd5b5061052f61162b565b34801561083957600080fd5b5061052f61169f565b34801561084e57600080fd5b5061052f61085d366004613b0b565b6116d5565b34801561086e57600080fd5b5061052f61087d366004613ab2565b61179d565b34801561088e57600080fd5b506104cf61089d366004613b44565b6118d1565b3480156108ae57600080fd5b506104cf6108bd3660046138b5565b60116020526000908152604090205460ff1681565b3480156108de57600080fd5b5061054260065481565b3480156108f457600080fd5b506005546001600160a01b0316610497565b34801561091257600080fd5b50610461611b0b565b34801561092757600080fd5b50610930611b1a565b60405161046e9190613bb6565b34801561094957600080fd5b5061052f610958366004613b0b565b611b7b565b34801561096957600080fd5b50610542601b5481565b34801561097f57600080fd5b5061052f611c6f565b34801561099457600080fd5b506104cf6109a3366004613889565b611ca8565b3480156109b457600080fd5b5061054260105481565b3480156109ca57600080fd5b5061052f6109d93660046138b5565b611d41565b3480156109ea57600080fd5b506104cf6109f9366004613889565b611d84565b348015610a0a57600080fd5b506104cf610a193660046138b5565b60276020526000908152604090205460ff1681565b348015610a3a57600080fd5b506014546104cf90610100900460ff1681565b348015610a5957600080fd5b5061052f610a68366004613b0b565b611d91565b348015610a7957600080fd5b5061052f610a88366004613ab2565b611e1a565b348015610a9957600080fd5b50600d54610497906001600160a01b031681565b348015610ab957600080fd5b506016546104cf9060ff1681565b348015610ad357600080fd5b5061054260235481565b348015610ae957600080fd5b5061052f610af8366004613ab2565b611f21565b348015610b0957600080fd5b5061054260205481565b348015610b1f57600080fd5b5061054260175481565b348015610b3557600080fd5b5061052f610b44366004613ab2565b61206c565b348015610b5557600080fd5b5061052f612174565b348015610b6a57600080fd5b50610542610b79366004613b44565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bb057600080fd5b50610542600b5481565b348015610bc657600080fd5b5061052f610bd5366004613acb565b6121dd565b348015610be657600080fd5b5061052f612290565b348015610bfb57600080fd5b50600c54610497906001600160a01b031681565b348015610c1b57600080fd5b50610497610c2a366004613ab2565b6122c6565b348015610c3b57600080fd5b5061052f6122f0565b348015610c5057600080fd5b50610542600f5481565b348015610c6657600080fd5b5061054260195481565b348015610c7c57600080fd5b5061052f610c8b3660046138b5565b612340565b348015610c9c57600080fd5b5061052f61242b565b348015610cb157600080fd5b50610542601e5481565b348015610cc757600080fd5b5061054260085481565b348015610cdd57600080fd5b5061054260215481565b348015610cf357600080fd5b5061054260245481565b606060038054610d0c90613bc9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3890613bc9565b8015610d855780601f10610d5a57610100808354040283529160200191610d85565b820191906000526020600020905b815481529060010190602001808311610d6857829003601f168201915b5050505050905090565b6000610d9c338484612497565b5060015b92915050565b6005546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610dd090613c03565b60405180910390fd5b601454610100900460ff1615610e435760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610dd0565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610dd090613c03565b8051825114610ee05760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610dd0565b60c8825110610f505760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610dd0565b60005b8251811015610fb8576000838281518110610f7057610f70613c38565b602002602001015190506000838381518110610f8e57610f8e613c38565b60200260200101519050610fa33383836125bb565b50508080610fb090613c64565b915050610f53565b505050565b6000610fca848484612710565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561104f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dd0565b61105c8533858403612497565b506001949350505050565b6005546001600160a01b031633146110915760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006127106110a660025490565b6110b1906001613c7d565b6110bb9190613c94565b6110c59190613c94565b8110156111275760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610dd0565b61113981670de0b6b3a7640000613c7d565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461119f5760405162461bcd60e51b8152600401610dd090613c03565b60188490556019839055601a829055601b81905580826111bf8587613cb6565b6111c99190613cb6565b6111d39190613cb6565b6017819055600f10156112285760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610dd0565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d9c918590611265908690613cb6565b612497565b6005546001600160a01b031633146112945760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166112ba5760405162461bcd60e51b8152600401610dd090613cc9565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b0316331461132e5760405162461bcd60e51b8152600401610dd090613c03565b600b543060009081526020819052604090205410156113b7576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dd0565b600a805460ff60a01b1916600160a01b1790556113d26132d9565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b03811660009081526011602052604090205460ff166114a65760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610dd0565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b031633146114f15760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166115175760405162461bcd60e51b8152600401610dd090613cc9565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b0316331461158b5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166115e15760405162461bcd60e51b815260206004820181905260248201527f5f7465616d4164647265737320616464726573732063616e6e6f7420626520306044820152606401610dd0565b600e80546001600160a01b0319166001600160a01b0383169081179091556040517f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f12200021375690600090a250565b6005546001600160a01b031633146116555760405162461bcd60e51b8152600401610dd090613c03565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116c95760405162461bcd60e51b8152600401610dd090613c03565b6014805460ff19169055565b6005546001600160a01b031633146116ff5760405162461bcd60e51b8152600401610dd090613c03565b8061177257600a546001600160a01b03908116908316036117725760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610dd0565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146117c75760405162461bcd60e51b8152600401610dd090613c03565b601454610100900460ff161561181f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610dd0565b600a8111156118805760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610dd0565b6014805462ffff0019166201010017905543600f8190556118a2908290613cb6565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118fe5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0383166119545760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610dd0565b6001600160a01b038316301415806119745750601454610100900460ff16155b6119dd5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610dd0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a489190613d0f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abf9190613d28565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610d0c90613bc9565b60606012805480602002602001604051908101604052809291908181526020018280548015610d8557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b54575050505050905090565b6005546001600160a01b03163314611ba55760405162461bcd60e51b8152600401610dd090613c03565b600a546001600160a01b0390811690831603611c295760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dd0565b611c33828261358d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611c995760405162461bcd60e51b8152600401610dd090613c03565b6014805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611d2a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dd0565b611d373385858403612497565b5060019392505050565b6005546001600160a01b03163314611d6b5760405162461bcd60e51b8152600401610dd090613c03565b611d76816001611d91565b611d818160016135b7565b50565b6000610d9c338484612710565b6005546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611e445760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006103e8611e5960025490565b611e64906005613c7d565b611e6e9190613c94565b611e789190613c94565b811015611eda5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e352560b01b6064820152608401610dd0565b611eec81670de0b6b3a7640000613c7d565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161116a565b6005546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610dd090613c03565b620186a0611f5860025490565b611f63906001613c7d565b611f6d9190613c94565b811015611fda5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dd0565b6103e8611fe660025490565b611ff1906001613c7d565b611ffb9190613c94565b8111156120675760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610dd0565b600b55565b6005546001600160a01b031633146120965760405162461bcd60e51b8152600401610dd090613c03565b670de0b6b3a76400006127106120ab60025490565b6120b6906001613c7d565b6120c09190613c94565b6120ca9190613c94565b81101561212d5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e30312560a81b6064820152608401610dd0565b61213f81670de0b6b3a7640000613c7d565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161116a565b6005546001600160a01b0316331461219e5760405162461bcd60e51b8152600401610dd090613c03565b6003601d8190556000601e819055601f8290556001602081905591906121c49082613cb6565b6121ce9190613cb6565b6121d89190613cb6565b601c55565b6005546001600160a01b031633146122075760405162461bcd60e51b8152600401610dd090613c03565b601d849055601e839055601f829055602081905580826122278587613cb6565b6122319190613cb6565b61223b9190613cb6565b601c819055601410156112285760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610dd0565b6005546001600160a01b031633146122ba5760405162461bcd60e51b8152600401610dd090613c03565b6016805460ff19169055565b601281815481106122d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b0316331461231a5760405162461bcd60e51b8152600401610dd090613c03565b6005601d8190556003601e819055601f81905560016020819055916121c4908290613cb6565b6005546001600160a01b0316331461236a5760405162461bcd60e51b8152600401610dd090613c03565b6001600160a01b0381166123cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124555760405162461bcd60e51b8152600401610dd090613c03565b604051600090339047908381818185875af1925050503d8060008114611228576040519150601f19603f3d011682016040523d82523d6000602084013e611228565b6001600160a01b0383166124f95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd0565b6001600160a01b03821661255a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125e15760405162461bcd60e51b8152600401610dd090613d45565b6001600160a01b0382166126075760405162461bcd60e51b8152600401610dd090613d8a565b6001600160a01b0383166000908152602081905260409020548181101561267f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dd0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126b6908490613cb6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161270291815260200190565b60405180910390a350505050565b6001600160a01b0383166127365760405162461bcd60e51b8152600401610dd090613d45565b6001600160a01b03821661275c5760405162461bcd60e51b8152600401610dd090613d8a565b600081116127ac5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610dd0565b601454610100900460ff1661283f576001600160a01b03831660009081526025602052604090205460ff16806127fa57506001600160a01b03821660009081526025602052604090205460ff165b61283f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dd0565b60105443101580156128585750601454610100900460ff165b15612928576001600160a01b03831660009081526011602052604090205460ff16158061289257506005546001600160a01b038381169116145b806128a757506001600160a01b03821661dead145b6129285760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610dd0565b60145460ff1615612d26576005546001600160a01b0384811691161480159061295f57506005546001600160a01b03838116911614155b801561297657506001600160a01b03821661dead14155b801561299b57506001600160a01b03831660009081526025602052604090205460ff16155b80156129c057506001600160a01b03821660009081526025602052604090205460ff16155b15612d265760165460ff1615612ad9576009546001600160a01b038381169116148015906129fc5750600a546001600160a01b03838116911614155b15612ad957612a0c600243613dcd565b32600090815260156020526040902054108015612a4a5750612a2f600243613dcd565b6001600160a01b038316600090815260156020526040902054105b612ab45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610dd0565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff168015612b1a57506001600160a01b03821660009081526026602052604090205460ff16155b15612bf157600654811115612b825760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610dd0565b6008546001600160a01b038316600090815260208190526040902054612ba89083613cb6565b1115612bec5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610dd0565b612d26565b6001600160a01b03821660009081526027602052604090205460ff168015612c3257506001600160a01b03831660009081526026602052604090205460ff16155b15612c9c57600754811115612bec5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610dd0565b6001600160a01b03821660009081526026602052604090205460ff16612d26576008546001600160a01b038316600090815260208190526040902054612ce29083613cb6565b1115612d265760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610dd0565b30600090815260208190526040902054600b5481108015908190612d52575060145462010000900460ff165b8015612d685750600a54600160a01b900460ff16155b8015612d8c57506001600160a01b03841660009081526027602052604090205460ff165b15612dba57600a805460ff60a01b1916600160a01b179055612dac6132d9565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680612dfc57506001600160a01b03851660009081526025602052604090205460ff165b15612e05575060005b600081156132c557601054431080612e4b5750670c7d713b49da0000600654612e2e9190613dcd565b8510158015612e4b5750436010546008612e489190613cb6565b10155b8015612e6f57506001600160a01b03871660009081526027602052604090205460ff165b8015612e9457506001600160a01b03861660009081526027602052604090205460ff16155b8015612eb957506001600160a01b03861660009081526025602052604090205460ff16155b8015612ec757506000601754115b156130ae576010544310612eee57600160066000828254612ee89190613dcd565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16612fce576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091612f47908490613cb6565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064612fdb866063613c7d565b612fe59190613c94565b905060175460195482612ff89190613c7d565b6130029190613c94565b602260008282546130139190613cb6565b90915550506017546018546130289083613c7d565b6130329190613c94565b602160008282546130439190613cb6565b9091555050601754601a546130589083613c7d565b6130629190613c94565b602360008282546130739190613cb6565b9091555050601754601b546130889083613c7d565b6130929190613c94565b602460008282546130a39190613cb6565b909155506132a79050565b6001600160a01b03861660009081526027602052604090205460ff1680156130d857506000601c54115b1561319a576064601c54866130ed9190613c7d565b6130f79190613c94565b9050601c54601e548261310a9190613c7d565b6131149190613c94565b602260008282546131259190613cb6565b9091555050601c54601d5461313a9083613c7d565b6131449190613c94565b602160008282546131559190613cb6565b9091555050601c54601f5461316a9083613c7d565b6131749190613c94565b602360008282546131859190613cb6565b9091555050601c546020546130889083613c7d565b6001600160a01b03871660009081526027602052604090205460ff1680156131c457506000601754115b156132a7576064601754866131d99190613c7d565b6131e39190613c94565b9050601754601954826131f69190613c7d565b6132009190613c94565b602260008282546132119190613cb6565b90915550506017546018546132269083613c7d565b6132309190613c94565b602160008282546132419190613cb6565b9091555050601754601a546132569083613c7d565b6132609190613c94565b602360008282546132719190613cb6565b9091555050601754601b546132869083613c7d565b6132909190613c94565b602460008282546132a19190613cb6565b90915550505b80156132b8576132b88730836125bb565b6132c28186613dcd565b94505b6132d08787876125bb565b50505050505050565b30600090815260208190526040812054905060006024546023546021546022546133039190613cb6565b61330d9190613cb6565b6133179190613cb6565b9050811580613324575080155b1561332d575050565b600b5461333b90600a613c7d565b82111561335357600b5461335090600a613c7d565b91505b600080600283602254866133679190613c7d565b6133719190613c94565b61337b9190613c94565b905061338f61338a8286613dcd565b61361a565b602254479081906000906133a590600290613c94565b6133af9087613dcd565b6021546133bc9085613c7d565b6133c69190613c94565b9050600060026022546133d99190613c94565b6133e39088613dcd565b6023546133f09086613c7d565b6133fa9190613c94565b90506000600260225461340d9190613c94565b6134179089613dcd565b6024546134249087613c7d565b61342e9190613c94565b90508061343b8385613cb6565b6134459190613cb6565b61344f9085613dcd565b6000602281905560218190556023819055602455935085158015906134745750600084115b15613483576134838685613774565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146134d0576040519150601f19603f3d011682016040523d82523d6000602084013e6134d5565b606091505b5050600e546040519198506001600160a01b0316908290600081818185875af1925050503d8060008114613525576040519150601f19603f3d011682016040523d82523d6000602084013e61352a565b606091505b5050600c546040519198506001600160a01b0316904790600081818185875af1925050503d806000811461357a576040519150601f19603f3d011682016040523d82523d6000602084013e61357f565b606091505b505050505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055611c3382825b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364f5761364f613c38565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc9190613de0565b816001815181106136df576136df613c38565b6001600160a01b0392831660209182029290920101526009546137059130911684612497565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061373e908590600090869030904290600401613dfd565b600060405180830381600087803b15801561375857600080fd5b505af115801561376c573d6000803e3d6000fd5b505050505050565b60095461378c9030906001600160a01b031684612497565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156137fa573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061381f9190613e39565b5050505050565b600060208083528351808285015260005b8181101561385357858101830151858201604001528201613837565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d8157600080fd5b6000806040838503121561389c57600080fd5b82356138a781613874565b946020939093013593505050565b6000602082840312156138c757600080fd5b81356138d281613874565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613918576139186138d9565b604052919050565b600067ffffffffffffffff82111561393a5761393a6138d9565b5060051b60200190565b600082601f83011261395557600080fd5b8135602061396a61396583613920565b6138ef565b82815260059290921b8401810191818101908684111561398957600080fd5b8286015b848110156139a4578035835291830191830161398d565b509695505050505050565b600080604083850312156139c257600080fd5b823567ffffffffffffffff808211156139da57600080fd5b818501915085601f8301126139ee57600080fd5b813560206139fe61396583613920565b82815260059290921b84018101918181019089841115613a1d57600080fd5b948201945b83861015613a44578535613a3581613874565b82529482019490820190613a22565b96505086013592505080821115613a5a57600080fd5b50613a6785828601613944565b9150509250929050565b600080600060608486031215613a8657600080fd5b8335613a9181613874565b92506020840135613aa181613874565b929592945050506040919091013590565b600060208284031215613ac457600080fd5b5035919050565b60008060008060808587031215613ae157600080fd5b5050823594602084013594506040840135936060013592509050565b8015158114611d8157600080fd5b60008060408385031215613b1e57600080fd5b8235613b2981613874565b91506020830135613b3981613afd565b809150509250929050565b60008060408385031215613b5757600080fd5b8235613b6281613874565b91506020830135613b3981613874565b600081518084526020808501945080840160005b83811015613bab5781516001600160a01b031687529582019590820190600101613b86565b509495945050505050565b6020815260006138d26020830184613b72565b600181811c90821680613bdd57607f821691505b602082108103613bfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613c7657613c76613c4e565b5060010190565b8082028115828204841417610da057610da0613c4e565b600082613cb157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610da057610da0613c4e565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b600060208284031215613d2157600080fd5b5051919050565b600060208284031215613d3a57600080fd5b81516138d281613afd565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610da057610da0613c4e565b600060208284031215613df257600080fd5b81516138d281613874565b85815284602082015260a060408201526000613e1c60a0830186613b72565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613e4e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f7e53f4a51e38ea2b56695d894cac0a209e64d653ad06935ae80c8ad13cee5ab64736f6c63430008110033
Deployed Bytecode Sourcemap
10334:24586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4066:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10479:27;;;;;;;;;;-1:-1:-1;10479:27:0;;;;-1:-1:-1;;;;;10479:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;10479:27:0;567:221:1;5121:210:0;;;;;;;;;;-1:-1:-1;5121:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5121:210:0;1249:187:1;11966:63:0;;;;;;;;;;-1:-1:-1;11966:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17392:194;;;;;;;;;;-1:-1:-1;17392:194:0;;;;;:::i;:::-;;:::i;:::-;;4387:108;;;;;;;;;;-1:-1:-1;4475:12:0;;4387:108;;;1839:25:1;;;1827:2;1812:18;4387:108:0;1693:177:1;11710:33:0;;;;;;;;;;;;;;;;10689:26;;;;;;;;;;-1:-1:-1;10689:26:0;;;;-1:-1:-1;;;;;10689:26:0;;;34198:719;;;;;;;;;;-1:-1:-1;34198:719:0;;;;;:::i;:::-;;:::i;5339:529::-;;;;;;;;;;-1:-1:-1;5339:529:0;;;;;:::i;:::-;;:::i;17753:312::-;;;;;;;;;;-1:-1:-1;17753:312:0;;;;;:::i;:::-;;:::i;20391:551::-;;;;;;;;;;-1:-1:-1;20391:551:0;;;;;:::i;:::-;;:::i;4286:93::-;;;;;;;;;;-1:-1:-1;4286:93:0;;4369:2;5748:36:1;;5736:2;5721:18;4286:93:0;5606:184:1;5876:297:0;;;;;;;;;;-1:-1:-1;5876:297:0;;;;;:::i;:::-;;:::i;10513:21::-;;;;;;;;;;-1:-1:-1;10513:21:0;;;;-1:-1:-1;;;;;10513:21:0;;;31886:357;;;;;;;;;;-1:-1:-1;31886:357:0;;;;;:::i;:::-;;:::i;10960:33::-;;;;;;;;;;-1:-1:-1;10960:33:0;;;;;;;;11520:32;;;;;;;;;;;;;;;;32880:349;;;;;;;;;;;;;:::i;27983:121::-;;;;;;;;;;-1:-1:-1;28078:18:0;;28063:12;:33;27983:121;;11340:31;;;;;;;;;;;;;;;;17203:181;;;;;;;;;;-1:-1:-1;17203:181:0;;;;;:::i;:::-;;:::i;11415:29::-;;;;;;;;;;;;;;;;32251:320;;;;;;;;;;-1:-1:-1;32251:320:0;;;;;:::i;:::-;;:::i;32579:249::-;;;;;;;;;;-1:-1:-1;32579:249:0;;;;;:::i;:::-;;:::i;10411:28::-;;;;;;;;;;;;;;;;11485;;;;;;;;;;;;;;;;10926:25;;;;;;;;;;;;;;;;11597:30;;;;;;;;;;;;;;;;11040:31;;;;;;;;;;-1:-1:-1;11040:31:0;;;;;;;;;;;4503:177;;;;;;;;;;-1:-1:-1;4503:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4654:18:0;4622:7;4654:18;;;;;;;;;;;;4503:177;8597:150;;;;;;;;;;;;;:::i;33281:84::-;;;;;;;;;;;;;:::i;19444:334::-;;;;;;;;;;-1:-1:-1;19444:334:0;;;;;:::i;:::-;;:::i;16619:464::-;;;;;;;;;;-1:-1:-1;16619:464:0;;;;;:::i;:::-;;:::i;31056:567::-;;;;;;;;;;-1:-1:-1;31056:567:0;;;;;:::i;:::-;;:::i;10841:43::-;;;;;;;;;;-1:-1:-1;10841:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:27;;;;;;;;;;;;;;;;8383:79;;;;;;;;;;-1:-1:-1;8448:6:0;;-1:-1:-1;;;;;8448:6:0;8383:79;;4174:104;;;;;;;;;;;;;:::i;17091:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19786:353::-;;;;;;;;;;-1:-1:-1;19786:353:0;;;;;:::i;:::-;;:::i;11451:25::-;;;;;;;;;;;;;;;;33373:84;;;;;;;;;;;;;:::i;6181:482::-;;;;;;;;;;-1:-1:-1;6181:482:0;;;;;:::i;:::-;;:::i;10801:33::-;;;;;;;;;;;;;;;;16387:224;;;;;;;;;;-1:-1:-1;16387:224:0;;;;;:::i;:::-;;:::i;4688:216::-;;;;;;;;;;-1:-1:-1;4688:216:0;;;;;:::i;:::-;;:::i;12187:57::-;;;;;;;;;;-1:-1:-1;12187:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11000:33;;;;;;;;;;-1:-1:-1;11000:33:0;;;;;;;;;;;21520:182;;;;;;;;;;-1:-1:-1;21520:182:0;;;;;:::i;:::-;;:::i;18398:311::-;;;;;;;;;;-1:-1:-1;18398:311:0;;;;;:::i;:::-;;:::i;10652:30::-;;;;;;;;;;-1:-1:-1;10652:30:0;;;;-1:-1:-1;;;;;10652:30:0;;;11258:39;;;;;;;;;;-1:-1:-1;11258:39:0;;;;;;;;11750:32;;;;;;;;;;;;;;;;18779:428;;;;;;;;;;-1:-1:-1;18779:428:0;;;;;:::i;:::-;;:::i;11634:26::-;;;;;;;;;;;;;;;;11306:27;;;;;;;;;;;;;;;;18073:317;;;;;;;;;;-1:-1:-1;18073:317:0;;;;;:::i;:::-;;:::i;33870:320::-;;;;;;;;;;;;;:::i;4912:201::-;;;;;;;;;;-1:-1:-1;4912:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5078:18:0;;;5046:7;5078:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4912:201;10571:33;;;;;;;;;;;;;;;;20950:562;;;;;;;;;;-1:-1:-1;20950:562:0;;;;;:::i;:::-;;:::i;17647:98::-;;;;;;;;;;;;;:::i;10613:32::-;;;;;;;;;;-1:-1:-1;10613:32:0;;;;-1:-1:-1;;;;;10613:32:0;;;10891:28;;;;;;;;;;-1:-1:-1;10891:28:0;;;;;:::i;:::-;;:::i;33485:327::-;;;;;;;;;;;;;:::i;10724:37::-;;;;;;;;;;;;;;;;11378:30;;;;;;;;;;;;;;;;8755:281;;;;;;;;;;-1:-1:-1;8755:281:0;;;;;:::i;:::-;;:::i;31693:185::-;;;;;;;;;;;;;:::i;11559:31::-;;;;;;;;;;;;;;;;10446:24;;;;;;;;;;;;;;;;11669:34;;;;;;;;;;;;;;;;11789:28;;;;;;;;;;;;;;;;4066:100;4120:13;4153:5;4146:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4066:100;:::o;5121:210::-;5240:4;5262:39;216:10;5285:7;5294:6;5262:8;:39::i;:::-;-1:-1:-1;5319:4:0;5121:210;;;;;:::o;17392:194::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;;;;;;;;;17478:13:::1;::::0;::::1;::::0;::::1;;;17477:14;17469:68;;;::::0;-1:-1:-1;;;17469:68:0;;8378:2:1;17469:68:0::1;::::0;::::1;8360:21:1::0;8417:2;8397:18;;;8390:30;8456:34;8436:18;;;8429:62;-1:-1:-1;;;8507:18:1;;;8500:39;8556:19;;17469:68:0::1;8176:405:1::0;17469:68:0::1;17548:9;:30:::0;;-1:-1:-1;;;;;;17548:30:0::1;-1:-1:-1::0;;;;;17548:30:0;;;::::1;::::0;;;::::1;::::0;;17392:194::o;34198:719::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;34379:15:::1;:22;34361:7;:14;:40;34339:120;;;::::0;-1:-1:-1;;;34339:120:0;;8788:2:1;34339:120:0::1;::::0;::::1;8770:21:1::0;8827:2;8807:18;;;8800:30;8866:32;8846:18;;;8839:60;8916:18;;34339:120:0::1;8586:354:1::0;34339:120:0::1;34509:3;34492:7;:14;:20;34470:124;;;::::0;-1:-1:-1;;;34470:124:0;;9147:2:1;34470:124:0::1;::::0;::::1;9129:21:1::0;9186:2;9166:18;;;9159:30;9225:34;9205:18;;;9198:62;-1:-1:-1;;;9276:18:1;;;9269:52;9338:19;;34470:124:0::1;8945:418:1::0;34470:124:0::1;34708:9;34703:207;34727:7;:14;34723:1;:18;34703:207;;;34763:14;34780:7;34788:1;34780:10;;;;;;;;:::i;:::-;;;;;;;34763:27;;34805:14;34822:15;34838:1;34822:18;;;;;;;;:::i;:::-;;;;;;;34805:35;;34855:43;34871:10;34883:6;34891;34855:15;:43::i;:::-;34748:162;;34743:3;;;;;:::i;:::-;;;;34703:207;;;;34198:719:::0;;:::o;5339:529::-;5479:4;5496:36;5506:6;5514:9;5525:6;5496:9;:36::i;:::-;-1:-1:-1;;;;;5572:19:0;;5545:24;5572:19;;;:11;:19;;;;;;;;216:10;5572:33;;;;;;;;5638:26;;;;5616:116;;;;-1:-1:-1;;;5616:116:0;;9974:2:1;5616:116:0;;;9956:21:1;10013:2;9993:18;;;9986:30;10052:34;10032:18;;;10025:62;-1:-1:-1;;;10103:18:1;;;10096:38;10151:19;;5616:116:0;9772:404:1;5616:116:0;5768:57;5777:6;216:10;5818:6;5799:16;:25;5768:8;:57::i;:::-;-1:-1:-1;5856:4:0;;5339:529;-1:-1:-1;;;;5339:529:0:o;17753:312::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;17891:4:::1;17882:5;17861:13;4475:12:::0;;;4387:108;17861:13:::1;:17;::::0;17877:1:::1;17861:17;:::i;:::-;17860:27;;;;:::i;:::-;17859:36;;;;:::i;:::-;17849:6;:46;;17827:138;;;::::0;-1:-1:-1;;;17827:138:0;;10778:2:1;17827:138:0::1;::::0;::::1;10760:21:1::0;10817:2;10797:18;;;10790:30;10856:34;10836:18;;;10829:62;-1:-1:-1;;;10907:18:1;;;10900:40;10957:19;;17827:138:0::1;10576:406:1::0;17827:138:0::1;17991:17;:6:::0;18001::::1;17991:17;:::i;:::-;17976:12;:32:::0;;;18024:33:::1;::::0;1839:25:1;;;18024:33:0::1;::::0;1827:2:1;1812:18;18024:33:0::1;;;;;;;;17753:312:::0;:::o;20391:551::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;20574:16:::1;:33:::0;;;20618:15:::1;:31:::0;;;20660:14:::1;:29:::0;;;20700:10:::1;:21:::0;;;20713:8;20677:12;20760:47:::1;20636:13:::0;20593:14;20760:47:::1;:::i;:::-;:77;;;;:::i;:::-;:103;;;;:::i;:::-;20732:12;:131:::0;;;20898:2:::1;-1:-1:-1::0;20882:18:0::1;20874:60;;;::::0;-1:-1:-1;;;20874:60:0;;11319:2:1;20874:60:0::1;::::0;::::1;11301:21:1::0;11358:2;11338:18;;;11331:30;11397:31;11377:18;;;11370:59;11446:18;;20874:60:0::1;11117:353:1::0;20874:60:0::1;20391:551:::0;;;;:::o;5876:297::-;216:10;5991:4;6085:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6085:34:0;;;;;;;;;;5991:4;;6013:130;;6063:7;;6085:47;;6122:10;;6085:47;:::i;:::-;6013:8;:130::i;31886:357::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32019:32:0;::::1;31997:120;;;;-1:-1:-1::0;;;31997:120:0::1;;;;;;;:::i;:::-;32128:17;:47:::0;;-1:-1:-1;;;;;;32128:47:0::1;-1:-1:-1::0;;;;;32128:47:0;::::1;::::0;;::::1;::::0;;;32191:44:::1;::::0;::::1;::::0;-1:-1:-1;;32191:44:0::1;31886:357:::0;:::o;32880:349::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;32985:18:::1;::::0;32975:4:::1;4622:7:::0;4654:18;;;;;;;;;;;32957:46:::1;;32935:160;;;::::0;;-1:-1:-1;;;32935:160:0;;12084:2:1;32935:160:0::1;::::0;::::1;12066:21:1::0;12103:18;;;12096:30;;;;12162:34;12142:18;;;12135:62;12233:34;12213:18;;;12206:62;12285:19;;32935:160:0::1;11882:428:1::0;32935:160:0::1;33106:8;:15:::0;;-1:-1:-1;;;;33106:15:0::1;-1:-1:-1::0;;;33106:15:0::1;::::0;;33132:10:::1;:8;:10::i;:::-;33153:8;:16:::0;;-1:-1:-1;;;;33153:16:0::1;::::0;;33185:36:::1;::::0;33205:15:::1;1839:25:1::0;;33185:36:0::1;::::0;1827:2:1;1812:18;33185:36:0::1;;;;;;;32880:349::o:0;17203:181::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17284:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;17276:62;;;::::0;-1:-1:-1;;;17276:62:0;;12517:2:1;17276:62:0::1;::::0;::::1;12499:21:1::0;12556:2;12536:18;;;12529:30;12595:32;12575:18;;;12568:60;12645:18;;17276:62:0::1;12315:354:1::0;17276:62:0::1;-1:-1:-1::0;;;;;17349:19:0::1;17371:5;17349:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;17349:27:0::1;::::0;;17203:181::o;32251:320::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32357:30:0;::::1;32335:118;;;;-1:-1:-1::0;;;32335:118:0::1;;;;;;;:::i;:::-;32464:15;:43:::0;;-1:-1:-1;;;;;;32464:43:0::1;-1:-1:-1::0;;;;;32464:43:0;::::1;::::0;;::::1;::::0;;;32523:40:::1;::::0;::::1;::::0;-1:-1:-1;;32523:40:0::1;32251:320:::0;:::o;32579:249::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32663:26:0;::::1;32655:71;;;::::0;-1:-1:-1;;;32655:71:0;;12876:2:1;32655:71:0::1;::::0;::::1;12858:21:1::0;;;12895:18;;;12888:30;12954:34;12934:18;;;12927:62;13006:18;;32655:71:0::1;12674:356:1::0;32655:71:0::1;32737:11;:35:::0;;-1:-1:-1;;;;;;32737:35:0::1;-1:-1:-1::0;;;;;32737:35:0;::::1;::::0;;::::1;::::0;;;32788:32:::1;::::0;::::1;::::0;-1:-1:-1;;32788:32:0::1;32579:249:::0;:::o;8597:150::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;8690:6:::1;::::0;8669:40:::1;::::0;8706:1:::1;::::0;-1:-1:-1;;;;;8690:6:0::1;::::0;8669:40:::1;::::0;8706:1;;8669:40:::1;8720:6;:19:::0;;-1:-1:-1;;;;;;8720:19:0::1;::::0;;8597:150::o;33281:84::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;33335:14:::1;:22:::0;;-1:-1:-1;;33335:22:0::1;::::0;;33281:84::o;19444:334::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;19564:4:::1;19559:155;;19621:6;::::0;-1:-1:-1;;;;;19621:6:0;;::::1;19611:16:::0;;::::1;::::0;19585:117:::1;;;::::0;-1:-1:-1;;;19585:117:0;;13237:2:1;19585:117:0::1;::::0;::::1;13219:21:1::0;13276:2;13256:18;;;13249:30;13315:34;13295:18;;;13288:62;-1:-1:-1;;;13366:18:1;;;13359:37;13413:19;;19585:117:0::1;13035:403:1::0;19585:117:0::1;-1:-1:-1::0;;;;;19724:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19724:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19444:334::o;16619:464::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;16707:13:::1;::::0;::::1;::::0;::::1;;;16706:14;16698:50;;;::::0;-1:-1:-1;;;16698:50:0;;13645:2:1;16698:50:0::1;::::0;::::1;13627:21:1::0;13684:2;13664:18;;;13657:30;13723:25;13703:18;;;13696:53;13766:18;;16698:50:0::1;13443:347:1::0;16698:50:0::1;16801:2;16781:16;:22;;16759:111;;;::::0;-1:-1:-1;;;16759:111:0;;13997:2:1;16759:111:0::1;::::0;::::1;13979:21:1::0;14036:2;14016:18;;;14009:30;14075:34;14055:18;;;14048:62;-1:-1:-1;;;14126:18:1;;;14119:37;14173:19;;16759:111:0::1;13795:403:1::0;16759:111:0::1;16881:13;:20:::0;;-1:-1:-1;;16912:18:0;;;;;16962:12:::1;16941:18;:33:::0;;;17006:37:::1;::::0;17027:16;;17006:37:::1;:::i;:::-;16985:18;:58:::0;17059:16:::1;::::0;::::1;::::0;;;::::1;16619:464:::0;:::o;31056:567::-;8510:6;;31170:10;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31206:20:0;::::1;31198:59;;;::::0;-1:-1:-1;;;31198:59:0;;14405:2:1;31198:59:0::1;::::0;::::1;14387:21:1::0;14444:2;14424:18;;;14417:30;14483:28;14463:18;;;14456:56;14529:18;;31198:59:0::1;14203:350:1::0;31198:59:0::1;-1:-1:-1::0;;;;;31290:23:0;::::1;31308:4;31290:23;;::::0;:41:::1;;-1:-1:-1::0;31318:13:0::1;::::0;::::1;::::0;::::1;;;31317:14;31290:41;31268:143;;;::::0;-1:-1:-1;;;31268:143:0;;14760:2:1;31268:143:0::1;::::0;::::1;14742:21:1::0;14799:2;14779:18;;;14772:30;14838:34;14818:18;;;14811:62;-1:-1:-1;;;14889:18:1;;;14882:50;14949:19;;31268:143:0::1;14558:416:1::0;31268:143:0::1;31449:39;::::0;-1:-1:-1;;;31449:39:0;;31482:4:::1;31449:39;::::0;::::1;731:51:1::0;31422:24:0::1;::::0;-1:-1:-1;;;;;31449:24:0;::::1;::::0;::::1;::::0;704:18:1;;31449:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31507:46;::::0;-1:-1:-1;;;31507:46:0;;-1:-1:-1;;;;;15360:32:1;;;31507:46:0::1;::::0;::::1;15342:51:1::0;15409:18;;;15402:34;;;31422:66:0;;-1:-1:-1;31507:23:0;;::::1;::::0;::::1;::::0;15315:18:1;;31507:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31569;::::0;;-1:-1:-1;;;;;15360:32:1;;15342:51;;15424:2;15409:18;;15402:34;;;31499:54:0;;-1:-1:-1;31569:46:0::1;::::0;15315:18:1;31569:46:0::1;;;;;;;31187:436;31056:567:::0;;;;:::o;4174:104::-;4230:13;4263:7;4256:14;;;;;:::i;17091:104::-;17140:16;17176:11;17169:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17169:18:0;;;;;;;;;;;;;;;;;;;;;;17091:104;:::o;19786:353::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;19932:6:::1;::::0;-1:-1:-1;;;;;19932:6:0;;::::1;19924:14:::0;;::::1;::::0;19902:121:::1;;;::::0;-1:-1:-1;;;19902:121:0;;15899:2:1;19902:121:0::1;::::0;::::1;15881:21:1::0;15938:2;15918:18;;;15911:30;15977:34;15957:18;;;15950:62;16048:27;16028:18;;;16021:55;16093:19;;19902:121:0::1;15697:421:1::0;19902:121:0::1;20034:41;20063:4;20069:5;20034:28;:41::i;:::-;20091:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20091:40:0;::::1;::::0;::::1;::::0;;;::::1;19786:353:::0;;:::o;33373:84::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;33428:14:::1;:21:::0;;-1:-1:-1;;33428:21:0::1;33445:4;33428:21;::::0;;33373:84::o;6181:482::-;216:10;6301:4;6350:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6350:34:0;;;;;;;;;;6417:35;;;;6395:122;;;;-1:-1:-1;;;6395:122:0;;16325:2:1;6395:122:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;-1:-1:-1;;;16454:18:1;;;16447:35;16499:19;;6395:122:0;16123:401:1;6395:122:0;6553:67;216:10;6576:7;6604:15;6585:16;:34;6553:8;:67::i;:::-;-1:-1:-1;6651:4:0;;6181:482;-1:-1:-1;;;6181:482:0:o;16387:224::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;16505:38:::1;16521:15;16538:4;16505:15;:38::i;:::-;16554:49;16581:15;16598:4;16554:26;:49::i;:::-;16387:224:::0;:::o;4688:216::-;4810:4;4832:42;216:10;4856:9;4867:6;4832:9;:42::i;21520:182::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21605:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21605:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21660:34;;1389:41:1;;;21660:34:0::1;::::0;1362:18:1;21660:34:0::1;;;;;;;21520:182:::0;;:::o;18398:311::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;18538:4:::1;18530;18509:13;4475:12:::0;;;4387:108;18509:13:::1;:17;::::0;18525:1:::1;18509:17;:::i;:::-;18508:26;;;;:::i;:::-;18507:35;;;;:::i;:::-;18497:6;:45;;18475:137;;;::::0;-1:-1:-1;;;18475:137:0;;16731:2:1;18475:137:0::1;::::0;::::1;16713:21:1::0;16770:2;16750:18;;;16743:30;16809:34;16789:18;;;16782:62;-1:-1:-1;;;16860:18:1;;;16853:40;16910:19;;18475:137:0::1;16529:406:1::0;18475:137:0::1;18635:17;:6:::0;18645::::1;18635:17;:::i;:::-;18623:9;:29:::0;;;18668:33:::1;::::0;1839:25:1;;;18668:33:0::1;::::0;1827:2:1;1812:18;18668:33:0::1;1693:177:1::0;18779:428:0;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;18919:6:::1;18898:13;4475:12:::0;;;4387:108;18898:13:::1;:17;::::0;18914:1:::1;18898:17;:::i;:::-;18897:28;;;;:::i;:::-;18884:9;:41;;18862:144;;;::::0;-1:-1:-1;;;18862:144:0;;17142:2:1;18862:144:0::1;::::0;::::1;17124:21:1::0;17181:2;17161:18;;;17154:30;17220:34;17200:18;;;17193:62;-1:-1:-1;;;17271:18:1;;;17264:51;17332:19;;18862:144:0::1;16940:417:1::0;18862:144:0::1;19074:4;19053:13;4475:12:::0;;;4387:108;19053:13:::1;:17;::::0;19069:1:::1;19053:17;:::i;:::-;19052:26;;;;:::i;:::-;19039:9;:39;;19017:141;;;::::0;-1:-1:-1;;;19017:141:0;;17564:2:1;19017:141:0::1;::::0;::::1;17546:21:1::0;17603:2;17583:18;;;17576:30;17642:34;17622:18;;;17615:62;-1:-1:-1;;;17693:18:1;;;17686:50;17753:19;;19017:141:0::1;17362:416:1::0;19017:141:0::1;19169:18;:30:::0;18779:428::o;18073:317::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;18212:4:::1;18203:5;18182:13;4475:12:::0;;;4387:108;18182:13:::1;:17;::::0;18198:1:::1;18182:17;:::i;:::-;18181:27;;;;:::i;:::-;18180:36;;;;:::i;:::-;18170:6;:46;;18148:139;;;::::0;-1:-1:-1;;;18148:139:0;;17985:2:1;18148:139:0::1;::::0;::::1;17967:21:1::0;18024:2;18004:18;;;17997:30;18063:34;18043:18;;;18036:62;-1:-1:-1;;;18114:18:1;;;18107:41;18165:19;;18148:139:0::1;17783:407:1::0;18148:139:0::1;18314:17;:6:::0;18324::::1;18314:17;:::i;:::-;18298:13;:33:::0;;;18347:35:::1;::::0;1839:25:1;;;18347:35:0::1;::::0;1827:2:1;1812:18;18347:35:0::1;1693:177:1::0;33870:320:0;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;33947:1:::1;33927:17;:21:::0;;;33978:1:::1;33959:16;:20:::0;;;33990:15:::1;:19:::0;;;34034:1:::1;34020:11;:15:::0;;;34034:1;33947;34075:49:::1;::::0;33947:1;34075:49:::1;:::i;:::-;:80;;;;:::i;:::-;:107;;;;:::i;:::-;34046:13;:136:::0;33870:320::o;20950:562::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;21134:17:::1;:34:::0;;;21179:16:::1;:32:::0;;;21222:15:::1;:30:::0;;;21263:11:::1;:22:::0;;;21277:8;21240:12;21325:49:::1;21198:13:::0;21154:14;21325:49:::1;:::i;:::-;:80;;;;:::i;:::-;:107;;;;:::i;:::-;21296:13;:136:::0;;;21468:2:::1;-1:-1:-1::0;21451:19:0::1;21443:61;;;::::0;-1:-1:-1;;;21443:61:0;;18397:2:1;21443:61:0::1;::::0;::::1;18379:21:1::0;18436:2;18416:18;;;18409:30;18475:31;18455:18;;;18448:59;18524:18;;21443:61:0::1;18195:353:1::0;17647:98:0;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;17709:20:::1;:28:::0;;-1:-1:-1;;17709:28:0::1;::::0;;17647:98::o;10891:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10891:28:0;;-1:-1:-1;10891:28:0;:::o;33485:327::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;33569:1:::1;33549:17;:21:::0;;;33600:1:::1;33581:16;:20:::0;;;33612:15:::1;:19:::0;;;33656:1:::1;33642:11;:15:::0;;;33656:1;33697:49:::1;::::0;33600:1;;33697:49:::1;:::i;8755:281::-:0;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8858:22:0;::::1;8836:110;;;::::0;-1:-1:-1;;;8836:110:0;;18755:2:1;8836:110:0::1;::::0;::::1;18737:21:1::0;18794:2;18774:18;;;18767:30;18833:34;18813:18;;;18806:62;-1:-1:-1;;;18884:18:1;;;18877:36;18930:19;;8836:110:0::1;18553:402:1::0;8836:110:0::1;8983:6;::::0;8962:38:::1;::::0;-1:-1:-1;;;;;8962:38:0;;::::1;::::0;8983:6:::1;::::0;8962:38:::1;::::0;8983:6:::1;::::0;8962:38:::1;9011:6;:17:::0;;-1:-1:-1;;;;;;9011:17:0::1;-1:-1:-1::0;;;;;9011:17:0;;;::::1;::::0;;;::::1;::::0;;8755:281::o;31693:185::-;8510:6;;-1:-1:-1;;;;;8510:6:0;216:10;8510:22;8502:67;;;;-1:-1:-1;;;8502:67:0;;;;;;;:::i;:::-;31788:82:::1;::::0;31751:12:::1;::::0;31796:10:::1;::::0;31820:21:::1;::::0;31751:12;31788:82;31751:12;31788:82;31820:21;31796:10;31788:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7652:380:::0;-1:-1:-1;;;;;7788:19:0;;7780:68;;;;-1:-1:-1;;;7780:68:0;;19372:2:1;7780:68:0;;;19354:21:1;19411:2;19391:18;;;19384:30;19450:34;19430:18;;;19423:62;-1:-1:-1;;;19501:18:1;;;19494:34;19545:19;;7780:68:0;19170:400:1;7780:68:0;-1:-1:-1;;;;;7867:21:0;;7859:68;;;;-1:-1:-1;;;7859:68:0;;19777:2:1;7859:68:0;;;19759:21:1;19816:2;19796:18;;;19789:30;19855:34;19835:18;;;19828:62;-1:-1:-1;;;19906:18:1;;;19899:32;19948:19;;7859:68:0;19575:398:1;7859:68:0;-1:-1:-1;;;;;7940:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7992:32;;1839:25:1;;;7992:32:0;;1812:18:1;7992:32:0;;;;;;;7652:380;;;:::o;6671:651::-;-1:-1:-1;;;;;6811:20:0;;6803:70;;;;-1:-1:-1;;;6803:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6892:23:0;;6884:71;;;;-1:-1:-1;;;6884:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6992:17:0;;6968:21;6992:17;;;;;;;;;;;7042:23;;;;7020:111;;;;-1:-1:-1;;;7020:111:0;;20990:2:1;7020:111:0;;;20972:21:1;21029:2;21009:18;;;21002:30;21068:34;21048:18;;;21041:62;-1:-1:-1;;;21119:18:1;;;21112:36;21165:19;;7020:111:0;20788:402:1;7020:111:0;-1:-1:-1;;;;;7167:17:0;;;:9;:17;;;;;;;;;;;7187:22;;;7167:42;;7231:20;;;;;;;;:30;;7203:6;;7167:9;7231:30;;7203:6;;7231:30;:::i;:::-;;;;;;;;7296:9;-1:-1:-1;;;;;7279:35:0;7288:6;-1:-1:-1;;;;;7279:35:0;;7307:6;7279:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7279:35:0;;;;;;;;6792:530;6671:651;;;:::o;21710:6265::-;-1:-1:-1;;;;;21842:18:0;;21834:68;;;;-1:-1:-1;;;21834:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21921:16:0;;21913:64;;;;-1:-1:-1;;;21913:64:0;;;;;;;:::i;:::-;22005:1;21996:6;:10;21988:52;;;;-1:-1:-1;;;21988:52:0;;21397:2:1;21988:52:0;;;21379:21:1;21436:2;21416:18;;;21409:30;21475:31;21455:18;;;21448:59;21524:18;;21988:52:0;21195:353:1;21988:52:0;22058:13;;;;;;;22053:183;;-1:-1:-1;;;;;22114:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22143:23:0;;;;;;:19;:23;;;;;;;;22114:52;22088:136;;;;-1:-1:-1;;;22088:136:0;;21755:2:1;22088:136:0;;;21737:21:1;21794:2;21774:18;;;21767:30;-1:-1:-1;;;21813:18:1;;;21806:52;21875:18;;22088:136:0;21553:346:1;22088:136:0;28078:18;;28063:12;:33;22252:26;:43;;;;-1:-1:-1;22282:13:0;;;;;;;22252:43;22248:268;;;-1:-1:-1;;;;;22339:17:0;;;;;;:11;:17;;;;;;;;22338:18;;:35;;-1:-1:-1;8448:6:0;;-1:-1:-1;;;;;22360:13:0;;;8448:6;;22360:13;22338:35;:60;;;-1:-1:-1;;;;;;22377:21:0;;22391:6;22377:21;22338:60;22312:192;;;;-1:-1:-1;;;22312:192:0;;22106:2:1;22312:192:0;;;22088:21:1;22145:2;22125:18;;;22118:30;22184:34;22164:18;;;22157:62;22255:34;22235:18;;;22228:62;-1:-1:-1;;;22306:19:1;;;22299:37;22353:19;;22312:192:0;21904:474:1;22312:192:0;22532:14;;;;22528:2148;;;8448:6;;-1:-1:-1;;;;;22585:15:0;;;8448:6;;22585:15;;;;:49;;-1:-1:-1;8448:6:0;;-1:-1:-1;;;;;22621:13:0;;;8448:6;;22621:13;;22585:49;:91;;;;-1:-1:-1;;;;;;22655:21:0;;22669:6;22655:21;;22585:91;:138;;;;-1:-1:-1;;;;;;22698:25:0;;;;;;:19;:25;;;;;;;;22697:26;22585:138;:183;;;;-1:-1:-1;;;;;;22745:23:0;;;;;;:19;:23;;;;;;;;22744:24;22585:183;22563:2102;;;22807:20;;;;22803:692;;;22870:9;;-1:-1:-1;;;;;22856:24:0;;;22870:9;;22856:24;;;;:49;;-1:-1:-1;22898:6:0;;-1:-1:-1;;;;;22884:21:0;;;22898:6;;22884:21;;22856:49;22852:624;;;23047:16;23062:1;23047:12;:16;:::i;:::-;23001:9;22972:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;23168:16:0;23183:1;23168:12;:16;:::i;:::-;-1:-1:-1;;;;;23100:32:0;;;;;;:28;:32;;;;;;:84;22972:212;22934:363;;;;-1:-1:-1;;;22934:363:0;;22718:2:1;22934:363:0;;;22700:21:1;22757:2;22737:18;;;22730:30;22796:34;22776:18;;;22769:62;-1:-1:-1;;;22847:18:1;;;22840:51;22908:19;;22934:363:0;22516:417:1;22934:363:0;23353:9;23324:39;;;;:28;:39;;;;;;23366:12;23324:54;;;;-1:-1:-1;;;;;23405:32:0;;;;;;:47;22852:624;-1:-1:-1;;;;;23569:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23626:35:0;;;;;;:31;:35;;;;;;;;23625:36;23569:92;23543:1107;;;23748:12;;23738:6;:22;;23704:148;;;;-1:-1:-1;;;23704:148:0;;23140:2:1;23704:148:0;;;23122:21:1;23179:2;23159:18;;;23152:30;23218:34;23198:18;;;23191:62;-1:-1:-1;;;23269:18:1;;;23262:38;23317:19;;23704:148:0;22938:404:1;23704:148:0;23935:9;;-1:-1:-1;;;;;4654:18:0;;4622:7;4654:18;;;;;;;;;;;23909:22;;:6;:22;:::i;:::-;:35;;23875:140;;;;-1:-1:-1;;;23875:140:0;;23549:2:1;23875:140:0;;;23531:21:1;23588:2;23568:18;;;23561:30;-1:-1:-1;;;23607:18:1;;;23600:49;23666:18;;23875:140:0;23347:343:1;23875:140:0;23543:1107;;;-1:-1:-1;;;;;24113:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24168:37:0;;;;;;:31;:37;;;;;;;;24167:38;24113:92;24087:563;;;24292:13;;24282:6;:23;;24248:151;;;;-1:-1:-1;;;24248:151:0;;23897:2:1;24248:151:0;;;23879:21:1;23936:2;23916:18;;;23909:30;23975:34;23955:18;;;23948:62;-1:-1:-1;;;24026:18:1;;;24019:40;24076:19;;24248:151:0;23695:406:1;24087:563:0;-1:-1:-1;;;;;24430:35:0;;;;;;:31;:35;;;;;;;;24425:225;;24550:9;;-1:-1:-1;;;;;4654:18:0;;4622:7;4654:18;;;;;;;;;;;24524:22;;:6;:22;:::i;:::-;:35;;24490:140;;;;-1:-1:-1;;;24490:140:0;;23549:2:1;24490:140:0;;;23531:21:1;23588:2;23568:18;;;23561:30;-1:-1:-1;;;23607:18:1;;;23600:49;23666:18;;24490:140:0;23347:343:1;24490:140:0;24737:4;24688:28;4654:18;;;;;;;;;;;24795;;24771:42;;;;;;;24844:22;;-1:-1:-1;24855:11:0;;;;;;;24844:22;:35;;;;-1:-1:-1;24871:8:0;;-1:-1:-1;;;24871:8:0;;;;24870:9;24844:35;:68;;;;-1:-1:-1;;;;;;24883:29:0;;;;;;:25;:29;;;;;;;;24844:68;24826:196;;;24939:8;:15;;-1:-1:-1;;;;24939:15:0;-1:-1:-1;;;24939:15:0;;;24969:10;:8;:10::i;:::-;24994:8;:16;;-1:-1:-1;;;;24994:16:0;;;24826:196;-1:-1:-1;;;;;25153:25:0;;25034:12;25153:25;;;:19;:25;;;;;;25049:4;;25153:25;;;:52;;-1:-1:-1;;;;;;25182:23:0;;;;;;:19;:23;;;;;;;;25153:52;25149:100;;;-1:-1:-1;25232:5:0;25149:100;25261:12;25366:7;25362:2560;;;28078:18;;28063:12;:33;25449:152;;;;25525:8;25510:12;;:23;;;;:::i;:::-;25500:6;:33;;:100;;;;;25588:12;25562:18;;25583:1;25562:22;;;;:::i;:::-;:38;;25500:100;25448:206;;;;-1:-1:-1;;;;;;25623:31:0;;;;;;:25;:31;;;;;;;;25448:206;:257;;;;-1:-1:-1;;;;;;25676:29:0;;;;;;:25;:29;;;;;;;;25675:30;25448:257;:302;;;;-1:-1:-1;;;;;;25727:23:0;;;;;;:19;:23;;;;;;;;25726:24;25448:302;:339;;;;;25786:1;25771:12;;:16;25448:339;25426:2347;;;28078:18;;28063:12;:33;25822:332;;26133:1;26117:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25822:332:0;-1:-1:-1;;;;;26179:15:0;;;;;;:11;:15;;;;;;;;26174:216;;-1:-1:-1;;;;;26219:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26219:22:0;26237:4;26219:22;;;;;;26264:10;:15;;26237:4;;26264:10;;:15;;26237:4;;26264:15;:::i;:::-;;;;-1:-1:-1;;26302:11:0;:20;;;;;;;-1:-1:-1;26302:20:0;;;;;;;;-1:-1:-1;;;;;;26302:20:0;-1:-1:-1;;;;;26302:20:0;;;;;;;;26350;;731:51:1;;;26350:20:0;;719:2:1;704:18;26350:20:0;;;;;;;26174:216;26433:3;26418:11;:6;26427:2;26418:11;:::i;:::-;26417:19;;;;:::i;:::-;26410:26;;26504:12;;26485:15;;26478:4;:22;;;;:::i;:::-;26477:39;;;;:::i;:::-;26455:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26586:12:0;;26566:16;;26559:23;;:4;:23;:::i;:::-;26558:40;;;;:::i;:::-;26535:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26664:12:0;;26646:14;;26639:21;;:4;:21;:::i;:::-;26638:38;;;;:::i;:::-;26617:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26734:12:0;;26720:10;;26713:17;;:4;:17;:::i;:::-;26712:34;;;;:::i;:::-;26695:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;25426:2347:0;;-1:-1:-1;25426:2347:0;;-1:-1:-1;;;;;26809:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26858:1;26842:13;;:17;26809:50;26805:968;;;26914:3;26897:13;;26888:6;:22;;;;:::i;:::-;26887:30;;;;:::i;:::-;26880:37;;26986:13;;26966:16;;26959:4;:23;;;;:::i;:::-;26958:41;;;;:::i;:::-;26936:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27112:13:0;;27070:17;;27063:24;;:4;:24;:::i;:::-;27062:63;;;;:::i;:::-;27018:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;27192:13:0;;27173:15;;27166:22;;:4;:22;:::i;:::-;27165:40;;;;:::i;:::-;27144:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27264:13:0;;27249:11;;27242:18;;:4;:18;:::i;26805:968::-;-1:-1:-1;;;;;27339:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27389:1;27374:12;;:16;27339:51;27335:438;;;27444:3;27428:12;;27419:6;:21;;;;:::i;:::-;27418:29;;;;:::i;:::-;27411:36;;27515:12;;27496:15;;27489:4;:22;;;;:::i;:::-;27488:39;;;;:::i;:::-;27466:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27597:12:0;;27577:16;;27570:23;;:4;:23;:::i;:::-;27569:40;;;;:::i;:::-;27546:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27675:12:0;;27657:14;;27650:21;;:4;:21;:::i;:::-;27649:38;;;;:::i;:::-;27628:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27745:12:0;;27731:10;;27724:17;;:4;:17;:::i;:::-;27723:34;;;;:::i;:::-;27706:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;27335:438:0;27793:8;;27789:91;;27822:42;27838:4;27852;27859;27822:15;:42::i;:::-;27896:14;27906:4;27896:14;;:::i;:::-;;;25362:2560;27934:33;27950:4;27956:2;27960:6;27934:15;:33::i;:::-;21823:6152;;;;21710:6265;;;:::o;29208:1840::-;29291:4;29247:23;4654:18;;;;;;;;;;;29247:50;;29308:25;29438:13;;29405:17;;29370:19;;29336:18;;:53;;;;:::i;:::-;:86;;;;:::i;:::-;:115;;;;:::i;:::-;29308:143;-1:-1:-1;29468:20:0;;;:46;;-1:-1:-1;29492:22:0;;29468:46;29464:85;;;29531:7;;29208:1840::o;29464:85::-;29583:18;;:23;;29604:2;29583:23;:::i;:::-;29565:15;:41;29561:115;;;29641:18;;:23;;29662:2;29641:23;:::i;:::-;29623:41;;29561:115;29688:12;29762:23;29875:1;29842:17;29807:18;;29789:15;:36;;;;:::i;:::-;29788:71;;;;:::i;:::-;:88;;;;:::i;:::-;29762:114;-1:-1:-1;29889:51:0;29906:33;29762:114;29906:15;:33;:::i;:::-;29889:16;:51::i;:::-;30154:18;;29974:21;;;;29953:18;;30154:22;;30175:1;;30154:22;:::i;:::-;30133:44;;:17;:44;:::i;:::-;30096:19;;30083:32;;:10;:32;:::i;:::-;30082:96;;;;:::i;:::-;30055:123;;30189:22;30305:1;30284:18;;:22;;;;:::i;:::-;30263:44;;:17;:44;:::i;:::-;30228:17;;30215:30;;:10;:30;:::i;:::-;30214:94;;;;:::i;:::-;30189:119;;30319:18;30427:1;30406:18;;:22;;;;:::i;:::-;30385:44;;:17;:44;:::i;:::-;30354:13;;30341:26;;:10;:26;:::i;:::-;30340:90;;;;:::i;:::-;30319:111;-1:-1:-1;30319:111:0;30462:33;30481:14;30462:16;:33;:::i;:::-;:46;;;;:::i;:::-;30443:65;;;;:::i;:::-;30542:1;30521:18;:22;;;30554:19;:23;;;30588:17;:21;;;30620:13;:17;30443:65;-1:-1:-1;30654:19:0;;;;;:42;;;30695:1;30677:15;:19;30654:42;30650:121;;;30713:46;30726:15;30743;30713:12;:46::i;:::-;30805:15;;30797:56;;-1:-1:-1;;;;;30805:15:0;;;;30834:14;;30797:56;;;;30834:14;30805:15;30797:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30886:11:0;;30878:48;;30783:70;;-1:-1:-1;;;;;;30886:11:0;;30911:10;;30878:48;;;;30911:10;30886:11;30878:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30959:17:0;;30951:89;;30864:62;;-1:-1:-1;;;;;;30959:17:0;;31004:21;;30951:89;;;;31004:21;30959:17;30951:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;29208:1840:0:o;20147:236::-;-1:-1:-1;;;;;20230:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20230:39:0;;;;;;;20280;20230:31;:39;19215:221;-1:-1:-1;;;;;19317:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19317:52:0;;;;;;;;;;19385:43;;24274:51:1;;;24341:18;;;24334:50;19385:43:0;;24247:18:1;19385:43:0;;;;;;;19215:221;;:::o;28112:571::-;28262:16;;;28276:1;28262:16;;;;;;;;28238:21;;28262:16;;;;;;;;;;-1:-1:-1;28262:16:0;28238:40;;28307:4;28289;28294:1;28289:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28289:23:0;;;:7;;;;;;;;;;:23;;;;28333:9;;:16;;;-1:-1:-1;;;28333:16:0;;;;:9;;;;;:14;;:16;;;;;28289:7;;28333:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28323:4;28328:1;28323:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28323:26:0;;;:7;;;;;;;;;:26;28394:9;;28362:56;;28379:4;;28394:9;28406:11;28362:8;:56::i;:::-;28457:9;;:218;;-1:-1:-1;;;28457:218:0;;-1:-1:-1;;;;;28457:9:0;;;;:60;;:218;;28532:11;;28457:9;;28602:4;;28629;;28649:15;;28457:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28167:516;28112:571;:::o;28691:509::-;28871:9;;28839:56;;28856:4;;-1:-1:-1;;;;;28871:9:0;28883:11;28839:8;:56::i;:::-;28938:9;;:254;;-1:-1:-1;;;28938:254:0;;29004:4;28938:254;;;25579:34:1;25629:18;;;25622:34;;;28938:9:0;25672:18:1;;;25665:34;;;25715:18;;;25708:34;29144:6:0;25758:19:1;;;25751:44;29166:15:0;25811:19:1;;;25804:35;-1:-1:-1;;;;;28938:9:0;;;;:25;;28971:9;;25513:19:1;;28938:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28691:509;;:::o;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;929:315;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;2083:127::-;2144:10;2139:3;2135:20;2132:1;2125:31;2175:4;2172:1;2165:15;2199:4;2196:1;2189:15;2215:275;2286:2;2280:9;2351:2;2332:13;;-1:-1:-1;;2328:27:1;2316:40;;2386:18;2371:34;;2407:22;;;2368:62;2365:88;;;2433:18;;:::i;:::-;2469:2;2462:22;2215:275;;-1:-1:-1;2215:275:1:o;2495:183::-;2555:4;2588:18;2580:6;2577:30;2574:56;;;2610:18;;:::i;:::-;-1:-1:-1;2655:1:1;2651:14;2667:4;2647:25;;2495:183::o;2683:662::-;2737:5;2790:3;2783:4;2775:6;2771:17;2767:27;2757:55;;2808:1;2805;2798:12;2757:55;2844:6;2831:20;2870:4;2894:60;2910:43;2950:2;2910:43;:::i;:::-;2894:60;:::i;:::-;2988:15;;;3074:1;3070:10;;;;3058:23;;3054:32;;;3019:12;;;;3098:15;;;3095:35;;;3126:1;3123;3116:12;3095:35;3162:2;3154:6;3150:15;3174:142;3190:6;3185:3;3182:15;3174:142;;;3256:17;;3244:30;;3294:12;;;;3207;;3174:142;;;-1:-1:-1;3334:5:1;2683:662;-1:-1:-1;;;;;;2683:662:1:o;3350:1215::-;3468:6;3476;3529:2;3517:9;3508:7;3504:23;3500:32;3497:52;;;3545:1;3542;3535:12;3497:52;3585:9;3572:23;3614:18;3655:2;3647:6;3644:14;3641:34;;;3671:1;3668;3661:12;3641:34;3709:6;3698:9;3694:22;3684:32;;3754:7;3747:4;3743:2;3739:13;3735:27;3725:55;;3776:1;3773;3766:12;3725:55;3812:2;3799:16;3834:4;3858:60;3874:43;3914:2;3874:43;:::i;3858:60::-;3952:15;;;4034:1;4030:10;;;;4022:19;;4018:28;;;3983:12;;;;4058:19;;;4055:39;;;4090:1;4087;4080:12;4055:39;4114:11;;;;4134:217;4150:6;4145:3;4142:15;4134:217;;;4230:3;4217:17;4247:31;4272:5;4247:31;:::i;:::-;4291:18;;4167:12;;;;4329;;;;4134:217;;;4370:5;-1:-1:-1;;4413:18:1;;4400:32;;-1:-1:-1;;4444:16:1;;;4441:36;;;4473:1;4470;4463:12;4441:36;;4496:63;4551:7;4540:8;4529:9;4525:24;4496:63;:::i;:::-;4486:73;;;3350:1215;;;;;:::o;4570:456::-;4647:6;4655;4663;4716:2;4704:9;4695:7;4691:23;4687:32;4684:52;;;4732:1;4729;4722:12;4684:52;4771:9;4758:23;4790:31;4815:5;4790:31;:::i;:::-;4840:5;-1:-1:-1;4897:2:1;4882:18;;4869:32;4910:33;4869:32;4910:33;:::i;:::-;4570:456;;4962:7;;-1:-1:-1;;;5016:2:1;5001:18;;;;4988:32;;4570:456::o;5031:180::-;5090:6;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;-1:-1:-1;5182:23:1;;5031:180;-1:-1:-1;5031:180:1:o;5216:385::-;5302:6;5310;5318;5326;5379:3;5367:9;5358:7;5354:23;5350:33;5347:53;;;5396:1;5393;5386:12;5347:53;-1:-1:-1;;5419:23:1;;;5489:2;5474:18;;5461:32;;-1:-1:-1;5540:2:1;5525:18;;5512:32;;5591:2;5576:18;5563:32;;-1:-1:-1;5216:385:1;-1:-1:-1;5216:385:1:o;5795:118::-;5881:5;5874:13;5867:21;5860:5;5857:32;5847:60;;5903:1;5900;5893:12;5918:382;5983:6;5991;6044:2;6032:9;6023:7;6019:23;6015:32;6012:52;;;6060:1;6057;6050:12;6012:52;6099:9;6086:23;6118:31;6143:5;6118:31;:::i;:::-;6168:5;-1:-1:-1;6225:2:1;6210:18;;6197:32;6238:30;6197:32;6238:30;:::i;:::-;6287:7;6277:17;;;5918:382;;;;;:::o;6305:388::-;6373:6;6381;6434:2;6422:9;6413:7;6409:23;6405:32;6402:52;;;6450:1;6447;6440:12;6402:52;6489:9;6476:23;6508:31;6533:5;6508:31;:::i;:::-;6558:5;-1:-1:-1;6615:2:1;6600:18;;6587:32;6628:33;6587:32;6628:33;:::i;6698:461::-;6751:3;6789:5;6783:12;6816:6;6811:3;6804:19;6842:4;6871:2;6866:3;6862:12;6855:19;;6908:2;6901:5;6897:14;6929:1;6939:195;6953:6;6950:1;6947:13;6939:195;;;7018:13;;-1:-1:-1;;;;;7014:39:1;7002:52;;7074:12;;;;7109:15;;;;7050:1;6968:9;6939:195;;;-1:-1:-1;7150:3:1;;6698:461;-1:-1:-1;;;;;6698:461:1:o;7164:261::-;7343:2;7332:9;7325:21;7306:4;7363:56;7415:2;7404:9;7400:18;7392:6;7363:56;:::i;7430:380::-;7509:1;7505:12;;;;7552;;;7573:61;;7627:4;7619:6;7615:17;7605:27;;7573:61;7680:2;7672:6;7669:14;7649:18;7646:38;7643:161;;7726:10;7721:3;7717:20;7714:1;7707:31;7761:4;7758:1;7751:15;7789:4;7786:1;7779:15;7643:161;;7430:380;;;:::o;7815:356::-;8017:2;7999:21;;;8036:18;;;8029:30;8095:34;8090:2;8075:18;;8068:62;8162:2;8147:18;;7815:356::o;9368:127::-;9429:10;9424:3;9420:20;9417:1;9410:31;9460:4;9457:1;9450:15;9484:4;9481:1;9474:15;9500:127;9561:10;9556:3;9552:20;9549:1;9542:31;9592:4;9589:1;9582:15;9616:4;9613:1;9606:15;9632:135;9671:3;9692:17;;;9689:43;;9712:18;;:::i;:::-;-1:-1:-1;9759:1:1;9748:13;;9632:135::o;10181:168::-;10254:9;;;10285;;10302:15;;;10296:22;;10282:37;10272:71;;10323:18;;:::i;10354:217::-;10394:1;10420;10410:132;;10464:10;10459:3;10455:20;10452:1;10445:31;10499:4;10496:1;10489:15;10527:4;10524:1;10517:15;10410:132;-1:-1:-1;10556:9:1;;10354:217::o;10987:125::-;11052:9;;;11073:10;;;11070:36;;;11086:18;;:::i;11475:402::-;11677:2;11659:21;;;11716:2;11696:18;;;11689:30;11755:34;11750:2;11735:18;;11728:62;-1:-1:-1;;;11821:2:1;11806:18;;11799:36;11867:3;11852:19;;11475:402::o;14979:184::-;15049:6;15102:2;15090:9;15081:7;15077:23;15073:32;15070:52;;;15118:1;15115;15108:12;15070:52;-1:-1:-1;15141:16:1;;14979:184;-1:-1:-1;14979:184:1:o;15447:245::-;15514:6;15567:2;15555:9;15546:7;15542:23;15538:32;15535:52;;;15583:1;15580;15573:12;15535:52;15615:9;15609:16;15634:28;15656:5;15634:28;:::i;19978:401::-;20180:2;20162:21;;;20219:2;20199:18;;;20192:30;20258:34;20253:2;20238:18;;20231:62;-1:-1:-1;;;20324:2:1;20309:18;;20302:35;20369:3;20354:19;;19978:401::o;20384:399::-;20586:2;20568:21;;;20625:2;20605:18;;;20598:30;20664:34;20659:2;20644:18;;20637:62;-1:-1:-1;;;20730:2:1;20715:18;;20708:33;20773:3;20758:19;;20384:399::o;22383:128::-;22450:9;;;22471:11;;;22468:37;;;22485:18;;:::i;24395:251::-;24465:6;24518:2;24506:9;24497:7;24493:23;24489:32;24486:52;;;24534:1;24531;24524:12;24486:52;24566:9;24560:16;24585:31;24610:5;24585:31;:::i;24651:582::-;24950:6;24939:9;24932:25;24993:6;24988:2;24977:9;24973:18;24966:34;25036:3;25031:2;25020:9;25016:18;25009:31;24913:4;25057:57;25109:3;25098:9;25094:19;25086:6;25057:57;:::i;:::-;-1:-1:-1;;;;;25150:32:1;;;;25145:2;25130:18;;25123:60;-1:-1:-1;25214:3:1;25199:19;25192:35;25049:65;24651:582;-1:-1:-1;;;24651:582:1:o;25850:306::-;25938:6;25946;25954;26007:2;25995:9;25986:7;25982:23;25978:32;25975:52;;;26023:1;26020;26013:12;25975:52;26052:9;26046:16;26036:26;;26102:2;26091:9;26087:18;26081:25;26071:35;;26146:2;26135:9;26131:18;26125:25;26115:35;;25850:306;;;;;:::o
Swarm Source
ipfs://f7e53f4a51e38ea2b56695d894cac0a209e64d653ad06935ae80c8ad13cee5ab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.