ERC-20
Overview
Max Total Supply
10,000 TDD
Holders
2
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 10 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
DxDividendToken
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-30 */ /* // Official DxDividend Token // To Mint your own token visit https://dx.app // DxMint verified tokens are unruggable through code // To view the audit certificate for this token search it in https://dx.app/dxmint // Please ensure one wallet doesn't hold too much supply of tokens! */ // SPDX-License-Identifier: MIT pragma solidity 0.8.14; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer( address recipient, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); 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"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IUniswapV2Router01 { function factory() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function addLiquidityAVAX( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { function createPair( address tokenA, address tokenB ) external returns (address pair); function getPair( address tokenA, address tokenB ) external view returns (address pair); } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey( Map storage map, address key ) public view returns (int) { if (!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex( Map storage map, uint index ) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract 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 virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public 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 IDividendPayingTokenOptional { function withdrawableDividendOf( address _owner ) external view returns (uint256); function withdrawnDividendOf( address _owner ) external view returns (uint256); function accumulativeDividendOf( address _owner ) external view returns (uint256); } interface IDividendPayingToken { function dividendOf(address _owner) external view returns (uint256); function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } contract DividendPayingToken is ERC20, Ownable, IDividendPayingToken, IDividendPayingTokenOptional { uint256 internal constant magnitude = 2 ** 128; uint256 internal magnifiedDividendPerShare; uint256 internal lastAmount; address public rewardToken; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor( address _rewardToken, string memory _name, string memory _symbol ) ERC20(_name, _symbol) { rewardToken = _rewardToken; } function distributeRewardDividends(uint256 amount) public onlyOwner { require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare += (amount * magnitude) / totalSupply(); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed + amount; } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser( address payable user ) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user] + _withdrawableDividend; emit DividendWithdrawn(user, _withdrawableDividend); bool success = IERC20(rewardToken).transfer( user, _withdrawableDividend ); if (!success) { withdrawnDividends[user] = withdrawnDividends[user] - _withdrawableDividend; return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf( address _owner ) public view override returns (uint256) { return accumulativeDividendOf(_owner) - withdrawnDividends[_owner]; } function withdrawnDividendOf( address _owner ) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf( address _owner ) public view override returns (uint256) { return (magnifiedDividendPerShare * balanceOf(_owner) + uint256(magnifiedDividendCorrections[_owner])) / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = int256(magnifiedDividendPerShare * value); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from] + _magCorrection; magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to] - _magCorrection; } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] - int256(magnifiedDividendPerShare * value); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] + int256(magnifiedDividendPerShare * value); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance - currentBalance; _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance - newBalance; _burn(account, burnAmount); } } } contract DividendTracker is Ownable, DividendPayingToken { using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim( address indexed account, uint256 amount, bool indexed automatic ); constructor( address tokenReward, uint256 _minimumTokenBalanceForDividends ) DividendPayingToken( tokenReward, "_Dividend_Tracker", "_Dividend_Tracker" ) { claimWait = 3600; minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends; } function _transfer(address, address, uint256) internal pure override { require(false, "Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public pure override { require( false, "Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main ERC20 token contract." ); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account], "already excluded"); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function isExcludedFromDividends( address account ) public view returns (bool) { return excludedFromDividends[account]; } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require( newClaimWait >= 3600 && newClaimWait <= 36000, "Dividend_Tracker: claimWait must be updated to between 1 and 24 hours" ); require( newClaimWait != claimWait, "Dividend_Tracker: Cannot update claimWait to same value" ); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function updateMinimumTokenBalanceForDividends( uint256 amount ) external onlyOwner { minimumTokenBalanceForDividends = amount; } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function getAccount( address _account ) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable ) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index - (int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length - lastProcessedIndex : 0; iterationsUntilProcessed = index + (int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime + claimWait : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime - block.timestamp : 0; } function getAccountAtIndex( uint256 index ) public view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256 ) { if (index >= tokenHoldersMap.size()) { return ( 0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0 ); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if (lastClaimTime > block.timestamp) { return false; } return (block.timestamp - lastClaimTime) >= claimWait; } function setBalance( address payable account, uint256 newBalance ) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (canAutoClaim(lastClaimTimes[account])) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed + gasLeft - newGasLeft; } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount( address payable account, bool automatic ) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } } contract DxDividendToken is ERC20, Ownable { IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public rewardToken; address public router; address public basePair; bool public mintedByDxsale = true; address dead = 0x000000000000000000000000000000000000dEaD; uint8 private _decimals; bool private swapping; DividendTracker public dividendTracker; uint256 public swapTokensAtAmount; uint256 public tokenRewardsFee; uint256 public liquidityFee; uint256 public totalFees; uint256 public gasForProcessing = 500000; mapping(address => bool) public _isExcludedFromFees; event GasForProcessingUpdated( uint256 indexed newValue, uint256 indexed oldValue ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends(uint256 tokensSwapped, uint256 amount); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); constructor( address tokenOwner, address _rewardToken, string memory name_, string memory symbol_, uint8 decimals_, uint256 _totalSupply, uint8 _tokenRewardsFee, uint8 _liquidityFee, address _router, address _basePair ) ERC20(name_, symbol_) { tokenRewardsFee = _tokenRewardsFee; liquidityFee = _liquidityFee; totalFees = tokenRewardsFee + liquidityFee; rewardToken = _rewardToken; _decimals = decimals_; swapTokensAtAmount = _totalSupply / (10000); dividendTracker = new DividendTracker( rewardToken, (_totalSupply / (10000 * (10 ** decimals_))) ); router = _router; basePair = _basePair; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), basePair); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(tokenOwner); dividendTracker.excludeFromDividends(dead); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); //excludeFromFees _isExcludedFromFees[tokenOwner] = true; _isExcludedFromFees[address(this)] = true; _mint(tokenOwner, _totalSupply); } receive() external payable {} function decimals() public view virtual override returns (uint8) { return _decimals; } function setSwapTokensAtAmount(uint256 amount) external onlyOwner { require(amount > totalSupply() / 1000000, "Amount too low"); swapTokensAtAmount = amount; } function excludeFromFees(address account) public onlyOwner { require(!_isExcludedFromFees[account], "Account is already excluded"); _isExcludedFromFees[account] = true; } function includeInFees(address account) public onlyOwner { require(_isExcludedFromFees[account], "Account is already included"); _isExcludedFromFees[account] = false; } function excludeFromDividends(address account) public onlyOwner { dividendTracker.excludeFromDividends(account); } function setLiquidityFee(uint256 _newFee) external onlyOwner { require(_newFee >= 0 && _newFee <= 15, "Fee out of range!"); liquidityFee = _newFee; totalFees = _newFee + tokenRewardsFee; } function setRewardFee(uint256 _newFee) external onlyOwner { require(_newFee >= 0 && _newFee <= 15, "Fee out of range!"); tokenRewardsFee = _newFee; totalFees = _newFee + liquidityFee; } function updateGasForProcessing(uint256 newValue) public onlyOwner { require( newValue >= 200000 && newValue <= 500000, "gasForProcessing must be between 200,000 and 500,000" ); require( newValue != gasForProcessing, "Cannot update gasForProcessing to same value" ); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function updateClaimWait(uint256 claimWait) external onlyOwner { dividendTracker.updateClaimWait(claimWait); } function getClaimWait() external view returns (uint256) { return dividendTracker.claimWait(); } function updateMinimumTokenBalanceForDividends( uint256 amount ) external onlyOwner { dividendTracker.updateMinimumTokenBalanceForDividends(amount); } function getMinimumTokenBalanceForDividends() external view returns (uint256) { return dividendTracker.minimumTokenBalanceForDividends(); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromDividends( address account ) public view returns (bool) { return dividendTracker.isExcludedFromDividends(account); } function withdrawableDividendOf( address account ) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf( address account ) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo( address account ) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256 ) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex( uint256 index ) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256 ) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) = dividendTracker.process(gas); emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, false, gas, tx.origin ); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function getLastProcessedIndex() external view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && from != owner() && to != owner() && totalFees > 0 ) { swapping = true; uint256 swapTokens = (contractTokenBalance * liquidityFee) / totalFees; swapAndLiquify(swapTokens); uint256 sellTokens = balanceOf(address(this)); if (sellTokens > 0) { swapAndSendDividends(sellTokens); } swapping = false; } bool takeFee = !swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (takeFee && totalFees > 0) { uint256 fees = (amount * totalFees) / 100; amount = amount - fees; super._transfer(from, address(this), fees); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} if (!swapping) { uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) { emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, true, gas, tx.origin ); } catch {} } } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens / 2; uint256 otherHalf = tokens - half; uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance - initialBalance; addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = basePair; _approve(address(this), address(uniswapV2Router), tokenAmount); try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ) {} catch (bytes memory) { try uniswapV2Router .swapExactTokensForAVAXSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ) {} catch (bytes memory) { uniswapV2Router .swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } } } function swapTokensForReward( uint256 tokenAmount, address recipient ) private { address[] memory path = new address[](3); path[0] = address(this); path[1] = basePair; path[2] = rewardToken; _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, recipient, block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity try uniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable dead, block.timestamp ) {} catch (bytes memory) { try uniswapV2Router.addLiquidityAVAX{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable dead, block.timestamp ) {} catch (bytes memory) { uniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable dead, block.timestamp ); } } } function swapAndSendDividends(uint256 tokens) private { swapTokensForReward(tokens, address(this)); uint256 dividends = IERC20(rewardToken).balanceOf(address(this)); bool success = IERC20(rewardToken).transfer( address(dividendTracker), dividends ); if (success) { dividendTracker.distributeRewardDividends(dividends); emit SendDividends(tokens, dividends); } } //exclude new owner from fees function transferOwnership( address newOwner ) public virtual override onlyOwner { _isExcludedFromFees[newOwner] = true; if (!isExcludedFromDividends(newOwner)) { dividendTracker.excludeFromDividends(newOwner); } super.transferOwnership(newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint8","name":"_tokenRewardsFee","type":"uint8"},{"internalType":"uint8","name":"_liquidityFee","type":"uint8"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_basePair","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","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":"tokensIntoLiqudity","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedByDxsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":"tokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a805460ff60a01b1916600160a01b179055600b80546001600160a01b03191661dead1790556207a1206011553480156200003f57600080fd5b506040516200550a3803806200550a833981016040819052620000629162000806565b8751889088906200007b90600390602085019062000656565b5080516200009190600490602084019062000656565b5050506000620000a66200056a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060ff808516600e819055908416600f819055620001119162000915565b601055600880546001600160a01b0319166001600160a01b038b16179055600b805460ff60a01b1916600160a01b60ff891602179055620001556127108662000930565b600d556008546001600160a01b03166200017187600a62000a52565b6200017f9061271062000a6a565b6200018b908762000930565b6040516200019990620006e5565b6001600160a01b0390921682526020820152604001604051809103906000f080158015620001cb573d6000803e3d6000fd5b50600c80546001600160a01b03199081166001600160a01b0393841617909155600980548216858416908117909155600a80549092169284169290921790556040805163c45a015560e01b81529051600091839163c45a0155916004808201926020929091908290030181865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000271919062000a8c565b600a546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620002c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e9919062000a8c565b600680546001600160a01b038086166001600160a01b031992831617909255600780548385169216919091179055600c5460405163031e79db60e41b815292935016906331e79db0906200034290839060040162000aaa565b600060405180830381600087803b1580156200035d57600080fd5b505af115801562000372573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0390911692506331e79db09150620003a890309060040162000aaa565b600060405180830381600087803b158015620003c357600080fd5b505af1158015620003d8573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0390911692506331e79db091506200040e908f9060040162000aaa565b600060405180830381600087803b1580156200042957600080fd5b505af11580156200043e573d6000803e3d6000fd5b5050600c54600b5460405163031e79db60e41b81526001600160a01b0392831694506331e79db0935062000479929091169060040162000aaa565b600060405180830381600087803b1580156200049457600080fd5b505af1158015620004a9573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0390911692506331e79db09150620004df90859060040162000aaa565b600060405180830381600087803b158015620004fa57600080fd5b505af11580156200050f573d6000803e3d6000fd5b505050506001600160a01b038c166000908152601260205260408082208054600160ff1991821681179092553084529190922080549091169091179055620005588c886200056e565b50505050505050505050505062000afa565b3390565b6001600160a01b038216620005c95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620005dd919062000915565b90915550506001600160a01b038216600090815260208190526040812080548392906200060c90849062000915565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006649062000abe565b90600052602060002090601f016020900481019282620006885760008555620006d3565b82601f10620006a357805160ff1916838001178555620006d3565b82800160010185558215620006d3579182015b82811115620006d3578251825591602001919060010190620006b6565b50620006e1929150620006f3565b5090565b61204e80620034bc83390190565b5b80821115620006e15760008155600101620006f4565b80516001600160a01b03811681146200072257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200074f57600080fd5b81516001600160401b03808211156200076c576200076c62000727565b604051601f8301601f19908116603f0116810190828211818310171562000797576200079762000727565b81604052838152602092508683858801011115620007b457600080fd5b600091505b83821015620007d85785820183015181830184015290820190620007b9565b83821115620007ea5760008385830101525b9695505050505050565b805160ff811681146200072257600080fd5b6000806000806000806000806000806101408b8d0312156200082757600080fd5b620008328b6200070a565b99506200084260208c016200070a565b60408c01519099506001600160401b03808211156200086057600080fd5b6200086e8e838f016200073d565b995060608d01519150808211156200088557600080fd5b50620008948d828e016200073d565b975050620008a560808c01620007f4565b955060a08b01519450620008bc60c08c01620007f4565b9350620008cc60e08c01620007f4565b9250620008dd6101008c016200070a565b9150620008ee6101208c016200070a565b90509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b600082198211156200092b576200092b620008ff565b500190565b6000826200094e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111562000994578160001904821115620009785762000978620008ff565b808516156200098657918102915b93841c939080029062000958565b509250929050565b600082620009ad5750600162000a4c565b81620009bc5750600062000a4c565b8160018114620009d55760028114620009e05762000a00565b600191505062000a4c565b60ff841115620009f457620009f4620008ff565b50506001821b62000a4c565b5060208310610133831016604e8410600b841016171562000a25575081810a62000a4c565b62000a31838362000953565b806000190482111562000a485762000a48620008ff565b0290505b92915050565b600062000a6360ff8416836200099c565b9392505050565b600081600019048311821515161562000a875762000a87620008ff565b500290565b60006020828403121562000a9f57600080fd5b62000a63826200070a565b6001600160a01b0391909116815260200190565b600181811c9082168062000ad357607f821691505b60208210810362000af457634e487b7160e01b600052602260045260246000fd5b50919050565b6129b28062000b0a6000396000f3fe6080604052600436106102275760003560e01c806306fdde0314610233578063095ea7b31461025e5780630dcb2e891461028e57806313114a9d146102b05780631694505e146102d457806316a2f82a1461030157806318160ddd1461032157806323b872dd146103365780632c1f52161461035657806330bb4cff14610376578063313ce5671461038b57806331e79db0146103b7578063357bf15c146103d757806339509351146103f757806341a2ac701461041757806349bd5a5e146104375780634e71d92d14610457578063559246461461046c5780635930919b1461048d57806364b0f653146104ad5780636843cd84146104c2578063700bb191146104e257806370a0823114610502578063715018a614610522578063871c128d146105375780638da5cb5b1461055757806395d89b411461056c57806398118cb4146105815780639c1b8af514610597578063a26579ad146105ad578063a457c2d7146105c2578063a8b9d240146105e2578063a9059cbb14610602578063ad56c13c14610622578063afa4f3b214610687578063bdd4f29f146106a7578063c705c569146106bc578063dd62ed3e146106dc578063e0bf7fd114610722578063e2f4560514610752578063e57f14e114610768578063e708a0f914610788578063e7841ec01461079e578063e98030c7146107b3578063f27fd254146107d3578063f2fde38b146107f3578063f7c618c114610813578063f887ea401461083357600080fd5b3661022e57005b600080fd5b34801561023f57600080fd5b50610248610853565b604051610255919061246a565b60405180910390f35b34801561026a57600080fd5b5061027e6102793660046124d4565b6108e5565b6040519015158152602001610255565b34801561029a57600080fd5b506102ae6102a9366004612500565b6108fb565b005b3480156102bc57600080fd5b506102c660105481565b604051908152602001610255565b3480156102e057600080fd5b506006546102f4906001600160a01b031681565b6040516102559190612519565b34801561030d57600080fd5b506102ae61031c36600461252d565b610995565b34801561032d57600080fd5b506002546102c6565b34801561034257600080fd5b5061027e610351366004612551565b610a4b565b34801561036257600080fd5b50600c546102f4906001600160a01b031681565b34801561038257600080fd5b506102c6610af5565b34801561039757600080fd5b50600b54600160a01b900460ff1660405160ff9091168152602001610255565b3480156103c357600080fd5b506102ae6103d236600461252d565b610b68565b3480156103e357600080fd5b506102ae6103f2366004612500565b610bc7565b34801561040357600080fd5b5061027e6104123660046124d4565b610c2f565b34801561042357600080fd5b506102ae610432366004612500565b610c6b565b34801561044357600080fd5b506007546102f4906001600160a01b031681565b34801561046357600080fd5b506102ae610ccd565b34801561047857600080fd5b50600a5461027e90600160a01b900460ff1681565b34801561049957600080fd5b50600a546102f4906001600160a01b031681565b3480156104b957600080fd5b506102c6610d45565b3480156104ce57600080fd5b506102c66104dd36600461252d565b610d8f565b3480156104ee57600080fd5b506102ae6104fd366004612500565b610e07565b34801561050e57600080fd5b506102c661051d36600461252d565b610ec3565b34801561052e57600080fd5b506102ae610ede565b34801561054357600080fd5b506102ae610552366004612500565b610f45565b34801561056357600080fd5b506102f461108c565b34801561057857600080fd5b5061024861109b565b34801561058d57600080fd5b506102c6600f5481565b3480156105a357600080fd5b506102c660115481565b3480156105b957600080fd5b506102c66110aa565b3480156105ce57600080fd5b5061027e6105dd3660046124d4565b6110f4565b3480156105ee57600080fd5b506102c66105fd36600461252d565b61118d565b34801561060e57600080fd5b5061027e61061d3660046124d4565b6111be565b34801561062e57600080fd5b5061064261063d36600461252d565b6111cb565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610255565b34801561069357600080fd5b506102ae6106a2366004612500565b611269565b3480156106b357600080fd5b506102c66112f3565b3480156106c857600080fd5b5061027e6106d736600461252d565b61133d565b3480156106e857600080fd5b506102c66106f7366004612592565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561072e57600080fd5b5061027e61073d36600461252d565b60126020526000908152604090205460ff1681565b34801561075e57600080fd5b506102c6600d5481565b34801561077457600080fd5b506102ae61078336600461252d565b6113af565b34801561079457600080fd5b506102c6600e5481565b3480156107aa57600080fd5b506102c6611469565b3480156107bf57600080fd5b506102ae6107ce366004612500565b6114b3565b3480156107df57600080fd5b506106426107ee366004612500565b611513565b3480156107ff57600080fd5b506102ae61080e36600461252d565b611555565b34801561081f57600080fd5b506008546102f4906001600160a01b031681565b34801561083f57600080fd5b506009546102f4906001600160a01b031681565b606060038054610862906125cb565b80601f016020809104026020016040519081016040528092919081815260200182805461088e906125cb565b80156108db5780601f106108b0576101008083540402835291602001916108db565b820191906000526020600020905b8154815290600101906020018083116108be57829003601f168201915b5050505050905090565b60006108f2338484611620565b50600192915050565b3361090461108c565b6001600160a01b0316146109335760405162461bcd60e51b815260040161092a90612605565b60405180910390fd5b600c54604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e89906024015b600060405180830381600087803b15801561097a57600080fd5b505af115801561098e573d6000803e3d6000fd5b5050505050565b3361099e61108c565b6001600160a01b0316146109c45760405162461bcd60e51b815260040161092a90612605565b6001600160a01b03811660009081526012602052604090205460ff16610a2a5760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e481a5b98db1d591959602a1b604482015260640161092a565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000610a58848484611744565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610add5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161092a565b610aea8533858403611620565b506001949350505050565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b63919061263a565b905090565b33610b7161108c565b6001600160a01b031614610b975760405162461bcd60e51b815260040161092a90612605565b600c5460405163031e79db60e41b81526001600160a01b03909116906331e79db090610960908490600401612519565b33610bd061108c565b6001600160a01b031614610bf65760405162461bcd60e51b815260040161092a90612605565b600f811115610c175760405162461bcd60e51b815260040161092a90612653565b600f819055600e54610c299082612694565b60105550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108f2918590610c66908690612694565b611620565b33610c7461108c565b6001600160a01b031614610c9a5760405162461bcd60e51b815260040161092a90612605565b600f811115610cbb5760405162461bcd60e51b815260040161092a90612653565b600e819055600f54610c299082612694565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4291906126ac565b50565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b600c546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dc0908590600401612519565b602060405180830381865afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e01919061263a565b92915050565b600c546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e91906126ce565b925092509250326001600160a01b03166000151560008051602061293d83398151915285858589604051610eb594939291906126fc565b60405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b33610ee761108c565b6001600160a01b031614610f0d5760405162461bcd60e51b815260040161092a90612605565b6005546040516000916001600160a01b03169060008051602061295d833981519152908390a3600580546001600160a01b0319169055565b33610f4e61108c565b6001600160a01b031614610f745760405162461bcd60e51b815260040161092a90612605565b62030d408110158015610f8a57506207a1208111155b610ff35760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152730203230302c30303020616e64203530302c3030360641b606482015260840161092a565b60115481036110595760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b606482015260840161092a565b60115460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601155565b6005546001600160a01b031690565b606060048054610862906125cb565b600c5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161092a565b6111833385858403611620565b5060019392505050565b600c546040516302a2e74960e61b81526000916001600160a01b03169063a8b9d24090610dc0908590600401612519565b60006108f2338484611744565b600c5460405163fbcbc0f160e01b815260009182918291829182918291829182916001600160a01b039091169063fbcbc0f19061120c908c90600401612519565b61010060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612717565b97509750975097509750975097509750919395975091939597565b3361127261108c565b6001600160a01b0316146112985760405162461bcd60e51b815260040161092a90612605565b620f42406112a560025490565b6112af9190612781565b81116112ee5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b604482015260640161092a565b600d55565b600c5460408051632f842d8560e21b815290516000926001600160a01b03169163be10b6149160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b600c5460405163c705c56960e01b81526000916001600160a01b03169063c705c5699061136e908590600401612519565b602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0191906126ac565b336113b861108c565b6001600160a01b0316146113de5760405162461bcd60e51b815260040161092a90612605565b6001600160a01b03811660009081526012602052604090205460ff16156114455760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604482015260640161092a565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b600c546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b336114bc61108c565b6001600160a01b0316146114e25760405162461bcd60e51b815260040161092a90612605565b600c5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610960565b600c54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd9060240161120c565b3361155e61108c565b6001600160a01b0316146115845760405162461bcd60e51b815260040161092a90612605565b6001600160a01b0381166000908152601260205260409020805460ff191660011790556115b08161133d565b61161757600c5460405163031e79db60e41b81526001600160a01b03909116906331e79db0906115e4908490600401612519565b600060405180830381600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b505050505b610d4281611ad1565b6001600160a01b0383166116825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161092a565b6001600160a01b0382166116e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161092a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661176a5760405162461bcd60e51b815260040161092a906127a3565b6001600160a01b0382166117905760405162461bcd60e51b815260040161092a906127e8565b806000036117a9576117a483836000611baf565b505050565b60006117b430610ec3565b600d54909150811080159081906117d55750600b54600160a81b900460ff16155b80156117fa57506117e461108c565b6001600160a01b0316856001600160a01b031614155b801561181f575061180961108c565b6001600160a01b0316846001600160a01b031614155b801561182d57506000601054115b1561189a57600b805460ff60a81b1916600160a81b179055601054600f5460009190611859908561282b565b6118639190612781565b905061186e81611cf6565b600061187930610ec3565b9050801561188a5761188a81611d7d565b5050600b805460ff60a81b191690555b600b546001600160a01b03861660009081526012602052604090205460ff600160a81b9092048216159116806118e857506001600160a01b03851660009081526012602052604090205460ff165b156118f1575060005b80801561190057506000601054115b1561193c576000606460105486611917919061282b565b6119219190612781565b905061192d818661284a565b945061193a873083611baf565b505b611947868686611baf565b600c546001600160a01b031663e30443bc8761196281610ec3565b6040518363ffffffff1660e01b815260040161197f929190612861565b600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b50600c546001600160a01b031663e30443bc866119c681610ec3565b6040518363ffffffff1660e01b81526004016119e3929190612861565b600060405180830381600087803b1580156119fd57600080fd5b505af1925050508015611a0e575060015b50600b54600160a81b900460ff16611ac957601154600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015611a8d575060408051601f3d908101601f19168201909252611a8a918101906126ce565b60015b15611ac757604051329060019060008051602061293d83398151915290611abb908790879087908b906126fc565b60405180910390a35050505b505b505050505050565b33611ada61108c565b6001600160a01b031614611b005760405162461bcd60e51b815260040161092a90612605565b6001600160a01b038116611b655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092a565b6005546040516001600160a01b0380841692169060008051602061295d83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bd55760405162461bcd60e51b815260040161092a906127a3565b6001600160a01b038216611bfb5760405162461bcd60e51b815260040161092a906127e8565b6001600160a01b03831660009081526020819052604090205481811015611c735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161092a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611caa908490612694565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb591815260200190565b6000611d03600283612781565b90506000611d11828461284a565b905047611d1d83611f1d565b6000611d29824761284a565b9050611d35838261214b565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b611d878130612344565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611db8903090600401612519565b602060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df9919061263a565b600854600c5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb92611e35929116908690600401612861565b6020604051808303816000875af1158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906126ac565b905080156117a457600c54604051632287d53b60e11b8152600481018490526001600160a01b039091169063450faa7690602401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3935001905060405180910390a1505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f5257611f5261287a565b6001600160a01b039283166020918202929092010152600a54825191169082906001908110611f8357611f8361287a565b6001600160a01b039283166020918202929092010152600654611fa99130911684611620565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fe2908590600090869030904290600401612890565b600060405180830381600087803b158015611ffc57600080fd5b505af192505050801561200d575060015b612147573d80801561203b576040519150601f19603f3d011682016040523d82523d6000602084013e612040565b606091505b50600654604051633b158ab160e11b81526001600160a01b039091169063762b15629061207a908690600090879030904290600401612890565b600060405180830381600087803b15801561209457600080fd5b505af19250505080156120a5575060015b6117a4573d8080156120d3576040519150601f19603f3d011682016040523d82523d6000602084013e6120d8565b606091505b5060065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612112908790600090889030904290600401612890565b600060405180830381600087803b15801561212c57600080fd5b505af1158015612140573d6000803e3d6000fd5b5050505050505b5050565b6006546121639030906001600160a01b031684611620565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926121a39230928992600092839216904290600401612901565b60606040518083038185885af1935050505080156121de575060408051601f3d908101601f191682019092526121db918101906126ce565b60015b61098e573d80801561220c576040519150601f19603f3d011682016040523d82523d6000602084013e612211565b606091505b50600654600b54604051637c8d9fb960e11b81526001600160a01b039283169263f91b3f729286926122529230928a92600092839216904290600401612901565b60606040518083038185885af19350505050801561228d575060408051601f3d908101601f1916820190925261228a918101906126ce565b60015b611ac9573d8080156122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b50600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d7199287926123019230928b92600092839216904290600401612901565b60606040518083038185885af115801561231f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ac791906126ce565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061237b5761237b61287a565b6001600160a01b039283166020918202929092010152600a548251911690829060019081106123ac576123ac61287a565b6001600160a01b0392831660209182029290920101526008548251911690829060029081106123dd576123dd61287a565b6001600160a01b0392831660209182029290920101526006546124039130911685611620565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061243c908690600090869088904290600401612890565b600060405180830381600087803b15801561245657600080fd5b505af1158015611ac7573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124975785810183015185820160400152820161247b565b818111156124a9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d4257600080fd5b600080604083850312156124e757600080fd5b82356124f2816124bf565b946020939093013593505050565b60006020828403121561251257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006020828403121561253f57600080fd5b813561254a816124bf565b9392505050565b60008060006060848603121561256657600080fd5b8335612571816124bf565b92506020840135612581816124bf565b929592945050506040919091013590565b600080604083850312156125a557600080fd5b82356125b0816124bf565b915060208301356125c0816124bf565b809150509250929050565b600181811c908216806125df57607f821691505b6020821081036125ff57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561264c57600080fd5b5051919050565b602080825260119082015270466565206f7574206f662072616e67652160781b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126a7576126a761267e565b500190565b6000602082840312156126be57600080fd5b8151801515811461254a57600080fd5b6000806000606084860312156126e357600080fd5b8351925060208401519150604084015190509250925092565b93845260208401929092526040830152606082015260800190565b600080600080600080600080610100898b03121561273457600080fd5b885161273f816124bf565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008261279e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156128455761284561267e565b500290565b60008282101561285c5761285c61267e565b500390565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128e05784516001600160a01b0316835293830193918301916001016128bb565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c0019056fec864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a988be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212201677a4f976cd3752d3418eb4186018ee9ac69bc50c43103475d1769b00ba998164736f6c634300080e003360806040523480156200001157600080fd5b506040516200204e3803806200204e8339810160408190526200003491620001db565b6040805180820182526011808252702fa234bb34b232b7322faa3930b1b5b2b960791b6020808401828152855180870190965292855284015281518593918391839162000085916003919062000135565b5080516200009b90600490602084019062000135565b5050506000620000b06200013160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050600880546001600160a01b0319166001600160a01b03939093169290921790915550610e106013556014555062000253565b3390565b828054620001439062000217565b90600052602060002090601f016020900481019282620001675760008555620001b2565b82601f106200018257805160ff1916838001178555620001b2565b82800160010185558215620001b2579182015b82811115620001b257825182559160200191906001019062000195565b50620001c0929150620001c4565b5090565b5b80821115620001c05760008155600101620001c5565b60008060408385031215620001ef57600080fd5b82516001600160a01b03811681146200020757600080fd5b6020939093015192949293505050565b600181811c908216806200022c57607f821691505b6020821081036200024d57634e487b7160e01b600052602260045260246000fd5b50919050565b611deb80620002636000396000f3fe608060405234801561001057600080fd5b50600436106101c25760003560e01c806306fdde03146101c7578063095ea7b3146101e557806309bbedde146102085780630dcb2e891461021a57806318160ddd1461022f578063226cfa3d1461023757806323b872dd1461025757806327ce01471461026a5780633009a6091461027d578063313ce5671461028657806331e79db01461029557806339509351146102a8578063450faa76146102bb5780634e7b827f146102ce5780635183d6fd146102f15780636a474002146103495780636f2789ec1461035157806370a082311461035a578063715018a61461036d57806385a6b3ae146103755780638da5cb5b1461037e57806391b89fba1461039e57806395d89b41146103b1578063a457c2d7146103b9578063a8b9d240146103cc578063a9059cbb146103df578063aafd847a146103f2578063bc4c4b371461041b578063be10b6141461042e578063c705c56914610437578063dd62ed3e14610463578063e30443bc1461049c578063e7841ec0146104af578063e98030c7146104b7578063f2fde38b146104ca578063f7c618c1146104dd578063fbcbc0f1146104f0578063ffb2c47914610503575b600080fd5b6101cf610531565b6040516101dc91906119de565b60405180910390f35b6101f86101f3366004611a48565b6105c3565b60405190151581526020016101dc565b600c545b6040519081526020016101dc565b61022d610228366004611a74565b6105da565b005b60025461020c565b61020c610245366004611a8d565b60126020526000908152604090205481565b6101f8610265366004611ab1565b610617565b61020c610278366004611a8d565b6106c1565b61020c60105481565b604051601281526020016101dc565b61022d6102a3366004611a8d565b61070a565b6101f86102b6366004611a48565b610864565b61022d6102c9366004611a74565b6108a0565b6101f86102dc366004611a8d565b60116020526000908152604090205460ff1681565b6103046102ff366004611a74565b610965565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101dc565b61022d610ab9565b61020c60135481565b61020c610368366004611a8d565b610b5d565b61022d610b78565b61020c600b5481565b610386610bdf565b6040516001600160a01b0390911681526020016101dc565b61020c6103ac366004611a8d565b610bee565b6101cf610bf9565b6101f86103c7366004611a48565b610c08565b61020c6103da366004611a8d565b610ca1565b6101f86103ed366004611a48565b610ccd565b61020c610400366004611a8d565b6001600160a01b03166000908152600a602052604090205490565b6101f8610429366004611b00565b610cda565b61020c60145481565b6101f8610445366004611a8d565b6001600160a01b031660009081526011602052604090205460ff1690565b61020c610471366004611b39565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61022d6104aa366004611a48565b610d8c565b60105461020c565b61022d6104c5366004611a74565b610ef3565b61022d6104d8366004611a8d565b61105a565b600854610386906001600160a01b031681565b6103046104fe366004611a8d565b611138565b610516610511366004611a74565b611298565b604080519384526020840192909252908201526060016101dc565b60606003805461054090611b67565b80601f016020809104026020016040519081016040528092919081815260200182805461056c90611b67565b80156105b95780601f1061058e576101008083540402835291602001916105b9565b820191906000526020600020905b81548152906001019060200180831161059c57829003601f168201915b5050505050905090565b60006105d03384846113b6565b5060015b92915050565b336105e3610bdf565b6001600160a01b0316146106125760405162461bcd60e51b815260040161060990611ba1565b60405180910390fd5b601455565b60006106248484846114da565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106a95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610609565b6106b685338584036113b6565b506001949350505050565b6001600160a01b038116600090815260096020526040812054600160801b906106e984610b5d565b6006546106f69190611bec565b6107009190611c0b565b6105d49190611c23565b33610713610bdf565b6001600160a01b0316146107395760405162461bcd60e51b815260040161060990611ba1565b6001600160a01b03811660009081526011602052604090205460ff16156107955760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48195e18db1d59195960821b6044820152606401610609565b6001600160a01b0381166000908152601160205260408120805460ff191660011790556107c3908290611531565b60405163131836e760e21b815273b5ab898d9531c55faf5a2b48e285ece9790a9a5c90634c60db9c906107fd90600c908590600401611c45565b60006040518083038186803b15801561081557600080fd5b505af4158015610829573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105d091859061089b908690611c0b565b6113b6565b336108a9610bdf565b6001600160a01b0316146108cf5760405162461bcd60e51b815260040161060990611ba1565b60006108da60025490565b116108e457600080fd5b8015610962576002546108fb600160801b83611bec565b6109059190611c23565b600660008282546109169190611c0b565b909155505060405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a280600b5461095e9190611c0b565b600b555b50565b600080600080600080600080600c73b5ab898d9531c55faf5a2b48e285ece9790a9a5c63deb3d89690916040518263ffffffff1660e01b81526004016109ad91815260200190565b602060405180830381865af41580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190611c5c565b8910610a13575060009650600019955085945086935083925082915081905080610aae565b6040516368d54f3f60e11b8152600c6004820152602481018a905260009073b5ab898d9531c55faf5a2b48e285ece9790a9a5c9063d1aa9e7e90604401602060405180830381865af4158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611c75565b9050610a9c81611138565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b815260206004820152606760248201527f4469766964656e645f547261636b65723a20776974686472617744697669646560448201527f6e642064697361626c65642e20557365207468652027636c61696d272066756e60648201527f6374696f6e206f6e20746865206d61696e20455243323020746f6b656e20636f608482015266373a3930b1ba1760c91b60a482015260c401610609565b6001600160a01b031660009081526020819052604090205490565b33610b81610bdf565b6001600160a01b031614610ba75760405162461bcd60e51b815260040161060990611ba1565b6005546040516000916001600160a01b031690600080516020611d76833981519152908390a3600580546001600160a01b0319169055565b6005546001600160a01b031690565b60006105d482610ca1565b60606004805461054090611b67565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c8a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610609565b610c9733858584036113b6565b5060019392505050565b6001600160a01b0381166000908152600a6020526040812054610cc3836106c1565b6105d49190611c92565b60006105d03384846114da565b600033610ce5610bdf565b6001600160a01b031614610d0b5760405162461bcd60e51b815260040161060990611ba1565b6000610d168461158a565b90508015610d82576001600160a01b038416600081815260126020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610d709085815260200190565b60405180910390a360019150506105d4565b5060009392505050565b33610d95610bdf565b6001600160a01b031614610dbb5760405162461bcd60e51b815260040161060990611ba1565b6001600160a01b03821660009081526011602052604090205460ff16610eef576014548110610e6c57610dee8282611531565b604051632f0ad01760e21b8152600c60048201526001600160a01b03831660248201526044810182905273b5ab898d9531c55faf5a2b48e285ece9790a9a5c9063bc2b405c9060640160006040518083038186803b158015610e4f57600080fd5b505af4158015610e63573d6000803e3d6000fd5b50505050610ee2565b610e77826000611531565b60405163131836e760e21b815273b5ab898d9531c55faf5a2b48e285ece9790a9a5c90634c60db9c90610eb190600c908690600401611c45565b60006040518083038186803b158015610ec957600080fd5b505af4158015610edd573d6000803e3d6000fd5b505050505b610eed826001610cda565b505b5050565b33610efc610bdf565b6001600160a01b031614610f225760405162461bcd60e51b815260040161060990611ba1565b610e108110158015610f365750618ca08111155b610fb65760405162461bcd60e51b815260206004820152604560248201527f4469766964656e645f547261636b65723a20636c61696d57616974206d75737460448201527f206265207570646174656420746f206265747765656e203120616e6420323420606482015264686f75727360d81b608482015260a401610609565b60135481036110275760405162461bcd60e51b815260206004820152603760248201527f4469766964656e645f547261636b65723a2043616e6e6f742075706461746520604482015276636c61696d5761697420746f2073616d652076616c756560481b6064820152608401610609565b60135460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601355565b33611063610bdf565b6001600160a01b0316146110895760405162461bcd60e51b815260040161060990611ba1565b6001600160a01b0381166110ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610609565b6005546040516001600160a01b03808416921690600080516020611d7683398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600080600080889750600c73b5ab898d9531c55faf5a2b48e285ece9790a9a5c6317e142d190918a6040518363ffffffff1660e01b8152600401611183929190611c45565b602060405180830381865af41580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c49190611c5c565b9650600019955060008712611226576010548711156111f1576010546111ea9088611ca9565b9550611226565b601054600c5460009110611206576000611216565b601054600c546112169190611c92565b90506112228189611ce8565b9650505b61122f88610ca1565b945061123a886106c1565b6001600160a01b038916600090815260126020526040902054909450925082611264576000611271565b6013546112719084611c0b565b915042821161128157600061128b565b61128b4283611c92565b9050919395975091939597565b600c54600090819081908082036112ba575050601054600092508291506113af565b6010546000805a90506000805b89841080156112d557508582105b1561139e57846112e481611d29565b600c54909650861090506112f757600094505b6000600c600001868154811061130f5761130f611d42565b60009182526020808320909101546001600160a01b03168083526012909152604090912054909150611340906116f1565b1561136357611350816001610cda565b15611363578161135f81611d29565b9250505b8261136d81611d29565b93505060005a90508085111561139557806113888688611c0b565b6113929190611c92565b95505b93506112c79050565b601085905590975095509193505050505b9193909250565b6001600160a01b0383166114185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610609565b6001600160a01b0382166114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610609565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602660248201527f4469766964656e645f547261636b65723a204e6f207472616e736665727320616044820152651b1b1bddd95960d21b6064820152608401610609565b600061153c83610b5d565b9050808211156115645760006115528284611c92565b905061155e8482611718565b50610eed565b80821015610eed5760006115788383611c92565b90506115848482611773565b50505050565b60008061159683610ca1565b905080156116e8576001600160a01b0383166000908152600a60205260409020546115c2908290611c0b565b6001600160a01b0384166000818152600a6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906116119084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af115801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190611d58565b9050806116e1576001600160a01b0384166000908152600a60205260409020546116bc908390611c92565b6001600160a01b039094166000908152600a6020526040812094909455509192915050565b5092915050565b50600092915050565b60004282111561170357506000919050565b6013546117108342611c92565b101592915050565b61172282826117ae565b806006546117309190611bec565b6001600160a01b0383166000908152600960205260409020546117539190611ca9565b6001600160a01b0390921660009081526009602052604090209190915550565b61177d828261188f565b8060065461178b9190611bec565b6001600160a01b0383166000908152600960205260409020546117539190611ce8565b6001600160a01b0382166118045760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610609565b61181060008383610eed565b80600260008282546118229190611c0b565b90915550506001600160a01b0382166000908152602081905260408120805483929061184f908490611c0b565b90915550506040518181526001600160a01b03831690600090600080516020611d968339815191529060200160405180910390a3610eef60008383610eed565b6001600160a01b0382166118ef5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610609565b6118fb82600083610eed565b6001600160a01b0382166000908152602081905260409020548181101561196f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610609565b6001600160a01b038316600090815260208190526040812083830390556002805484929061199e908490611c92565b90915550506040518281526000906001600160a01b03851690600080516020611d968339815191529060200160405180910390a3610eed83600084610eed565b600060208083528351808285015260005b81811015611a0b578581018301518582016040015282016119ef565b81811115611a1d576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461096257600080fd5b60008060408385031215611a5b57600080fd5b8235611a6681611a33565b946020939093013593505050565b600060208284031215611a8657600080fd5b5035919050565b600060208284031215611a9f57600080fd5b8135611aaa81611a33565b9392505050565b600080600060608486031215611ac657600080fd5b8335611ad181611a33565b92506020840135611ae181611a33565b929592945050506040919091013590565b801515811461096257600080fd5b60008060408385031215611b1357600080fd5b8235611b1e81611a33565b91506020830135611b2e81611af2565b809150509250929050565b60008060408385031215611b4c57600080fd5b8235611b5781611a33565b91506020830135611b2e81611a33565b600181811c90821680611b7b57607f821691505b602082108103611b9b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611c0657611c06611bd6565b500290565b60008219821115611c1e57611c1e611bd6565b500190565b600082611c4057634e487b7160e01b600052601260045260246000fd5b500490565b9182526001600160a01b0316602082015260400190565b600060208284031215611c6e57600080fd5b5051919050565b600060208284031215611c8757600080fd5b8151611aaa81611a33565b600082821015611ca457611ca4611bd6565b500390565b60008083128015600160ff1b850184121615611cc757611cc7611bd6565b6001600160ff1b0384018313811615611ce257611ce2611bd6565b50500390565b600080821280156001600160ff1b0384900385131615611d0a57611d0a611bd6565b600160ff1b8390038412811615611d2357611d23611bd6565b50500190565b600060018201611d3b57611d3b611bd6565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d6a57600080fd5b8151611aaa81611af256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206d51f9d7b16b209cba3e8e07289a4349099941531ce3f45237e5ae0c46eaf0a964736f6c634300080e003300000000000000000000000015901b9150c189cfb532c95100ea975c2f4ab34f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000591cf6942c422fa53e8d81c62a9692d7bea72f61000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000000000000000000000000000000000000000000d54657374204469762044796f720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035444440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102275760003560e01c806306fdde0314610233578063095ea7b31461025e5780630dcb2e891461028e57806313114a9d146102b05780631694505e146102d457806316a2f82a1461030157806318160ddd1461032157806323b872dd146103365780632c1f52161461035657806330bb4cff14610376578063313ce5671461038b57806331e79db0146103b7578063357bf15c146103d757806339509351146103f757806341a2ac701461041757806349bd5a5e146104375780634e71d92d14610457578063559246461461046c5780635930919b1461048d57806364b0f653146104ad5780636843cd84146104c2578063700bb191146104e257806370a0823114610502578063715018a614610522578063871c128d146105375780638da5cb5b1461055757806395d89b411461056c57806398118cb4146105815780639c1b8af514610597578063a26579ad146105ad578063a457c2d7146105c2578063a8b9d240146105e2578063a9059cbb14610602578063ad56c13c14610622578063afa4f3b214610687578063bdd4f29f146106a7578063c705c569146106bc578063dd62ed3e146106dc578063e0bf7fd114610722578063e2f4560514610752578063e57f14e114610768578063e708a0f914610788578063e7841ec01461079e578063e98030c7146107b3578063f27fd254146107d3578063f2fde38b146107f3578063f7c618c114610813578063f887ea401461083357600080fd5b3661022e57005b600080fd5b34801561023f57600080fd5b50610248610853565b604051610255919061246a565b60405180910390f35b34801561026a57600080fd5b5061027e6102793660046124d4565b6108e5565b6040519015158152602001610255565b34801561029a57600080fd5b506102ae6102a9366004612500565b6108fb565b005b3480156102bc57600080fd5b506102c660105481565b604051908152602001610255565b3480156102e057600080fd5b506006546102f4906001600160a01b031681565b6040516102559190612519565b34801561030d57600080fd5b506102ae61031c36600461252d565b610995565b34801561032d57600080fd5b506002546102c6565b34801561034257600080fd5b5061027e610351366004612551565b610a4b565b34801561036257600080fd5b50600c546102f4906001600160a01b031681565b34801561038257600080fd5b506102c6610af5565b34801561039757600080fd5b50600b54600160a01b900460ff1660405160ff9091168152602001610255565b3480156103c357600080fd5b506102ae6103d236600461252d565b610b68565b3480156103e357600080fd5b506102ae6103f2366004612500565b610bc7565b34801561040357600080fd5b5061027e6104123660046124d4565b610c2f565b34801561042357600080fd5b506102ae610432366004612500565b610c6b565b34801561044357600080fd5b506007546102f4906001600160a01b031681565b34801561046357600080fd5b506102ae610ccd565b34801561047857600080fd5b50600a5461027e90600160a01b900460ff1681565b34801561049957600080fd5b50600a546102f4906001600160a01b031681565b3480156104b957600080fd5b506102c6610d45565b3480156104ce57600080fd5b506102c66104dd36600461252d565b610d8f565b3480156104ee57600080fd5b506102ae6104fd366004612500565b610e07565b34801561050e57600080fd5b506102c661051d36600461252d565b610ec3565b34801561052e57600080fd5b506102ae610ede565b34801561054357600080fd5b506102ae610552366004612500565b610f45565b34801561056357600080fd5b506102f461108c565b34801561057857600080fd5b5061024861109b565b34801561058d57600080fd5b506102c6600f5481565b3480156105a357600080fd5b506102c660115481565b3480156105b957600080fd5b506102c66110aa565b3480156105ce57600080fd5b5061027e6105dd3660046124d4565b6110f4565b3480156105ee57600080fd5b506102c66105fd36600461252d565b61118d565b34801561060e57600080fd5b5061027e61061d3660046124d4565b6111be565b34801561062e57600080fd5b5061064261063d36600461252d565b6111cb565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610255565b34801561069357600080fd5b506102ae6106a2366004612500565b611269565b3480156106b357600080fd5b506102c66112f3565b3480156106c857600080fd5b5061027e6106d736600461252d565b61133d565b3480156106e857600080fd5b506102c66106f7366004612592565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561072e57600080fd5b5061027e61073d36600461252d565b60126020526000908152604090205460ff1681565b34801561075e57600080fd5b506102c6600d5481565b34801561077457600080fd5b506102ae61078336600461252d565b6113af565b34801561079457600080fd5b506102c6600e5481565b3480156107aa57600080fd5b506102c6611469565b3480156107bf57600080fd5b506102ae6107ce366004612500565b6114b3565b3480156107df57600080fd5b506106426107ee366004612500565b611513565b3480156107ff57600080fd5b506102ae61080e36600461252d565b611555565b34801561081f57600080fd5b506008546102f4906001600160a01b031681565b34801561083f57600080fd5b506009546102f4906001600160a01b031681565b606060038054610862906125cb565b80601f016020809104026020016040519081016040528092919081815260200182805461088e906125cb565b80156108db5780601f106108b0576101008083540402835291602001916108db565b820191906000526020600020905b8154815290600101906020018083116108be57829003601f168201915b5050505050905090565b60006108f2338484611620565b50600192915050565b3361090461108c565b6001600160a01b0316146109335760405162461bcd60e51b815260040161092a90612605565b60405180910390fd5b600c54604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e89906024015b600060405180830381600087803b15801561097a57600080fd5b505af115801561098e573d6000803e3d6000fd5b5050505050565b3361099e61108c565b6001600160a01b0316146109c45760405162461bcd60e51b815260040161092a90612605565b6001600160a01b03811660009081526012602052604090205460ff16610a2a5760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e481a5b98db1d591959602a1b604482015260640161092a565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6000610a58848484611744565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610add5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161092a565b610aea8533858403611620565b506001949350505050565b600c54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b63919061263a565b905090565b33610b7161108c565b6001600160a01b031614610b975760405162461bcd60e51b815260040161092a90612605565b600c5460405163031e79db60e41b81526001600160a01b03909116906331e79db090610960908490600401612519565b33610bd061108c565b6001600160a01b031614610bf65760405162461bcd60e51b815260040161092a90612605565b600f811115610c175760405162461bcd60e51b815260040161092a90612653565b600f819055600e54610c299082612694565b60105550565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108f2918590610c66908690612694565b611620565b33610c7461108c565b6001600160a01b031614610c9a5760405162461bcd60e51b815260040161092a90612605565b600f811115610cbb5760405162461bcd60e51b815260040161092a90612653565b600e819055600f54610c299082612694565b600c5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4291906126ac565b50565b600c54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b600c546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dc0908590600401612519565b602060405180830381865afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e01919061263a565b92915050565b600c546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e91906126ce565b925092509250326001600160a01b03166000151560008051602061293d83398151915285858589604051610eb594939291906126fc565b60405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b33610ee761108c565b6001600160a01b031614610f0d5760405162461bcd60e51b815260040161092a90612605565b6005546040516000916001600160a01b03169060008051602061295d833981519152908390a3600580546001600160a01b0319169055565b33610f4e61108c565b6001600160a01b031614610f745760405162461bcd60e51b815260040161092a90612605565b62030d408110158015610f8a57506207a1208111155b610ff35760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152730203230302c30303020616e64203530302c3030360641b606482015260840161092a565b60115481036110595760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b606482015260840161092a565b60115460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601155565b6005546001600160a01b031690565b606060048054610862906125cb565b600c5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111765760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161092a565b6111833385858403611620565b5060019392505050565b600c546040516302a2e74960e61b81526000916001600160a01b03169063a8b9d24090610dc0908590600401612519565b60006108f2338484611744565b600c5460405163fbcbc0f160e01b815260009182918291829182918291829182916001600160a01b039091169063fbcbc0f19061120c908c90600401612519565b61010060405180830381865afa15801561122a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124e9190612717565b97509750975097509750975097509750919395975091939597565b3361127261108c565b6001600160a01b0316146112985760405162461bcd60e51b815260040161092a90612605565b620f42406112a560025490565b6112af9190612781565b81116112ee5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b604482015260640161092a565b600d55565b600c5460408051632f842d8560e21b815290516000926001600160a01b03169163be10b6149160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b600c5460405163c705c56960e01b81526000916001600160a01b03169063c705c5699061136e908590600401612519565b602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0191906126ac565b336113b861108c565b6001600160a01b0316146113de5760405162461bcd60e51b815260040161092a90612605565b6001600160a01b03811660009081526012602052604090205460ff16156114455760405162461bcd60e51b815260206004820152601b60248201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604482015260640161092a565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b600c546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610b3f573d6000803e3d6000fd5b336114bc61108c565b6001600160a01b0316146114e25760405162461bcd60e51b815260040161092a90612605565b600c5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610960565b600c54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd9060240161120c565b3361155e61108c565b6001600160a01b0316146115845760405162461bcd60e51b815260040161092a90612605565b6001600160a01b0381166000908152601260205260409020805460ff191660011790556115b08161133d565b61161757600c5460405163031e79db60e41b81526001600160a01b03909116906331e79db0906115e4908490600401612519565b600060405180830381600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b505050505b610d4281611ad1565b6001600160a01b0383166116825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161092a565b6001600160a01b0382166116e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161092a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661176a5760405162461bcd60e51b815260040161092a906127a3565b6001600160a01b0382166117905760405162461bcd60e51b815260040161092a906127e8565b806000036117a9576117a483836000611baf565b505050565b60006117b430610ec3565b600d54909150811080159081906117d55750600b54600160a81b900460ff16155b80156117fa57506117e461108c565b6001600160a01b0316856001600160a01b031614155b801561181f575061180961108c565b6001600160a01b0316846001600160a01b031614155b801561182d57506000601054115b1561189a57600b805460ff60a81b1916600160a81b179055601054600f5460009190611859908561282b565b6118639190612781565b905061186e81611cf6565b600061187930610ec3565b9050801561188a5761188a81611d7d565b5050600b805460ff60a81b191690555b600b546001600160a01b03861660009081526012602052604090205460ff600160a81b9092048216159116806118e857506001600160a01b03851660009081526012602052604090205460ff165b156118f1575060005b80801561190057506000601054115b1561193c576000606460105486611917919061282b565b6119219190612781565b905061192d818661284a565b945061193a873083611baf565b505b611947868686611baf565b600c546001600160a01b031663e30443bc8761196281610ec3565b6040518363ffffffff1660e01b815260040161197f929190612861565b600060405180830381600087803b15801561199957600080fd5b505af19250505080156119aa575060015b50600c546001600160a01b031663e30443bc866119c681610ec3565b6040518363ffffffff1660e01b81526004016119e3929190612861565b600060405180830381600087803b1580156119fd57600080fd5b505af1925050508015611a0e575060015b50600b54600160a81b900460ff16611ac957601154600c546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015611a8d575060408051601f3d908101601f19168201909252611a8a918101906126ce565b60015b15611ac757604051329060019060008051602061293d83398151915290611abb908790879087908b906126fc565b60405180910390a35050505b505b505050505050565b33611ada61108c565b6001600160a01b031614611b005760405162461bcd60e51b815260040161092a90612605565b6001600160a01b038116611b655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092a565b6005546040516001600160a01b0380841692169060008051602061295d83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bd55760405162461bcd60e51b815260040161092a906127a3565b6001600160a01b038216611bfb5760405162461bcd60e51b815260040161092a906127e8565b6001600160a01b03831660009081526020819052604090205481811015611c735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161092a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611caa908490612694565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610eb591815260200190565b6000611d03600283612781565b90506000611d11828461284a565b905047611d1d83611f1d565b6000611d29824761284a565b9050611d35838261214b565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b611d878130612344565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611db8903090600401612519565b602060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df9919061263a565b600854600c5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb92611e35929116908690600401612861565b6020604051808303816000875af1158015611e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7891906126ac565b905080156117a457600c54604051632287d53b60e11b8152600481018490526001600160a01b039091169063450faa7690602401600060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3935001905060405180910390a1505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f5257611f5261287a565b6001600160a01b039283166020918202929092010152600a54825191169082906001908110611f8357611f8361287a565b6001600160a01b039283166020918202929092010152600654611fa99130911684611620565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fe2908590600090869030904290600401612890565b600060405180830381600087803b158015611ffc57600080fd5b505af192505050801561200d575060015b612147573d80801561203b576040519150601f19603f3d011682016040523d82523d6000602084013e612040565b606091505b50600654604051633b158ab160e11b81526001600160a01b039091169063762b15629061207a908690600090879030904290600401612890565b600060405180830381600087803b15801561209457600080fd5b505af19250505080156120a5575060015b6117a4573d8080156120d3576040519150601f19603f3d011682016040523d82523d6000602084013e6120d8565b606091505b5060065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612112908790600090889030904290600401612890565b600060405180830381600087803b15801561212c57600080fd5b505af1158015612140573d6000803e3d6000fd5b5050505050505b5050565b6006546121639030906001600160a01b031684611620565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d7199285926121a39230928992600092839216904290600401612901565b60606040518083038185885af1935050505080156121de575060408051601f3d908101601f191682019092526121db918101906126ce565b60015b61098e573d80801561220c576040519150601f19603f3d011682016040523d82523d6000602084013e612211565b606091505b50600654600b54604051637c8d9fb960e11b81526001600160a01b039283169263f91b3f729286926122529230928a92600092839216904290600401612901565b60606040518083038185885af19350505050801561228d575060408051601f3d908101601f1916820190925261228a918101906126ce565b60015b611ac9573d8080156122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b50600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d7199287926123019230928b92600092839216904290600401612901565b60606040518083038185885af115801561231f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ac791906126ce565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061237b5761237b61287a565b6001600160a01b039283166020918202929092010152600a548251911690829060019081106123ac576123ac61287a565b6001600160a01b0392831660209182029290920101526008548251911690829060029081106123dd576123dd61287a565b6001600160a01b0392831660209182029290920101526006546124039130911685611620565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061243c908690600090869088904290600401612890565b600060405180830381600087803b15801561245657600080fd5b505af1158015611ac7573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124975785810183015185820160400152820161247b565b818111156124a9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d4257600080fd5b600080604083850312156124e757600080fd5b82356124f2816124bf565b946020939093013593505050565b60006020828403121561251257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006020828403121561253f57600080fd5b813561254a816124bf565b9392505050565b60008060006060848603121561256657600080fd5b8335612571816124bf565b92506020840135612581816124bf565b929592945050506040919091013590565b600080604083850312156125a557600080fd5b82356125b0816124bf565b915060208301356125c0816124bf565b809150509250929050565b600181811c908216806125df57607f821691505b6020821081036125ff57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561264c57600080fd5b5051919050565b602080825260119082015270466565206f7574206f662072616e67652160781b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126a7576126a761267e565b500190565b6000602082840312156126be57600080fd5b8151801515811461254a57600080fd5b6000806000606084860312156126e357600080fd5b8351925060208401519150604084015190509250925092565b93845260208401929092526040830152606082015260800190565b600080600080600080600080610100898b03121561273457600080fd5b885161273f816124bf565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008261279e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156128455761284561267e565b500290565b60008282101561285c5761285c61267e565b500390565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128e05784516001600160a01b0316835293830193918301916001016128bb565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c0019056fec864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a988be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212201677a4f976cd3752d3418eb4186018ee9ac69bc50c43103475d1769b00ba998164736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000015901b9150c189cfb532c95100ea975c2f4ab34f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000591cf6942c422fa53e8d81c62a9692d7bea72f61000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000000000000000000000000000000000000000000d54657374204469762044796f720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035444440000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : tokenOwner (address): 0x15901B9150c189CFB532C95100Ea975c2F4Ab34F
Arg [1] : _rewardToken (address): 0x29219dd400f2Bf60E5a23d13Be72B486D4038894
Arg [2] : name_ (string): Test Div Dyor
Arg [3] : symbol_ (string): TDD
Arg [4] : decimals_ (uint8): 10
Arg [5] : _totalSupply (uint256): 100000000000000
Arg [6] : _tokenRewardsFee (uint8): 2
Arg [7] : _liquidityFee (uint8): 2
Arg [8] : _router (address): 0x591cf6942c422fA53E8D81c62a9692D7BeA72F61
Arg [9] : _basePair (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000015901b9150c189cfb532c95100ea975c2f4ab34f
Arg [1] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 00000000000000000000000000000000000000000000000000005af3107a4000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 000000000000000000000000591cf6942c422fa53e8d81c62a9692d7bea72f61
Arg [9] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [11] : 54657374204469762044796f7200000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [13] : 5444440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
23782:14145:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3021:194;;;;;;;;;;-1:-1:-1;3021:194:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;3021:194:0;1072:187:1;28729:178:0;;;;;;;;;;-1:-1:-1;28729:178:0;;;;;:::i;:::-;;:::i;:::-;;24336:24;;;;;;;;;;;;;;;;;;;1595:25:1;;;1583:2;1568:18;24336:24:0;1449:177:1;23832:41:0;;;;;;;;;;-1:-1:-1;23832:41:0;;;;-1:-1:-1;;;;;23832:41:0;;;;;;;;;;:::i;27218:191::-;;;;;;;;;;-1:-1:-1;27218:191:0;;;;;:::i;:::-;;:::i;2362:108::-;;;;;;;;;;-1:-1:-1;2450:12:0;;2362:108;;3223:529;;;;;;;;;;-1:-1:-1;3223:529:0;;;;;:::i;:::-;;:::i;24176:38::-;;;;;;;;;;-1:-1:-1;24176:38:0;;;;-1:-1:-1;;;;;24176:38:0;;;29108:141;;;;;;;;;;;;;:::i;26719:100::-;;;;;;;;;;-1:-1:-1;26802:9:0;;-1:-1:-1;;;26802:9:0;;;;26719:100;;2982:4:1;2970:17;;;2952:36;;2940:2;2925:18;26719:100:0;2810:184:1;27417:128:0;;;;;;;;;;-1:-1:-1;27417:128:0;;;;;:::i;:::-;;:::i;27553:220::-;;;;;;;;;;-1:-1:-1;27553:220:0;;;;;:::i;:::-;;:::i;3760:290::-;;;;;;;;;;-1:-1:-1;3760:290:0;;;;;:::i;:::-;;:::i;27781:217::-;;;;;;;;;;-1:-1:-1;27781:217:0;;;;;:::i;:::-;;:::i;23880:28::-;;;;;;;;;;-1:-1:-1;23880:28:0;;;;-1:-1:-1;;;;;23880:28:0;;;30949:103;;;;;;;;;;;;;:::i;24010:33::-;;;;;;;;;;-1:-1:-1;24010:33:0;;;;-1:-1:-1;;;24010:33:0;;;;;;23978:23;;;;;;;;;;-1:-1:-1;23978:23:0;;;;-1:-1:-1;;;;;23978:23:0;;;31198:142;;;;;;;;;;;;;:::i;29608:155::-;;;;;;;;;;-1:-1:-1;29608:155:0;;;;;:::i;:::-;;:::i;30531:410::-;;;;;;;;;;-1:-1:-1;30531:410:0;;;;;:::i;:::-;;:::i;2478:143::-;;;;;;;;;;-1:-1:-1;2478:143:0;;;;;:::i;:::-;;:::i;10867:148::-;;;;;;;;;;;;;:::i;28006:466::-;;;;;;;;;;-1:-1:-1;28006:466:0;;;;;:::i;:::-;;:::i;10644:87::-;;;;;;;;;;;;;:::i;2149:104::-;;;;;;;;;;;;;:::i;24302:27::-;;;;;;;;;;;;;;;;24369:40;;;;;;;;;;;;;;;;28612:109;;;;;;;;;;;;;:::i;4058:475::-;;;;;;;;;;-1:-1:-1;4058:475:0;;;;;:::i;:::-;;:::i;29432:168::-;;;;;;;;;;-1:-1:-1;29432:168:0;;;;;:::i;:::-;;:::i;2629:200::-;;;;;;;;;;-1:-1:-1;2629:200:0;;;;;:::i;:::-;;:::i;29771:367::-;;;;;;;;;;-1:-1:-1;29771:367:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3564:32:1;;;3546:51;;3628:2;3613:18;;3606:34;;;;3656:18;;;3649:34;;;;3714:2;3699:18;;3692:34;;;;3757:3;3742:19;;3735:35;3584:3;3786:19;;3779:35;3845:3;3830:19;;3823:35;3889:3;3874:19;;3867:35;3533:3;3518:19;29771:367:0;3207:701:1;26827:182:0;;;;;;;;;;-1:-1:-1;26827:182:0;;;;;:::i;:::-;;:::i;28915:185::-;;;;;;;;;;;;;:::i;29257:167::-;;;;;;;;;;-1:-1:-1;29257:167:0;;;;;:::i;:::-;;:::i;2837:176::-;;;;;;;;;;-1:-1:-1;2837:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2978:18:0;;;2951:7;2978:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2837:176;24418:51;;;;;;;;;;-1:-1:-1;24418:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24223:33;;;;;;;;;;;;;;;;27017:193;;;;;;;;;;-1:-1:-1;27017:193:0;;;;;:::i;:::-;;:::i;24265:30::-;;;;;;;;;;;;;;;;31060:130;;;;;;;;;;;;;:::i;28480:124::-;;;;;;;;;;-1:-1:-1;28480:124:0;;;;;:::i;:::-;;:::i;30146:377::-;;;;;;;;;;-1:-1:-1;30146:377:0;;;;;:::i;:::-;;:::i;37607:317::-;;;;;;;;;;-1:-1:-1;37607:317:0;;;;;:::i;:::-;;:::i;23917:26::-;;;;;;;;;;-1:-1:-1;23917:26:0;;;;-1:-1:-1;;;;;23917:26:0;;;23950:21;;;;;;;;;;-1:-1:-1;23950:21:0;;;;-1:-1:-1;;;;;23950:21:0;;;2041:100;2095:13;2128:5;2121:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:100;:::o;3021:194::-;3129:4;3146:39;1276:10;3169:7;3178:6;3146:8;:39::i;:::-;-1:-1:-1;3203:4:0;3021:194;;;;:::o;28729:178::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;;;;;;;;;28838:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;28838:61:0;;::::1;::::0;::::1;1595:25:1::0;;;-1:-1:-1;;;;;28838:15:0;;::::1;::::0;:53:::1;::::0;1568:18:1;;28838:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28729:178:::0;:::o;27218:191::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27294:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;27286:68;;;::::0;-1:-1:-1;;;27286:68:0;;5254:2:1;27286:68:0::1;::::0;::::1;5236:21:1::0;5293:2;5273:18;;;5266:30;-1:-1:-1;;;5312:18:1;;;5305:57;5379:18;;27286:68:0::1;5052:351:1::0;27286:68:0::1;-1:-1:-1::0;;;;;27365:28:0::1;27396:5;27365:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;27365:36:0::1;::::0;;27218:191::o;3223:529::-;3363:4;3380:36;3390:6;3398:9;3409:6;3380:9;:36::i;:::-;-1:-1:-1;;;;;3456:19:0;;3429:24;3456:19;;;:11;:19;;;;;;;;1276:10;3456:33;;;;;;;;3522:26;;;;3500:116;;;;-1:-1:-1;;;3500:116:0;;5610:2:1;3500:116:0;;;5592:21:1;5649:2;5629:18;;;5622:30;5688:34;5668:18;;;5661:62;-1:-1:-1;;;5739:18:1;;;5732:38;5787:19;;3500:116:0;5408:404:1;3500:116:0;3652:57;3661:6;1276:10;3702:6;3683:16;:25;3652:8;:57::i;:::-;-1:-1:-1;3740:4:0;;3223:529;-1:-1:-1;;;;3223:529:0:o;29108:141::-;29198:15;;:43;;;-1:-1:-1;;;29198:43:0;;;;29171:7;;-1:-1:-1;;;;;29198:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29191:50;;29108:141;:::o;27417:128::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;27492:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;27492:45:0;;-1:-1:-1;;;;;27492:15:0;;::::1;::::0;:36:::1;::::0;:45:::1;::::0;27529:7;;27492:45:::1;;;:::i;27553:220::-:0;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;27660:2:::1;27649:7;:13;;27625:59;;;;-1:-1:-1::0;;;27625:59:0::1;;;;;;;:::i;:::-;27695:12;:22:::0;;;27750:15:::1;::::0;27740:25:::1;::::0;27710:7;27740:25:::1;:::i;:::-;27728:9;:37:::0;-1:-1:-1;27553:220:0:o;3760:290::-;1276:10;3873:4;3962:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3962:34:0;;;;;;;;;;3873:4;;3890:130;;3940:7;;3962:47;;3999:10;;3962:47;:::i;:::-;3890:8;:130::i;27781:217::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;27885:2:::1;27874:7;:13;;27850:59;;;;-1:-1:-1::0;;;27850:59:0::1;;;;;;;:::i;:::-;27920:15;:25:::0;;;27978:12:::1;::::0;27968:22:::1;::::0;27938:7;27968:22:::1;:::i;30949:103::-:0;30986:15;;:58;;-1:-1:-1;;;30986:58:0;;31025:10;30986:58;;;6801:51:1;30986:15:0;6868:18:1;;;6861:50;-1:-1:-1;;;;;30986:15:0;;;;:30;;6774:18:1;;30986:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30949:103::o;31198:142::-;31291:15;;:41;;;-1:-1:-1;;;31291:41:0;;;;31264:7;;-1:-1:-1;;;;;31291:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;29608:155;29721:15;;:34;;-1:-1:-1;;;29721:34:0;;29694:7;;-1:-1:-1;;;;;29721:15:0;;:25;;:34;;29747:7;;29721:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29714:41;29608:155;-1:-1:-1;;29608:155:0:o;30531:410::-;30713:15;;:28;;-1:-1:-1;;;;;;30713:28:0;;;;;1595:25:1;;;30611:18:0;;;;;;-1:-1:-1;;;;;30713:15:0;;:23;;1568:18:1;;30713:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30596:145;;;;;;30913:9;-1:-1:-1;;;;;30757:176:0;30875:5;30757:176;;-1:-1:-1;;;;;;;;;;;30796:10:0;30821:6;30842:18;30895:3;30757:176;;;;;;;;;:::i;:::-;;;;;;;;30585:356;;;30531:410;:::o;2478:143::-;-1:-1:-1;;;;;2595:18:0;2568:7;2595:18;;;;;;;;;;;;2478:143::o;10867:148::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;10958:6:::1;::::0;10937:40:::1;::::0;10974:1:::1;::::0;-1:-1:-1;;;;;10958:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;10937:40:0;10974:1;;10937:40:::1;10988:6;:19:::0;;-1:-1:-1;;;;;;10988:19:0::1;::::0;;10867:148::o;28006:466::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;28118:6:::1;28106:8;:18;;:40;;;;;28140:6;28128:8;:18;;28106:40;28084:142;;;::::0;-1:-1:-1;;;28084:142:0;;8113:2:1;28084:142:0::1;::::0;::::1;8095:21:1::0;8152:2;8132:18;;;8125:30;8191:34;8171:18;;;8164:62;-1:-1:-1;;;8242:18:1;;;8235:50;8302:19;;28084:142:0::1;7911:416:1::0;28084:142:0::1;28271:16;;28259:8;:28:::0;28237:122:::1;;;::::0;-1:-1:-1;;;28237:122:0;;8534:2:1;28237:122:0::1;::::0;::::1;8516:21:1::0;8573:2;8553:18;;;8546:30;8612:34;8592:18;;;8585:62;-1:-1:-1;;;8663:18:1;;;8656:42;8715:19;;28237:122:0::1;8332:408:1::0;28237:122:0::1;28409:16;::::0;28375:51:::1;::::0;28399:8;;28375:51:::1;::::0;;;::::1;28437:16;:27:::0;28006:466::o;10644:87::-;10717:6;;-1:-1:-1;;;;;10717:6:0;;10644:87::o;2149:104::-;2205:13;2238:7;2231:14;;;;;:::i;28612:109::-;28686:15;;:27;;;-1:-1:-1;;;28686:27:0;;;;28659:7;;-1:-1:-1;;;;;28686:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;;;;;4058:475;1276:10;4176:4;4220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4220:34:0;;;;;;;;;;4287:35;;;;4265:122;;;;-1:-1:-1;;;4265:122:0;;8947:2:1;4265:122:0;;;8929:21:1;8986:2;8966:18;;;8959:30;9025:34;9005:18;;;8998:62;-1:-1:-1;;;9076:18:1;;;9069:35;9121:19;;4265:122:0;8745:401:1;4265:122:0;4423:67;1276:10;4446:7;4474:15;4455:16;:34;4423:8;:67::i;:::-;-1:-1:-1;4521:4:0;;4058:475;-1:-1:-1;;;4058:475:0:o;29432:168::-;29545:15;;:47;;-1:-1:-1;;;29545:47:0;;29518:7;;-1:-1:-1;;;;;29545:15:0;;:38;;:47;;29584:7;;29545:47;;;:::i;2629:200::-;2740:4;2757:42;1276:10;2781:9;2792:6;2757:9;:42::i;29771:367::-;30095:15;;:35;;-1:-1:-1;;;30095:35:0;;29901:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30095:15:0;;;;:26;;:35;;30122:7;;30095:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30088:42;;;;;;;;;;;;;;;;29771:367;;;;;;;;;:::o;26827:182::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;26937:7:::1;26921:13;2450:12:::0;;;2362:108;26921:13:::1;:23;;;;:::i;:::-;26912:6;:32;26904:59;;;::::0;-1:-1:-1;;;26904:59:0;;10261:2:1;26904:59:0::1;::::0;::::1;10243:21:1::0;10300:2;10280:18;;;10273:30;-1:-1:-1;;;10319:18:1;;;10312:44;10373:18;;26904:59:0::1;10059:338:1::0;26904:59:0::1;26974:18;:27:::0;26827:182::o;28915:185::-;29043:15;;:49;;;-1:-1:-1;;;29043:49:0;;;;29011:7;;-1:-1:-1;;;;;29043:15:0;;:47;;:49;;;;;;;;;;;;;;:15;:49;;;;;;;;;;;;;;29257:167;29368:15;;:48;;-1:-1:-1;;;29368:48:0;;29344:4;;-1:-1:-1;;;;;29368:15:0;;:39;;:48;;29408:7;;29368:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27017:193::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27096:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;27095:29;27087:69;;;::::0;-1:-1:-1;;;27087:69:0;;10604:2:1;27087:69:0::1;::::0;::::1;10586:21:1::0;10643:2;10623:18;;;10616:30;-1:-1:-1;;;10662:18:1;;;10655:57;10729:18;;27087:69:0::1;10402:351:1::0;27087:69:0::1;-1:-1:-1::0;;;;;27167:28:0::1;;::::0;;;:19:::1;:28;::::0;;;;:35;;-1:-1:-1;;27167:35:0::1;27198:4;27167:35;::::0;;27017:193::o;31060:130::-;31143:15;;:39;;;-1:-1:-1;;;31143:39:0;;;;31116:7;;-1:-1:-1;;;;;31143:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;28480:124;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;28554:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;28554:42:0;;::::1;::::0;::::1;1595:25:1::0;;;-1:-1:-1;;;;;28554:15:0;;::::1;::::0;:31:::1;::::0;1568:18:1;;28554:42:0::1;1449:177:1::0;30146:377:0;30475:15;;:40;;-1:-1:-1;;;30475:40:0;;;;;1595:25:1;;;30281:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30475:15:0;;;;:33;;1568:18:1;;30475:40:0;1449:177:1;37607:317:0;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37713:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;37713:36:0::1;37745:4;37713:36;::::0;;37765:33:::1;37733:8:::0;37765:23:::1;:33::i;:::-;37760:113;;37815:15;::::0;:46:::1;::::0;-1:-1:-1;;;37815:46:0;;-1:-1:-1;;;;;37815:15:0;;::::1;::::0;:36:::1;::::0;:46:::1;::::0;37852:8;;37815:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37760:113;37883:33;37907:8;37883:23;:33::i;6325:380::-:0;-1:-1:-1;;;;;6461:19:0;;6453:68;;;;-1:-1:-1;;;6453:68:0;;10960:2:1;6453:68:0;;;10942:21:1;10999:2;10979:18;;;10972:30;11038:34;11018:18;;;11011:62;-1:-1:-1;;;11089:18:1;;;11082:34;11133:19;;6453:68:0;10758:400:1;6453:68:0;-1:-1:-1;;;;;6540:21:0;;6532:68;;;;-1:-1:-1;;;6532:68:0;;11365:2:1;6532:68:0;;;11347:21:1;11404:2;11384:18;;;11377:30;11443:34;11423:18;;;11416:62;-1:-1:-1;;;11494:18:1;;;11487:32;11536:19;;6532:68:0;11163:398:1;6532:68:0;-1:-1:-1;;;;;6613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6665:32;;1595:25:1;;;6665:32:0;;1568:18:1;6665:32:0;;;;;;;6325:380;;;:::o;31348:2207::-;-1:-1:-1;;;;;31480:18:0;;31472:68;;;;-1:-1:-1;;;31472:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31559:16:0;;31551:64;;;;-1:-1:-1;;;31551:64:0;;;;;;;:::i;:::-;31632:6;31642:1;31632:11;31628:93;;31660:28;31676:4;31682:2;31686:1;31660:15;:28::i;:::-;31348:2207;;;:::o;31628:93::-;31731:28;31762:24;31780:4;31762:9;:24::i;:::-;31836:18;;31731:55;;-1:-1:-1;31812:42:0;;;;;;;31885:33;;-1:-1:-1;31910:8:0;;-1:-1:-1;;;31910:8:0;;;;31909:9;31885:33;:65;;;;;31943:7;:5;:7::i;:::-;-1:-1:-1;;;;;31935:15:0;:4;-1:-1:-1;;;;;31935:15:0;;;31885:65;:95;;;;;31973:7;:5;:7::i;:::-;-1:-1:-1;;;;;31967:13:0;:2;-1:-1:-1;;;;;31967:13:0;;;31885:95;:125;;;;;32009:1;31997:9;;:13;31885:125;31867:538;;;32037:8;:15;;-1:-1:-1;;;;32037:15:0;-1:-1:-1;;;32037:15:0;;;32147:9;;32114:12;;32037:15;;32147:9;32091:35;;:20;:35;:::i;:::-;32090:66;;;;:::i;:::-;32069:87;;32171:26;32186:10;32171:14;:26::i;:::-;32214:18;32235:24;32253:4;32235:9;:24::i;:::-;32214:45;-1:-1:-1;32278:14:0;;32274:87;;32313:32;32334:10;32313:20;:32::i;:::-;-1:-1:-1;;32377:8:0;:16;;-1:-1:-1;;;;32377:16:0;;;31867:538;32433:8;;-1:-1:-1;;;;;32458:25:0;;32417:12;32458:25;;;:19;:25;;;;;;32433:8;-1:-1:-1;;;32433:8:0;;;;;32432:9;;32458:25;;:52;;-1:-1:-1;;;;;;32487:23:0;;;;;;:19;:23;;;;;;;;32458:52;32454:100;;;-1:-1:-1;32537:5:0;32454:100;32570:7;:24;;;;;32593:1;32581:9;;:13;32570:24;32566:196;;;32611:12;32649:3;32636:9;;32627:6;:18;;;;:::i;:::-;32626:26;;;;:::i;:::-;32611:41;-1:-1:-1;32678:13:0;32611:41;32678:6;:13;:::i;:::-;32669:22;;32708:42;32724:4;32738;32745;32708:15;:42::i;:::-;32596:166;32566:196;32774:33;32790:4;32796:2;32800:6;32774:15;:33::i;:::-;32837:15;;-1:-1:-1;;;;;32837:15:0;:26;32872:4;32879:15;32872:4;32879:9;:15::i;:::-;32837:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32820:96;32930:15;;-1:-1:-1;;;;;32930:15:0;:26;32965:2;32970:13;32965:2;32970:9;:13::i;:::-;32930:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32926:70;33013:8;;-1:-1:-1;;;33013:8:0;;;;33008:540;;33052:16;;33089:15;;:28;;-1:-1:-1;;;;;;33089:28:0;;;;;1595:25:1;;;-1:-1:-1;;;;;33089:15:0;;;;:23;;1568:18:1;;33089:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;33089:28:0;;;;;;;;-1:-1:-1;;33089:28:0;;;;;;;;;;;;:::i;:::-;;;33085:452;;;33281:231;;33484:9;;33431:4;;-1:-1:-1;;;;;;;;;;;33281:231:0;;;33328:10;;33361:6;;33390:18;;33458:3;;33281:231;:::i;:::-;;;;;;;;33118:410;;;33085:452;33023:525;33008:540;31461:2094;;;31348:2207;;;:::o;11023:281::-;1276:10;10779:7;:5;:7::i;:::-;-1:-1:-1;;;;;10779:23:0;;10771:68;;;;-1:-1:-1;;;10771:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11126:22:0;::::1;11104:110;;;::::0;-1:-1:-1;;;11104:110:0;;13176:2:1;11104:110:0::1;::::0;::::1;13158:21:1::0;13215:2;13195:18;;;13188:30;13254:34;13234:18;;;13227:62;-1:-1:-1;;;13305:18:1;;;13298:36;13351:19;;11104:110:0::1;12974:402:1::0;11104:110:0::1;11251:6;::::0;11230:38:::1;::::0;-1:-1:-1;;;;;11230:38:0;;::::1;::::0;11251:6:::1;::::0;-1:-1:-1;;;;;;;;;;;11230:38:0;11251:6:::1;::::0;11230:38:::1;11279:6;:17:::0;;-1:-1:-1;;;;;;11279:17:0::1;-1:-1:-1::0;;;;;11279:17:0;;;::::1;::::0;;;::::1;::::0;;11023:281::o;4541:770::-;-1:-1:-1;;;;;4681:20:0;;4673:70;;;;-1:-1:-1;;;4673:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4762:23:0;;4754:71;;;;-1:-1:-1;;;4754:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4922:17:0;;4898:21;4922:17;;;;;;;;;;;4972:23;;;;4950:111;;;;-1:-1:-1;;;4950:111:0;;13583:2:1;4950:111:0;;;13565:21:1;13622:2;13602:18;;;13595:30;13661:34;13641:18;;;13634:62;-1:-1:-1;;;13712:18:1;;;13705:36;13758:19;;4950:111:0;13381:402:1;4950:111:0;-1:-1:-1;;;;;5097:17:0;;;:9;:17;;;;;;;;;;;5117:22;;;5097:42;;5161:20;;;;;;;;:30;;5133:6;;5097:9;5161:30;;5133:6;;5161:30;:::i;:::-;;;;;;;;5226:9;-1:-1:-1;;;;;5209:35:0;5218:6;-1:-1:-1;;;;;5209:35:0;;5237:6;5209:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;33563:401:0;33622:12;33637:10;33646:1;33637:6;:10;:::i;:::-;33622:25;-1:-1:-1;33658:17:0;33678:13;33622:25;33678:6;:13;:::i;:::-;33658:33;-1:-1:-1;33727:21:0;33759:22;33776:4;33759:16;:22::i;:::-;33792:18;33813:38;33837:14;33813:21;:38;:::i;:::-;33792:59;;33862:35;33875:9;33886:10;33862:12;:35::i;:::-;33913:43;;;13990:25:1;;;14046:2;14031:18;;14024:34;;;14074:18;;;14067:34;;;33913:43:0;;13978:2:1;13963:18;33913:43:0;;;;;;;33611:353;;;;33563:401;:::o;37090:474::-;37155:42;37175:6;37191:4;37155:19;:42::i;:::-;37235:11;;37228:44;;-1:-1:-1;;;37228:44:0;;37208:17;;-1:-1:-1;;;;;37235:11:0;;37228:29;;:44;;37266:4;;37228:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37305:11;;37349:15;;37298:102;;-1:-1:-1;;;37298:102:0;;37208:64;;-1:-1:-1;37283:12:0;;-1:-1:-1;;;;;37305:11:0;;;;37298:28;;:102;;37349:15;;;37208:64;;37298:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37283:117;;37417:7;37413:144;;;37441:15;;:52;;-1:-1:-1;;;37441:52:0;;;;;1595:25:1;;;-1:-1:-1;;;;;37441:15:0;;;;:41;;1568:18:1;;37441:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37513:32:0;;;14565:25:1;;;14621:2;14606:18;;14599:34;;;37513:32:0;;-1:-1:-1;14538:18:1;;-1:-1:-1;37513:32:0;;;;;;;37144:420;;37090:474;:::o;33972:1234::-;34062:16;;;34076:1;34062:16;;;;;;;;34038:21;;34062:16;;;;;;;;;;-1:-1:-1;34062:16:0;34038:40;;34107:4;34089;34094:1;34089:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34089:23:0;;;:7;;;;;;;;;:23;34133:8;;34123:7;;34133:8;;;34123:4;;34133:8;;34123:7;;;;;;:::i;:::-;-1:-1:-1;;;;;34123:18:0;;;:7;;;;;;;;;:18;34184:15;;34152:62;;34169:4;;34184:15;34202:11;34152:8;:62::i;:::-;34244:15;;:220;;-1:-1:-1;;;34244:220:0;;-1:-1:-1;;;;;34244:15:0;;;;:66;;:220;;34329:11;;34244:15;;34379:4;;34410;;34434:15;;34244:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34227:972;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34534:15:0;;:291;;-1:-1:-1;;;34534:291:0;;-1:-1:-1;;;;;34534:15:0;;;;:89;;:291;;34650:11;;34534:15;;34716:4;;34755;;34787:15;;34534:291;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34513:675;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34882:15:0;;:290;;-1:-1:-1;;;34882:290:0;;-1:-1:-1;;;;;34882:15:0;;;;:88;;:290;;34997:11;;34882:15;;35063:4;;35102;;35134:15;;34882:290;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34842:346;34477:722;34227:972;34027:1179;33972:1234;:::o;35761:1321::-;35941:15;;35909:62;;35926:4;;-1:-1:-1;;;;;35941:15:0;35959:11;35909:8;:62::i;:::-;36033:15;;36257:4;;36033:277;;-1:-1:-1;;;36033:277:0;;-1:-1:-1;;;;;36033:15:0;;;;:31;;36072:9;;36033:277;;36109:4;;36133:11;;36033:15;;;;36257:4;;36280:15;;36033:277;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36033:277:0;;;;;;;;-1:-1:-1;;36033:277:0;;;;;;;;;;;;:::i;:::-;;;36016:1059;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36380:15:0;;36625:4;;36380:306;;-1:-1:-1;;;36380:306:0;;-1:-1:-1;;;;;36380:15:0;;;;:32;;36420:9;;36380:306;;36461:4;;36489:11;;36380:15;;;;36625:4;;36652:15;;36380:306;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36380:306:0;;;;;;;;-1:-1:-1;;36380:306:0;;;;;;;;;;;;:::i;:::-;;;36359:705;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36743:15:0;;36987:4;;36743:305;;-1:-1:-1;;;36743:305:0;;-1:-1:-1;;;;;36743:15:0;;;;:31;;36782:9;;36743:305;;36823:4;;36851:11;;36743:15;;;;36987:4;;37014:15;;36743:305;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35214:539::-;35351:16;;;35365:1;35351:16;;;;;;;;;35327:21;;35351:16;;;;;;;;;;-1:-1:-1;35351:16:0;35327:40;;35396:4;35378;35383:1;35378:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35378:23:0;;;:7;;;;;;;;;:23;35422:8;;35412:7;;35422:8;;;35412:4;;35422:8;;35412:7;;;;;;:::i;:::-;-1:-1:-1;;;;;35412:18:0;;;:7;;;;;;;;;:18;35451:11;;35441:7;;35451:11;;;35441:4;;35446:1;;35441:7;;;;;;:::i;:::-;-1:-1:-1;;;;;35441:21:0;;;:7;;;;;;;;;:21;35507:15;;35475:62;;35492:4;;35507:15;35525:11;35475:8;:62::i;:::-;35550:15;;:195;;-1:-1:-1;;;35550:195:0;;-1:-1:-1;;;;;35550:15:0;;;;:69;;:195;;35634:11;;35550:15;;35676:4;;35695:9;;35719:15;;35550:195;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:597:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;1631:229::-;-1:-1:-1;;;;;1821:32:1;;;;1803:51;;1791:2;1776:18;;1631:229::o;1865:247::-;1924:6;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2032:9;2019:23;2051:31;2076:5;2051:31;:::i;:::-;2101:5;1865:247;-1:-1:-1;;;1865:247:1:o;2117:456::-;2194:6;2202;2210;2263:2;2251:9;2242:7;2238:23;2234:32;2231:52;;;2279:1;2276;2269:12;2231:52;2318:9;2305:23;2337:31;2362:5;2337:31;:::i;:::-;2387:5;-1:-1:-1;2444:2:1;2429:18;;2416:32;2457:33;2416:32;2457:33;:::i;:::-;2117:456;;2509:7;;-1:-1:-1;;;2563:2:1;2548:18;;;;2535:32;;2117:456::o;3913:388::-;3981:6;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;4097:9;4084:23;4116:31;4141:5;4116:31;:::i;:::-;4166:5;-1:-1:-1;4223:2:1;4208:18;;4195:32;4236:33;4195:32;4236:33;:::i;:::-;4288:7;4278:17;;;3913:388;;;;;:::o;4306:380::-;4385:1;4381:12;;;;4428;;;4449:61;;4503:4;4495:6;4491:17;4481:27;;4449:61;4556:2;4548:6;4545:14;4525:18;4522:38;4519:161;;4602:10;4597:3;4593:20;4590:1;4583:31;4637:4;4634:1;4627:15;4665:4;4662:1;4655:15;4519:161;;4306:380;;;:::o;4691:356::-;4893:2;4875:21;;;4912:18;;;4905:30;4971:34;4966:2;4951:18;;4944:62;5038:2;5023:18;;4691:356::o;5817:184::-;5887:6;5940:2;5928:9;5919:7;5915:23;5911:32;5908:52;;;5956:1;5953;5946:12;5908:52;-1:-1:-1;5979:16:1;;5817:184;-1:-1:-1;5817:184:1:o;6006:341::-;6208:2;6190:21;;;6247:2;6227:18;;;6220:30;-1:-1:-1;;;6281:2:1;6266:18;;6259:47;6338:2;6323:18;;6006:341::o;6352:127::-;6413:10;6408:3;6404:20;6401:1;6394:31;6444:4;6441:1;6434:15;6468:4;6465:1;6458:15;6484:128;6524:3;6555:1;6551:6;6548:1;6545:13;6542:39;;;6561:18;;:::i;:::-;-1:-1:-1;6597:9:1;;6484:128::o;6922:277::-;6989:6;7042:2;7030:9;7021:7;7017:23;7013:32;7010:52;;;7058:1;7055;7048:12;7010:52;7090:9;7084:16;7143:5;7136:13;7129:21;7122:5;7119:32;7109:60;;7165:1;7162;7155:12;7204:306;7292:6;7300;7308;7361:2;7349:9;7340:7;7336:23;7332:32;7329:52;;;7377:1;7374;7367:12;7329:52;7406:9;7400:16;7390:26;;7456:2;7445:9;7441:18;7435:25;7425:35;;7500:2;7489:9;7485:18;7479:25;7469:35;;7204:306;;;;;:::o;7515:391::-;7746:25;;;7802:2;7787:18;;7780:34;;;;7845:2;7830:18;;7823:34;7888:2;7873:18;;7866:34;7733:3;7718:19;;7515:391::o;9151:681::-;9282:6;9290;9298;9306;9314;9322;9330;9338;9391:3;9379:9;9370:7;9366:23;9362:33;9359:53;;;9408:1;9405;9398:12;9359:53;9440:9;9434:16;9459:31;9484:5;9459:31;:::i;:::-;9509:5;9499:15;;;9554:2;9543:9;9539:18;9533:25;9523:35;;9598:2;9587:9;9583:18;9577:25;9567:35;;9642:2;9631:9;9627:18;9621:25;9611:35;;9686:3;9675:9;9671:19;9665:26;9655:36;;9731:3;9720:9;9716:19;9710:26;9700:36;;9776:3;9765:9;9761:19;9755:26;9745:36;;9821:3;9810:9;9806:19;9800:26;9790:36;;9151:681;;;;;;;;;;;:::o;9837:217::-;9877:1;9903;9893:132;;9947:10;9942:3;9938:20;9935:1;9928:31;9982:4;9979:1;9972:15;10010:4;10007:1;10000:15;9893:132;-1:-1:-1;10039:9:1;;9837:217::o;11566:401::-;11768:2;11750:21;;;11807:2;11787:18;;;11780:30;11846:34;11841:2;11826:18;;11819:62;-1:-1:-1;;;11912:2:1;11897:18;;11890:35;11957:3;11942:19;;11566:401::o;11972:399::-;12174:2;12156:21;;;12213:2;12193:18;;;12186:30;12252:34;12247:2;12232:18;;12225:62;-1:-1:-1;;;12318:2:1;12303:18;;12296:33;12361:3;12346:19;;11972:399::o;12376:168::-;12416:7;12482:1;12478;12474:6;12470:14;12467:1;12464:21;12459:1;12452:9;12445:17;12441:45;12438:71;;;12489:18;;:::i;:::-;-1:-1:-1;12529:9:1;;12376:168::o;12549:125::-;12589:4;12617:1;12614;12611:8;12608:34;;;12622:18;;:::i;:::-;-1:-1:-1;12659:9:1;;12549:125::o;12679:290::-;-1:-1:-1;;;;;12887:32:1;;;;12869:51;;12951:2;12936:18;;12929:34;12857:2;12842:18;;12679:290::o;14776:127::-;14837:10;14832:3;14828:20;14825:1;14818:31;14868:4;14865:1;14858:15;14892:4;14889:1;14882:15;14908:980;15170:4;15218:3;15207:9;15203:19;15249:6;15238:9;15231:25;15275:2;15313:6;15308:2;15297:9;15293:18;15286:34;15356:3;15351:2;15340:9;15336:18;15329:31;15380:6;15415;15409:13;15446:6;15438;15431:22;15484:3;15473:9;15469:19;15462:26;;15523:2;15515:6;15511:15;15497:29;;15544:1;15554:195;15568:6;15565:1;15562:13;15554:195;;;15633:13;;-1:-1:-1;;;;;15629:39:1;15617:52;;15724:15;;;;15689:12;;;;15665:1;15583:9;15554:195;;;-1:-1:-1;;;;;;;15805:32:1;;;;15800:2;15785:18;;15778:60;-1:-1:-1;;;15869:3:1;15854:19;15847:35;15766:3;14908:980;-1:-1:-1;;;14908:980:1:o;15893:607::-;-1:-1:-1;;;;;16252:15:1;;;16234:34;;16299:2;16284:18;;16277:34;;;;16342:2;16327:18;;16320:34;;;;16385:2;16370:18;;16363:34;;;;16434:15;;;16428:3;16413:19;;16406:44;16214:3;16466:19;;16459:35;;;;16183:3;16168:19;;15893:607::o
Swarm Source
ipfs://6d51f9d7b16b209cba3e8e07289a4349099941531ce3f45237e5ae0c46eaf0a9
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.