Contract Address Details
0xa06b6f2a7e3028B4d55bBe6CFF85393c46324a68
- Token
- DogeGames (DGAMES)
- Creator
- 0x297754â90168b at 0xf3839fâ3fdee3
- Balance
- 3.004068867494550364 Doge
- Tokens
-
Fetching tokens...
- Transactions
- 160 Transactions
- Transfers
- 3,297 Transfers
- Gas Used
- 10,946,851
- Last Balance Update
- 26866824
Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- DogeGames
- Optimization enabled
- true
- Compiler version
- v0.8.7+commit.e28d00a7
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2022-08-15T18:09:13.657404Z
Constructor Arguments
000000000000000000000000a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c81
Arg [0] (address) : 0xa4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c81
Contract source code
/** DogeGames - Games for DogeChain! */ // SPDX-License-Identifier: NOLICENSE pragma solidity ^0.8.7; 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_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 { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WWDOGE() external pure returns (address); function addLiquidityWDOGE( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForWDOGESupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; } library Address{ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } } contract DogeGames is Context, IERC20, Ownable { using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping (address => bool) public allowedTransfer; mapping (address => bool) private _isBlacklisted; address[] private _excluded; bool public tradingEnabled; bool public swapEnabled; bool private swapping; //Anti Dump mapping(address => uint256) private _lastSell; bool public coolDownEnabled = true; uint256 public coolDownTime = 60 seconds; modifier antiBot(address account){ require(tradingEnabled || allowedTransfer[account], "Trading not enabled yet"); _; } IRouter public router; address public pair; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1e9 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public swapTokensAtAmount = 1_000_000 * 10**9; uint256 public maxBuyLimit = 4_000_000 * 10**9; uint256 public maxSellLimit = 4_000_000 * 10**9; uint256 public maxWalletLimit = 15_000_000 * 10**9; uint256 public genesis_block; address public marketingWallet = 0x1c5ac61DC1BFFf665e1799d4C0a9936330E1534B; address public operationWallet = 0x297754D7B47F4f956Aa44ecD9f6e2bcd6790168B; address public buybackWallet = 0x1c5ac61DC1BFFf665e1799d4C0a9936330E1534B; address public utilityWallet = 0xE48f0C990B8c55d114a9F1e235067dD3Ea9f0270; string private constant _name = "DogeGames"; string private constant _symbol = "DGAMES"; struct Taxes { uint256 rfi; uint256 marketing; uint256 liquidity; uint256 utility; uint256 operation; uint256 buyback; } Taxes public taxes = Taxes(1, 3, 4, 2, 0, 0); Taxes public sellTaxes = Taxes(1, 3, 4, 2, 0, 0); struct TotFeesPaidStruct{ uint256 rfi; uint256 marketing; uint256 liquidity; uint256 utility; uint256 operation; uint256 buyback; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rMarketing; uint256 rLiquidity; uint256 rUtility; uint256 rOperation; uint256 rBuyback; uint256 tTransferAmount; uint256 tRfi; uint256 tMarketing; uint256 tLiquidity; uint256 tUtility; uint256 tOperation; uint256 tBuyback; } event FeesChanged(); event UpdatedRouter(address oldRouter, address newRouter); modifier lockTheSwap { swapping = true; _; swapping = false; } constructor (address routerAddress) { IRouter _router = IRouter(routerAddress); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WWDOGE()); router = _router; pair = _pair; excludeFromReward(pair); _rOwned[owner()] = _rTotal; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[operationWallet] = true; _isExcludedFromFee[utilityWallet] = true; _isExcludedFromFee[buybackWallet] = true; allowedTransfer[address(this)] = true; allowedTransfer[owner()] = true; allowedTransfer[pair] = true; allowedTransfer[marketingWallet] = true; allowedTransfer[operationWallet] = true; allowedTransfer[utilityWallet] = true; allowedTransfer[buybackWallet] = true; emit Transfer(address(0), owner(), _tTotal); } //std ERC20: function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } //override ERC20: function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override antiBot(msg.sender) returns(bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override antiBot(sender) returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public antiBot(msg.sender) returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public antiBot(msg.sender) returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function transfer(address recipient, uint256 amount) public override antiBot(msg.sender) returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true, false); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true, false); return s.rTransferAmount; } } function setTradingStatus(bool state) external onlyOwner{ tradingEnabled = state; swapEnabled = state; if(state == true && genesis_block == 0) genesis_block = block.number; } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } //@dev kept original RFI naming -> "reward" as in reflection function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _utility, uint256 _operation, uint256 _buyback) public onlyOwner { taxes = Taxes(_rfi,_marketing,_liquidity,_utility,_operation,_buyback); emit FeesChanged(); } function setSellTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _utility, uint256 _operation, uint256 _buyback) public onlyOwner { sellTaxes = Taxes(_rfi,_marketing,_liquidity,_utility,_operation,_buyback); emit FeesChanged(); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi +=tRfi; } function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private { totFeesPaid.liquidity +=tLiquidity; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tLiquidity; } _rOwned[address(this)] +=rLiquidity; } function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private { totFeesPaid.marketing +=tMarketing; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tMarketing; } _rOwned[address(this)] +=rMarketing; } function _takeOperation(uint256 rOperation, uint256 tOperation) private { totFeesPaid.operation +=tOperation; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tOperation; } _rOwned[address(this)] +=rOperation; } function _takeBuyback(uint256 rBuyback, uint256 tBuyback) private { totFeesPaid.buyback +=tBuyback; if(_isExcluded[address(this)]) { _tOwned[address(this)]+=tBuyback; } _rOwned[address(this)] +=rBuyback; } function _takeUtility(uint256 rUtility, uint256 tUtility) private { totFeesPaid.utility +=tUtility; if(_isExcluded[utilityWallet]) { _tOwned[utilityWallet]+=tUtility; } _rOwned[utilityWallet] +=rUtility; } function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee, isSell); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity) = _getRValues1(to_return, tAmount, takeFee, _getRate()); (to_return.rUtility, to_return.rOperation, to_return.rBuyback) = _getRValues2(to_return, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } Taxes memory temp; if(isSell) temp = sellTaxes; else temp = taxes; s.tRfi = tAmount*temp.rfi/100; s.tMarketing = tAmount*temp.marketing/100; s.tLiquidity = tAmount*temp.liquidity/100; s.tUtility = tAmount*temp.utility/100; s.tOperation = tAmount*temp.operation/100; s.tBuyback = tAmount*temp.buyback/100; s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tUtility-s.tOperation-s.tBuyback; return s; } function _getRValues1(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rMarketing, uint256 rLiquidity){ rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount, 0,0,0); } rRfi = s.tRfi*currentRate; rMarketing = s.tMarketing*currentRate; rLiquidity = s.tLiquidity*currentRate; uint256 rUtility = s.tUtility*currentRate; uint256 rOperation = s.tOperation*currentRate; uint256 rBuyback = s.tBuyback*currentRate; rTransferAmount = rAmount-rRfi-rMarketing-rLiquidity-rUtility-rOperation-rBuyback; return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity); } function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rUtility,uint256 rOperation,uint256 rBuyback) { if(!takeFee) { return(0,0,0); } rUtility = s.tUtility*currentRate; rOperation = s.tOperation*currentRate; rBuyback = s.tBuyback*currentRate; return (rUtility,rOperation,rBuyback); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve(address owner, address spender, uint256 amount) private { 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 _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"You are trying to transfer more than your balance"); require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot"); if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ require(tradingEnabled, "Trading not active"); } if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && block.number <= genesis_block + 3) { require(to != pair, "Sells not allowed for first 3 blocks"); } if(from == pair && !_isExcludedFromFee[to] && !swapping){ require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit"); require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit"); } if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){ require(amount <= maxSellLimit, "You are exceeding maxSellLimit"); if(to != pair){ require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit"); } if(coolDownEnabled){ uint256 timePassed = block.timestamp - _lastSell[from]; require(timePassed >= coolDownTime, "Cooldown enabled"); _lastSell[from] = block.timestamp; } } if(balanceOf(from) - amount <= 10 * 10**decimals()) amount -= (10 * 10**decimals() + amount - balanceOf(from)); bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount; if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ if(to == pair) swapAndLiquify(swapTokensAtAmount, sellTaxes); else swapAndLiquify(swapTokensAtAmount, taxes); } bool takeFee = true; bool isSell = false; if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false; if(to == pair) isSell = true; _tokenTransfer(from, to, amount, takeFee, isSell); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell); if (_isExcluded[sender] ) { //from excluded _tOwned[sender] = _tOwned[sender]-tAmount; } if (_isExcluded[recipient]) { //to excluded _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount; } _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi); if(s.rLiquidity > 0 || s.tLiquidity > 0) { _takeLiquidity(s.rLiquidity,s.tLiquidity); emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tOperation + s.tBuyback); } if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing); if(s.rBuyback > 0 || s.tBuyback > 0) _takeBuyback(s.rBuyback, s.tBuyback); if(s.rOperation > 0 || s.tOperation > 0) _takeOperation(s.rOperation, s.tOperation); if(s.rUtility > 0 || s.tUtility > 0){ _takeUtility(s.rUtility, s.tUtility); emit Transfer(sender, utilityWallet, s.tUtility); } emit Transfer(sender, recipient, s.tTransferAmount); } function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{ uint256 denominator = (temp.liquidity + temp.marketing + temp.operation + temp.buyback) * 2; uint256 tokensToAddLiquidityWith = contractBalance * temp.liquidity / denominator; uint256 toSwap = contractBalance - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForWDOGE(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance= deltaBalance / (denominator - temp.liquidity); uint256 bnbToAddLiquidityWith = unitBalance * temp.liquidity; if(bnbToAddLiquidityWith > 0){ // Add liquidity to pancake addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith); } uint256 marketingAmt = unitBalance * 2 * temp.marketing; if(marketingAmt > 0){ payable(marketingWallet).sendValue(marketingAmt); } uint256 operationAmt = unitBalance * 2 * temp.operation; if(operationAmt > 0){ payable(operationWallet).sendValue(operationAmt); } uint256 buybackAmt = unitBalance * 2 * temp.buyback; if(buybackAmt > 0){ payable(buybackWallet).sendValue(buybackAmt); } } function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityWDOGE{value: bnbAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function swapTokensForWDOGE(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WWDOGE(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForWDOGESupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of WDOGE path, address(this), block.timestamp ); } function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{ for(uint256 i = 0; i < accounts.length; i++){ _isExcludedFromFee[accounts[i]] = state; } } function updateMarketingWallet(address newWallet) external onlyOwner{ marketingWallet = newWallet; } function updateOperationWallet(address newWallet) external onlyOwner{ operationWallet = newWallet; } function updateUtilityWallet(address newWallet) external onlyOwner{ utilityWallet = newWallet; } function updateBuybackWallet(address newWallet) external onlyOwner{ buybackWallet = newWallet; } function updateCooldown(bool state, uint256 time) external onlyOwner{ coolDownTime = time * 1 seconds; coolDownEnabled = state; } function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{ swapTokensAtAmount = amount * 10**_decimals; } function updateSwapEnabled(bool _enabled) external onlyOwner{ swapEnabled = _enabled; } function updateIsBlacklisted(address account, bool state) external onlyOwner{ _isBlacklisted[account] = state; } function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner{ for(uint256 i =0; i < accounts.length; i++){ _isBlacklisted[accounts[i]] = state; } } function updateAllowedTransfer(address account, bool state) external onlyOwner{ allowedTransfer[account] = state; } function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell) external onlyOwner{ maxBuyLimit = maxBuy * 10**decimals(); maxSellLimit = maxSell * 10**decimals(); } function updateMaxWalletlimit(uint256 amount) external onlyOwner{ maxWalletLimit = amount * 10**decimals(); } function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{ router = IRouter(newRouter); pair = newPair; } //Use this in case BNB are sent to the contract by mistake function rescueWDOGE(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient WDOGE balance"); payable(msg.sender).transfer(weiAmount); } function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } receive() external payable{ } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"routerAddress","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FeesChanged","inputs":[],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"UpdatedRouter","inputs":[{"type":"address","name":"oldRouter","internalType":"address","indexed":false},{"type":"address","name":"newRouter","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowedTransfer","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkExcludeFee","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkIsBlacklisted","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"buybackWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"coolDownEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"coolDownTime","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"genesis_block","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxBuyLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxSellLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWalletLimit","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"operationWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFromToken","inputs":[{"type":"uint256","name":"tAmount","internalType":"uint256"},{"type":"bool","name":"deductTransferRfi","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueAnyERC20Tokens","inputs":[{"type":"address","name":"_tokenAddr","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueWDOGE","inputs":[{"type":"uint256","name":"weiAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"rfi","internalType":"uint256"},{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"utility","internalType":"uint256"},{"type":"uint256","name":"operation","internalType":"uint256"},{"type":"uint256","name":"buyback","internalType":"uint256"}],"name":"sellTaxes","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSellTaxes","inputs":[{"type":"uint256","name":"_rfi","internalType":"uint256"},{"type":"uint256","name":"_marketing","internalType":"uint256"},{"type":"uint256","name":"_liquidity","internalType":"uint256"},{"type":"uint256","name":"_utility","internalType":"uint256"},{"type":"uint256","name":"_operation","internalType":"uint256"},{"type":"uint256","name":"_buyback","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTaxes","inputs":[{"type":"uint256","name":"_rfi","internalType":"uint256"},{"type":"uint256","name":"_marketing","internalType":"uint256"},{"type":"uint256","name":"_liquidity","internalType":"uint256"},{"type":"uint256","name":"_utility","internalType":"uint256"},{"type":"uint256","name":"_operation","internalType":"uint256"},{"type":"uint256","name":"_buyback","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTradingStatus","inputs":[{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapTokensAtAmount","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"rfi","internalType":"uint256"},{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"utility","internalType":"uint256"},{"type":"uint256","name":"operation","internalType":"uint256"},{"type":"uint256","name":"buyback","internalType":"uint256"}],"name":"taxes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenFromReflection","inputs":[{"type":"uint256","name":"rAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"rfi","internalType":"uint256"},{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"utility","internalType":"uint256"},{"type":"uint256","name":"operation","internalType":"uint256"},{"type":"uint256","name":"buyback","internalType":"uint256"}],"name":"totFeesPaid","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateAllowedTransfer","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateBuybackWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateCooldown","inputs":[{"type":"bool","name":"state","internalType":"bool"},{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateIsBlacklisted","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMarketingWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxTxLimit","inputs":[{"type":"uint256","name":"maxBuy","internalType":"uint256"},{"type":"uint256","name":"maxSell","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxWalletlimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateOperationWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateRouterAndPair","inputs":[{"type":"address","name":"newRouter","internalType":"address"},{"type":"address","name":"newPair","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSwapEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSwapTokensAtAmount","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateUtilityWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"utilityWallet","inputs":[]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x6080604052600b805460ff19166001179055603c600c55620000246009600a62000a4d565b6200003490633b9aca0062000b0e565b600f819055620000479060001962000b68565b620000559060001962000b30565b60105566038d7ea4c68000601155660e35fa931a0000601281905560135566354a6ba7a18000601455601680546001600160a01b0319908116731c5ac61dc1bfff665e1799d4c0a9936330e1534b90811790925560178054821673297754d7b47f4f956aa44ecd9f6e2bcd6790168b1790556018805482169092179091556019805490911673e48f0c990b8c55d114a9f1e235067dd3ea9f02701790556040805160c0808201835260018083526003602080850182905260048587018190526002606080880182905260006080808a0182905260a0998a01829052601a889055601b879055601c859055601d849055601e829055601f8290558a519889018b52878952888601879052998801849052908701829052978601889052949095018690529190915560215560229190915560235560248190556025553480156200019c57600080fd5b506040516200491538038062004915833981016040819052620001bf91620009c2565b620001ca3362000598565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020b57600080fd5b505afa15801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620009c2565b6001600160a01b031663c9c6539630846001600160a01b0316634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028f57600080fd5b505afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca9190620009c2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031357600080fd5b505af115801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e9190620009c2565b600d80546001600160a01b038086166001600160a01b031992831617909255600e805492841692909116821790559091506200038a90620005e8565b60105460016000620003a46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003f36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601654821681526004845282812080548616600190811790915560175483168252838220805487168217905560195483168252838220805487168217905560185490921681528281208054861683179055308152600693849052918220805490941681179093556200049b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e548216815260069093528183208054851660019081179091556016548216845282842080548616821790556017548216845282842080548616821790556019548216845282842080548616821790556018549091168352912080549092161790556200053f6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f546040516200058791815260200190565b60405180910390a350505062000bc1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620006485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620006b35760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200063f565b6001600160a01b0381166000908152600160205260409020541562000710576001600160a01b038116600090815260016020526040902054620006f69062000776565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000601054821115620007df5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016200063f565b6000620007eb62000800565b9050620007f98184620009ed565b9392505050565b600080806200080e62000826565b90925090506200081f8183620009ed565b9250505090565b601054600f546000918291825b6008548110156200098e5782600160006008848154811062000859576200085962000bab565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620008c85750816002600060088481548110620008a157620008a162000bab565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620008df57601054600f54945094505050509091565b6001600060088381548110620008f957620008f962000bab565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200092a908462000b30565b9250600260006008838154811062000946576200094662000bab565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000977908362000b30565b915080620009858162000b4a565b91505062000833565b50600f54601054620009a19190620009ed565b821015620009b957601054600f549350935050509091565b90939092509050565b600060208284031215620009d557600080fd5b81516001600160a01b0381168114620007f957600080fd5b600082620009ff57620009ff62000b95565b500490565b600181815b8085111562000a4557816000190482111562000a295762000a2962000b7f565b8085161562000a3757918102915b93841c939080029062000a09565b509250929050565b6000620007f960ff84168360008262000a695750600162000b08565b8162000a785750600062000b08565b816001811462000a91576002811462000a9c5762000abc565b600191505062000b08565b60ff84111562000ab05762000ab062000b7f565b50506001821b62000b08565b5060208310610133831016604e8410600b841016171562000ae1575081810a62000b08565b62000aed838362000a04565b806000190482111562000b045762000b0462000b7f565b0290505b92915050565b600081600019048311821515161562000b2b5762000b2b62000b7f565b500290565b60008282101562000b455762000b4562000b7f565b500390565b600060001982141562000b615762000b6162000b7f565b5060010190565b60008262000b7a5762000b7a62000b95565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613d448062000bd16000396000f3fe60806040526004361061039b5760003560e01c8063715018a6116101dc578063bf4cc52b11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610b54578063f66895a314610b74578063f6bc962414610b9f578063f887ea4014610bbf57600080fd5b8063e2f4560514610ae4578063e517f2b914610afa578063ea2f0b3714610b1a578063ee36e35914610b3a57600080fd5b8063d8672e51116100dc578063d8672e5114610a3e578063dd62ed3e14610a5e578063deab8aea14610aa4578063e042ad5814610ac457600080fd5b8063bf4cc52b146109e8578063d257b34f14610a08578063d2ce0db214610a2857600080fd5b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b3114610968578063a9059cbb14610988578063aacebbe3146109a8578063b5c57145146109c857600080fd5b806395d89b41146108ce57806397e67ddd146108fd5780639ba5e4d51461091d578063a457c2d71461094857600080fd5b806388f82020116101b657806388f82020146108375780638da5cb5b146108705780638e2839ff1461088e578063924de9b7146108ae57600080fd5b8063715018a614610792578063728f8eea146107a757806375f0a874146107ff57600080fd5b806340b28c2f116102c15780635b24ea5e1161025f57806366a88d961161022e57806366a88d96146107275780636aa5b37f1461073d5780636ddd17131461075357806370a082311461077257600080fd5b80635b24ea5e146106a15780635bdbb0f9146106c157806362695eae146106e1578063652e2f041461071157600080fd5b80634ada218b1161029b5780634ada218b1461060e57806352390c02146106285780635342acb41461064857806359759f611461068157600080fd5b806340b28c2f146105ae578063437823ec146105ce5780634549b039146105ee57600080fd5b806323b872dd116103395780633685d419116103085780633685d4191461052e578063379ba1d91461054e5780633938a5b41461056e578063395093511461058e57600080fd5b806323b872dd146104bc578063274a533c146104dc5780632d838119146104f2578063313ce5671461051257600080fd5b8063095ea7b311610375578063095ea7b31461042d5780630d65df9b1461045d57806313f97a8e1461047d57806318160ddd1461049d57600080fd5b806304d4c990146103a757806304dacd50146103c957806306fdde03146103e957600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046139a5565b610bdf565b005b3480156103d557600080fd5b506103c76103e43660046136d3565b610c8d565b3480156103f557600080fd5b50604080518082019091526009815268446f676547616d657360b81b60208201525b60405161042491906139e8565b60405180910390f35b34801561043957600080fd5b5061044d6104483660046137b5565b610cd9565b6040519015158152602001610424565b34801561046957600080fd5b506103c7610478366004613746565b610d38565b34801561048957600080fd5b506103c76104983660046137e1565b610dea565b3480156104a957600080fd5b50600f545b604051908152602001610424565b3480156104c857600080fd5b5061044d6104d7366004613746565b610e80565b3480156104e857600080fd5b506104ae60155481565b3480156104fe57600080fd5b506104ae61050d366004613917565b610f7a565b34801561051e57600080fd5b5060405160098152602001610424565b34801561053a57600080fd5b506103c76105493660046136d3565b610ffe565b34801561055a57600080fd5b506103c76105693660046138bf565b6111b5565b34801561057a57600080fd5b506103c76105893660046136d3565b61121b565b34801561059a57600080fd5b5061044d6105a93660046137b5565b611267565b3480156105ba57600080fd5b506103c76105c936600461370d565b6112e7565b3480156105da57600080fd5b506103c76105e93660046136d3565b61133f565b3480156105fa57600080fd5b506104ae610609366004613930565b61138d565b34801561061a57600080fd5b5060095461044d9060ff1681565b34801561063457600080fd5b506103c76106433660046136d3565b611421565b34801561065457600080fd5b5061044d6106633660046136d3565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561068d57600080fd5b506103c761069c366004613955565b611574565b3480156106ad57600080fd5b506103c76106bc366004613787565b6115d4565b3480156106cd57600080fd5b506103c76106dc3660046139a5565b611629565b3480156106ed57600080fd5b5061044d6106fc3660046136d3565b60066020526000908152604090205460ff1681565b34801561071d57600080fd5b506104ae60135481565b34801561073357600080fd5b506104ae60145481565b34801561074957600080fd5b506104ae60125481565b34801561075f57600080fd5b5060095461044d90610100900460ff1681565b34801561077e57600080fd5b506104ae61078d3660046136d3565b6116cf565b34801561079e57600080fd5b506103c761172e565b3480156107b357600080fd5b50601a54601b54601c54601d54601e54601f546107d295949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610424565b34801561080b57600080fd5b5060165461081f906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561084357600080fd5b5061044d6108523660046136d3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561087c57600080fd5b506000546001600160a01b031661081f565b34801561089a57600080fd5b506103c76108a93660046137e1565b611764565b3480156108ba57600080fd5b506103c76108c93660046138bf565b6117f5565b3480156108da57600080fd5b506040805180820190915260068152654447414d455360d01b6020820152610417565b34801561090957600080fd5b506103c7610918366004613917565b611839565b34801561092957600080fd5b50602654602754602854602954602a54602b546107d295949392919086565b34801561095457600080fd5b5061044d6109633660046137b5565b6118e0565b34801561097457600080fd5b50600e5461081f906001600160a01b031681565b34801561099457600080fd5b5061044d6109a33660046137b5565b6119c6565b3480156109b457600080fd5b506103c76109c33660046136d3565b611a1b565b3480156109d457600080fd5b506103c76109e3366004613787565b611a67565b3480156109f457600080fd5b5060195461081f906001600160a01b031681565b348015610a1457600080fd5b506103c7610a23366004613917565b611abc565b348015610a3457600080fd5b506104ae600c5481565b348015610a4a57600080fd5b506103c7610a59366004613917565b611b02565b348015610a6a57600080fd5b506104ae610a7936600461370d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ab057600080fd5b5060185461081f906001600160a01b031681565b348015610ad057600080fd5b5060175461081f906001600160a01b031681565b348015610af057600080fd5b506104ae60115481565b348015610b0657600080fd5b506103c7610b153660046138f9565b611b48565b348015610b2657600080fd5b506103c7610b353660046136d3565b611b94565b348015610b4657600080fd5b50600b5461044d9060ff1681565b348015610b6057600080fd5b506103c7610b6f3660046136d3565b611bdf565b348015610b8057600080fd5b506020546021546022546023546024546025546107d295949392919086565b348015610bab57600080fd5b506103c7610bba3660046136d3565b611c77565b348015610bcb57600080fd5b50600d5461081f906001600160a01b031681565b6000546001600160a01b03163314610c125760405162461bcd60e51b8152600401610c0990613a3d565b60405180910390fd5b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052601a879055601b869055601c859055601d849055601e839055601f829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610c0990613a3d565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090339060ff1680610d0757506001600160a01b03811660009081526006602052604090205460ff165b610d235760405162461bcd60e51b8152600401610c0990613a72565b610d2e338585611cc3565b5060019392505050565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610c0990613a3d565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de491906138dc565b50505050565b6000546001600160a01b03163314610e145760405162461bcd60e51b8152600401610c0990613a3d565b60005b8251811015610e7b578160076000858481518110610e3757610e37613cbf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e7381613c78565b915050610e17565b505050565b600954600090849060ff1680610eae57506001600160a01b03811660009081526006602052604090205460ff165b610eca5760405162461bcd60e51b8152600401610c0990613a72565b610ed5858585611de7565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610f5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c09565b610f6e8633610f698785613c61565b611cc3565b50600195945050505050565b6000601054821115610fe15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c09565b6000610feb612681565b9050610ff78184613b32565b9392505050565b6000546001600160a01b031633146110285760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03811660009081526005602052604090205460ff166110905760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c09565b60005b6008548110156111b157816001600160a01b0316600882815481106110ba576110ba613cbf565b6000918252602090912001546001600160a01b0316141561119f57600880546110e590600190613c61565b815481106110f5576110f5613cbf565b600091825260209091200154600880546001600160a01b03909216918390811061112157611121613cbf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061117957611179613ca9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111a981613c78565b915050611093565b5050565b6000546001600160a01b031633146111df5760405162461bcd60e51b8152600401610c0990613a3d565b6009805461ffff191661ff001983151590811691909117610100820217909155600114801561120e5750601554155b1561121857436015555b50565b6000546001600160a01b031633146112455760405162461bcd60e51b8152600401610c0990613a3d565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090339060ff168061129557506001600160a01b03811660009081526006602052604090205460ff165b6112b15760405162461bcd60e51b8152600401610c0990613a72565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d2e91908690610f69908790613b1a565b6000546001600160a01b031633146113115760405162461bcd60e51b8152600401610c0990613a3d565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146113695760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156113e15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c09565b816113ff5760006113f584600160006126a4565b51915061141b9050565b600061140e84600160006126a4565b60200151915061141b9050565b92915050565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03811660009081526005602052604090205460ff16156114b45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c09565b6001600160a01b0381166000908152600160205260409020541561150e576001600160a01b0381166000908152600160205260409020546114f490610f7a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610c0990613a3d565b6115aa6009600a613b97565b6115b49083613c42565b6012556115c36009600a613b97565b6115cd9082613c42565b6013555050565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116535760405162461bcd60e51b8152600401610c0990613a3d565b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a090910183905287905560218690556022859055602384905560248390556025829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6001600160a01b03811660009081526005602052604081205460ff161561170c57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461141b90610f7a565b6000546001600160a01b031633146117585760405162461bcd60e51b8152600401610c0990613a3d565b611762600061270a565b565b6000546001600160a01b0316331461178e5760405162461bcd60e51b8152600401610c0990613a3d565b60005b8251811015610e7b5781600460008584815181106117b1576117b1613cbf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117ed81613c78565b915050611791565b6000546001600160a01b0316331461181f5760405162461bcd60e51b8152600401610c0990613a3d565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146118635760405162461bcd60e51b8152600401610c0990613a3d565b804710156118b35760405162461bcd60e51b815260206004820152601a60248201527f696e73756666696369656e742057444f47452062616c616e63650000000000006044820152606401610c09565b604051339082156108fc029083906000818181858888f193505050501580156111b1573d6000803e3d6000fd5b600954600090339060ff168061190e57506001600160a01b03811660009081526006602052604090205460ff165b61192a5760405162461bcd60e51b8152600401610c0990613a72565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156119ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c09565b6119bb3386610f698785613c61565b506001949350505050565b600954600090339060ff16806119f457506001600160a01b03811660009081526006602052604090205460ff165b611a105760405162461bcd60e51b8152600401610c0990613a72565b610d2e338585611de7565b6000546001600160a01b03163314611a455760405162461bcd60e51b8152600401610c0990613a3d565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a915760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610c0990613a3d565b611af26009600a613b97565b611afc9082613c42565b60115550565b6000546001600160a01b03163314611b2c5760405162461bcd60e51b8152600401610c0990613a3d565b611b386009600a613b97565b611b429082613c42565b60145550565b6000546001600160a01b03163314611b725760405162461bcd60e51b8152600401610c0990613a3d565b611b7d816001613c42565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611c095760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b038116611c6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b6112188161270a565b6000546001600160a01b03163314611ca15760405162461bcd60e51b8152600401610c0990613a3d565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d255760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c09565b6001600160a01b038216611d865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c09565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c09565b6001600160a01b038216611ead5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c09565b60008111611f0f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c09565b611f18836116cf565b811115611f815760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c09565b6001600160a01b03831660009081526007602052604090205460ff16158015611fc357506001600160a01b03821660009081526007602052604090205460ff16155b611fff5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610c09565b6001600160a01b03831660009081526004602052604090205460ff1615801561204157506001600160a01b03821660009081526004602052604090205460ff16155b1561208d5760095460ff1661208d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c09565b6001600160a01b03831660009081526004602052604090205460ff161580156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e857506015546120e4906003613b1a565b4311155b1561215757600e546001600160a01b03838116911614156121575760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610c09565b600e546001600160a01b03848116911614801561218d57506001600160a01b03821660009081526004602052604090205460ff16155b80156121a2575060095462010000900460ff16155b1561225e576012548111156121f95760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c09565b60145481612206846116cf565b6122109190613b1a565b111561225e5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c09565b600e546001600160a01b0384811691161480159061229557506001600160a01b03821660009081526004602052604090205460ff16155b80156122ba57506001600160a01b03831660009081526004602052604090205460ff16155b80156122cf575060095462010000900460ff16155b15612432576013548111156123265760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c09565b600e546001600160a01b038381169116146123a05760145481612348846116cf565b6123529190613b1a565b11156123a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c09565b600b5460ff1615612432576001600160a01b0383166000908152600a60205260408120546123ce9042613c61565b9050600c548110156124155760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c09565b506001600160a01b0383166000908152600a602052604090204290555b61243e6009600a613b97565b61244990600a613c42565b81612453856116cf565b61245d9190613c61565b116124a45761246b836116cf565b816124786009600a613b97565b61248390600a613c42565b61248d9190613b1a565b6124979190613c61565b6124a19082613c61565b90505b60006011546124b2306116cf565b600954911115915062010000900460ff161580156124d75750600954610100900460ff165b80156124e05750805b80156124fa5750600e546001600160a01b03858116911614155b801561251f57506001600160a01b03841660009081526004602052604090205460ff16155b801561254457506001600160a01b03831660009081526004602052604090205460ff16155b156125f057600e546001600160a01b03848116911614156125aa576011546040805160c08101825260208054825260215490820152602254918101919091526023546060820152602454608082015260255460a08201526125a5919061275a565b6125f0565b6011546040805160c081018252601a548152601b546020820152601c5491810191909152601d546060820152601e546080820152601f5460a08201526125f0919061275a565b60095460019060009062010000900460ff168061262557506001600160a01b03861660009081526004602052604090205460ff165b8061264857506001600160a01b03851660009081526004602052604090205460ff165b1561265257600091505b600e546001600160a01b038681169116141561266c575060015b6126798686868585612900565b505050505050565b600080600061268e612c8d565b909250905061269d8183613b32565b9250505090565b6126ac613642565b6126b7848484612e10565b90506126cc8185856126c7612681565b613016565b608086015260608501526040840152602083015281526126f481846126ef612681565b613108565b60e084015260c083015260a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff000019166201000017905560a0810151608082015160208301516040840151600093929161278d91613b1a565b6127979190613b1a565b6127a19190613b1a565b6127ac906002613c42565b90506000818360400151856127c19190613c42565b6127cb9190613b32565b905060006127d98286613c61565b9050476127e582613163565b60006127f18247613c61565b905060008660400151866128059190613c61565b61280f9083613b32565b905060008760400151826128239190613c42565b905080156128355761283586826132c4565b6020880151600090612848846002613c42565b6128529190613c42565b9050801561287057601654612870906001600160a01b0316826133a8565b6080890151600090612883856002613c42565b61288d9190613c42565b905080156128ab576017546128ab906001600160a01b0316826133a8565b60a08a01516000906128be866002613c42565b6128c89190613c42565b905080156128e6576018546128e6906001600160a01b0316826133a8565b50506009805462ff00001916905550505050505050505050565b600061290d8484846126a4565b6001600160a01b03871660009081526005602052604090205490915060ff161561296f576001600160a01b038616600090815260026020526040902054612955908590613c61565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156129d3576101008101516001600160a01b0386166000908152600260205260409020546129b99190613b1a565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546129f89190613c61565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612a2f9190613b1a565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612a6257506000816101200151115b15612a7a57612a7a81604001518261012001516134c1565b600081608001511180612a9257506000816101600151115b15612b2757612aaa81608001518261016001516134f6565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101c00151846101a00151856101400151866101600151612b019190613b1a565b612b0b9190613b1a565b612b159190613b1a565b60405190815260200160405180910390a35b600081606001511180612b3f57506000816101400151115b15612b5757612b57816060015182610140015161356c565b60008160e001511180612b6f57506000816101c00151115b15612b8757612b878160e00151826101c00151613581565b60008160c001511180612b9f57506000816101a00151115b15612bb757612bb78160c00151826101a00151613596565b60008160a001511180612bcf57506000816101800151115b15612c3357612be78160a001518261018001516135ab565b6019546101808201516040519081526001600160a01b03918216918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612c7d91815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612ddf57826001600060088481548110612cbc57612cbc613cbf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d275750816002600060088481548110612d0057612d00613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3d57601054600f54945094505050509091565b6001600060088381548110612d5457612d54613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d839084613c61565b92506002600060088381548110612d9c57612d9c613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcb9083613c61565b915080612dd781613c78565b915050612c9a565b50600f54601054612df09190613b32565b821015612e0757601054600f549350935050509091565b90939092509050565b612e18613642565b82612e2a576101008101849052610ff7565b612e636040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8215612ea857506040805160c08101825260208054825260215490820152602254918101919091526023546060820152602454608082015260255460a0820152612ee3565b506040805160c081018252601a548152601b546020820152601c5491810191909152601d546060820152601e546080820152601f5460a08201525b8051606490612ef29087613c42565b612efc9190613b32565b6101208301526020810151606490612f149087613c42565b612f1e9190613b32565b6101408301526040810151606490612f369087613c42565b612f409190613b32565b6101608301526060810151606490612f589087613c42565b612f629190613b32565b6101808301526080810151606490612f7a9087613c42565b612f849190613b32565b6101a083015260a0810151606490612f9c9087613c42565b612fa69190613b32565b6101c083018190526101a0830151610180840151610160850151610140860151610120870151612fd6908b613c61565b612fe09190613c61565b612fea9190613c61565b612ff49190613c61565b612ffe9190613c61565b6130089190613c61565b610100830152509392505050565b6000808080806130268689613c42565b94508661303e575083925060009150819050806130fd565b8589610120015161304f9190613c42565b9250858961014001516130629190613c42565b9150858961016001516130759190613c42565b90506000868a610180015161308a9190613c42565b90506000878b6101a0015161309f9190613c42565b90506000888c6101c001516130b49190613c42565b905080828486886130c58b8e613c61565b6130cf9190613c61565b6130d99190613c61565b6130e39190613c61565b6130ed9190613c61565b6130f79190613c61565b96505050505b945094509450945094565b6000806000846131205750600091508190508061315a565b838661018001516131319190613c42565b925083866101a001516131449190613c42565b915083866101c001516131579190613c42565b90505b93509350939050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061319857613198613cbf565b6001600160a01b03928316602091820292909201810191909152600d54604080516302768aa360e51b815290519190931692634ed15460926004808301939192829003018186803b1580156131ec57600080fd5b505afa158015613200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322491906136f0565b8160018151811061323757613237613cbf565b6001600160a01b039283166020918202929092010152600d5461325d9130911684611cc3565b600d5460405163b43d9bbb60e01b81526001600160a01b039091169063b43d9bbb90613296908590600090869030904290600401613aa9565b600060405180830381600087803b1580156132b057600080fd5b505af1158015612679573d6000803e3d6000fd5b600d546132dc9030906001600160a01b031684611cc3565b600d546001600160a01b031663e6529ab48230856000806133056000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561336857600080fd5b505af115801561337c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a19190613977565b5050505050565b804710156133f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613445576040519150601f19603f3d011682016040523d82523d6000602084013e61344a565b606091505b5050905080610e7b5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c09565b81601060008282546134d39190613c61565b9091555050602680548291906000906134ed908490613b1a565b90915550505050565b806026600201600082825461350b9190613b1a565b90915550503060009081526005602052604090205460ff161561354d573060009081526002602052604081208054839290613547908490613b1a565b90915550505b30600090815260016020526040812080548492906134ed908490613b1a565b806026600101600082825461350b9190613b1a565b806026600501600082825461350b9190613b1a565b806026600401600082825461350b9190613b1a565b80602660030160008282546135c09190613b1a565b90915550506019546001600160a01b031660009081526005602052604090205460ff1615613618576019546001600160a01b031660009081526002602052604081208054839290613612908490613b1a565b90915550505b6019546001600160a01b0316600090815260016020526040812080548492906134ed908490613b1a565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356136c381613ceb565b919050565b80356136c381613d00565b6000602082840312156136e557600080fd5b8135610ff781613ceb565b60006020828403121561370257600080fd5b8151610ff781613ceb565b6000806040838503121561372057600080fd5b823561372b81613ceb565b9150602083013561373b81613ceb565b809150509250929050565b60008060006060848603121561375b57600080fd5b833561376681613ceb565b9250602084013561377681613ceb565b929592945050506040919091013590565b6000806040838503121561379a57600080fd5b82356137a581613ceb565b9150602083013561373b81613d00565b600080604083850312156137c857600080fd5b82356137d381613ceb565b946020939093013593505050565b600080604083850312156137f457600080fd5b823567ffffffffffffffff8082111561380c57600080fd5b818501915085601f83011261382057600080fd5b813560208282111561383457613834613cd5565b8160051b604051601f19603f8301168101818110868211171561385957613859613cd5565b604052838152828101945085830182870184018b101561387857600080fd5b600096505b848710156138a25761388e816136b8565b86526001969096019594830194830161387d565b5096506138b290508782016136c8565b9450505050509250929050565b6000602082840312156138d157600080fd5b8135610ff781613d00565b6000602082840312156138ee57600080fd5b8151610ff781613d00565b6000806040838503121561390c57600080fd5b82356137d381613d00565b60006020828403121561392957600080fd5b5035919050565b6000806040838503121561394357600080fd5b82359150602083013561373b81613d00565b6000806040838503121561396857600080fd5b50508035926020909101359150565b60008060006060848603121561398c57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156139be57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015613a15578581018301518582016040015282016139f9565b81811115613a27576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613af95784516001600160a01b031683529383019391830191600101613ad4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613b2d57613b2d613c93565b500190565b600082613b4f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613b8f578160001904821115613b7557613b75613c93565b80851615613b8257918102915b93841c9390800290613b59565b509250929050565b6000610ff760ff841683600082613bb05750600161141b565b81613bbd5750600061141b565b8160018114613bd35760028114613bdd57613bf9565b600191505061141b565b60ff841115613bee57613bee613c93565b50506001821b61141b565b5060208310610133831016604e8410600b8410161715613c1c575081810a61141b565b613c268383613b54565b8060001904821115613c3a57613c3a613c93565b029392505050565b6000816000190483118215151615613c5c57613c5c613c93565b500290565b600082821015613c7357613c73613c93565b500390565b6000600019821415613c8c57613c8c613c93565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461121857600080fd5b801515811461121857600080fdfea2646970667358221220871807ab5aad565d64a8180721d193aa416c34c4d33ea2801edfed48e8f254af64736f6c63430008070033000000000000000000000000a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c81
Deployed ByteCode
0x60806040526004361061039b5760003560e01c8063715018a6116101dc578063bf4cc52b11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610b54578063f66895a314610b74578063f6bc962414610b9f578063f887ea4014610bbf57600080fd5b8063e2f4560514610ae4578063e517f2b914610afa578063ea2f0b3714610b1a578063ee36e35914610b3a57600080fd5b8063d8672e51116100dc578063d8672e5114610a3e578063dd62ed3e14610a5e578063deab8aea14610aa4578063e042ad5814610ac457600080fd5b8063bf4cc52b146109e8578063d257b34f14610a08578063d2ce0db214610a2857600080fd5b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b3114610968578063a9059cbb14610988578063aacebbe3146109a8578063b5c57145146109c857600080fd5b806395d89b41146108ce57806397e67ddd146108fd5780639ba5e4d51461091d578063a457c2d71461094857600080fd5b806388f82020116101b657806388f82020146108375780638da5cb5b146108705780638e2839ff1461088e578063924de9b7146108ae57600080fd5b8063715018a614610792578063728f8eea146107a757806375f0a874146107ff57600080fd5b806340b28c2f116102c15780635b24ea5e1161025f57806366a88d961161022e57806366a88d96146107275780636aa5b37f1461073d5780636ddd17131461075357806370a082311461077257600080fd5b80635b24ea5e146106a15780635bdbb0f9146106c157806362695eae146106e1578063652e2f041461071157600080fd5b80634ada218b1161029b5780634ada218b1461060e57806352390c02146106285780635342acb41461064857806359759f611461068157600080fd5b806340b28c2f146105ae578063437823ec146105ce5780634549b039146105ee57600080fd5b806323b872dd116103395780633685d419116103085780633685d4191461052e578063379ba1d91461054e5780633938a5b41461056e578063395093511461058e57600080fd5b806323b872dd146104bc578063274a533c146104dc5780632d838119146104f2578063313ce5671461051257600080fd5b8063095ea7b311610375578063095ea7b31461042d5780630d65df9b1461045d57806313f97a8e1461047d57806318160ddd1461049d57600080fd5b806304d4c990146103a757806304dacd50146103c957806306fdde03146103e957600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046139a5565b610bdf565b005b3480156103d557600080fd5b506103c76103e43660046136d3565b610c8d565b3480156103f557600080fd5b50604080518082019091526009815268446f676547616d657360b81b60208201525b60405161042491906139e8565b60405180910390f35b34801561043957600080fd5b5061044d6104483660046137b5565b610cd9565b6040519015158152602001610424565b34801561046957600080fd5b506103c7610478366004613746565b610d38565b34801561048957600080fd5b506103c76104983660046137e1565b610dea565b3480156104a957600080fd5b50600f545b604051908152602001610424565b3480156104c857600080fd5b5061044d6104d7366004613746565b610e80565b3480156104e857600080fd5b506104ae60155481565b3480156104fe57600080fd5b506104ae61050d366004613917565b610f7a565b34801561051e57600080fd5b5060405160098152602001610424565b34801561053a57600080fd5b506103c76105493660046136d3565b610ffe565b34801561055a57600080fd5b506103c76105693660046138bf565b6111b5565b34801561057a57600080fd5b506103c76105893660046136d3565b61121b565b34801561059a57600080fd5b5061044d6105a93660046137b5565b611267565b3480156105ba57600080fd5b506103c76105c936600461370d565b6112e7565b3480156105da57600080fd5b506103c76105e93660046136d3565b61133f565b3480156105fa57600080fd5b506104ae610609366004613930565b61138d565b34801561061a57600080fd5b5060095461044d9060ff1681565b34801561063457600080fd5b506103c76106433660046136d3565b611421565b34801561065457600080fd5b5061044d6106633660046136d3565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561068d57600080fd5b506103c761069c366004613955565b611574565b3480156106ad57600080fd5b506103c76106bc366004613787565b6115d4565b3480156106cd57600080fd5b506103c76106dc3660046139a5565b611629565b3480156106ed57600080fd5b5061044d6106fc3660046136d3565b60066020526000908152604090205460ff1681565b34801561071d57600080fd5b506104ae60135481565b34801561073357600080fd5b506104ae60145481565b34801561074957600080fd5b506104ae60125481565b34801561075f57600080fd5b5060095461044d90610100900460ff1681565b34801561077e57600080fd5b506104ae61078d3660046136d3565b6116cf565b34801561079e57600080fd5b506103c761172e565b3480156107b357600080fd5b50601a54601b54601c54601d54601e54601f546107d295949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610424565b34801561080b57600080fd5b5060165461081f906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561084357600080fd5b5061044d6108523660046136d3565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561087c57600080fd5b506000546001600160a01b031661081f565b34801561089a57600080fd5b506103c76108a93660046137e1565b611764565b3480156108ba57600080fd5b506103c76108c93660046138bf565b6117f5565b3480156108da57600080fd5b506040805180820190915260068152654447414d455360d01b6020820152610417565b34801561090957600080fd5b506103c7610918366004613917565b611839565b34801561092957600080fd5b50602654602754602854602954602a54602b546107d295949392919086565b34801561095457600080fd5b5061044d6109633660046137b5565b6118e0565b34801561097457600080fd5b50600e5461081f906001600160a01b031681565b34801561099457600080fd5b5061044d6109a33660046137b5565b6119c6565b3480156109b457600080fd5b506103c76109c33660046136d3565b611a1b565b3480156109d457600080fd5b506103c76109e3366004613787565b611a67565b3480156109f457600080fd5b5060195461081f906001600160a01b031681565b348015610a1457600080fd5b506103c7610a23366004613917565b611abc565b348015610a3457600080fd5b506104ae600c5481565b348015610a4a57600080fd5b506103c7610a59366004613917565b611b02565b348015610a6a57600080fd5b506104ae610a7936600461370d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610ab057600080fd5b5060185461081f906001600160a01b031681565b348015610ad057600080fd5b5060175461081f906001600160a01b031681565b348015610af057600080fd5b506104ae60115481565b348015610b0657600080fd5b506103c7610b153660046138f9565b611b48565b348015610b2657600080fd5b506103c7610b353660046136d3565b611b94565b348015610b4657600080fd5b50600b5461044d9060ff1681565b348015610b6057600080fd5b506103c7610b6f3660046136d3565b611bdf565b348015610b8057600080fd5b506020546021546022546023546024546025546107d295949392919086565b348015610bab57600080fd5b506103c7610bba3660046136d3565b611c77565b348015610bcb57600080fd5b50600d5461081f906001600160a01b031681565b6000546001600160a01b03163314610c125760405162461bcd60e51b8152600401610c0990613a3d565b60405180910390fd5b6040805160c08101825287815260208101879052808201869052606081018590526080810184905260a001829052601a879055601b869055601c859055601d849055601e839055601f829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6000546001600160a01b03163314610cb75760405162461bcd60e51b8152600401610c0990613a3d565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090339060ff1680610d0757506001600160a01b03811660009081526006602052604090205460ff165b610d235760405162461bcd60e51b8152600401610c0990613a72565b610d2e338585611cc3565b5060019392505050565b6000546001600160a01b03163314610d625760405162461bcd60e51b8152600401610c0990613a3d565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de491906138dc565b50505050565b6000546001600160a01b03163314610e145760405162461bcd60e51b8152600401610c0990613a3d565b60005b8251811015610e7b578160076000858481518110610e3757610e37613cbf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e7381613c78565b915050610e17565b505050565b600954600090849060ff1680610eae57506001600160a01b03811660009081526006602052604090205460ff165b610eca5760405162461bcd60e51b8152600401610c0990613a72565b610ed5858585611de7565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610f5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c09565b610f6e8633610f698785613c61565b611cc3565b50600195945050505050565b6000601054821115610fe15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c09565b6000610feb612681565b9050610ff78184613b32565b9392505050565b6000546001600160a01b031633146110285760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03811660009081526005602052604090205460ff166110905760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c09565b60005b6008548110156111b157816001600160a01b0316600882815481106110ba576110ba613cbf565b6000918252602090912001546001600160a01b0316141561119f57600880546110e590600190613c61565b815481106110f5576110f5613cbf565b600091825260209091200154600880546001600160a01b03909216918390811061112157611121613cbf565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061117957611179613ca9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111a981613c78565b915050611093565b5050565b6000546001600160a01b031633146111df5760405162461bcd60e51b8152600401610c0990613a3d565b6009805461ffff191661ff001983151590811691909117610100820217909155600114801561120e5750601554155b1561121857436015555b50565b6000546001600160a01b031633146112455760405162461bcd60e51b8152600401610c0990613a3d565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090339060ff168061129557506001600160a01b03811660009081526006602052604090205460ff165b6112b15760405162461bcd60e51b8152600401610c0990613a72565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610d2e91908690610f69908790613b1a565b6000546001600160a01b031633146113115760405162461bcd60e51b8152600401610c0990613a3d565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146113695760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156113e15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c09565b816113ff5760006113f584600160006126a4565b51915061141b9050565b600061140e84600160006126a4565b60200151915061141b9050565b92915050565b6000546001600160a01b0316331461144b5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03811660009081526005602052604090205460ff16156114b45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c09565b6001600160a01b0381166000908152600160205260409020541561150e576001600160a01b0381166000908152600160205260409020546114f490610f7a565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b0316331461159e5760405162461bcd60e51b8152600401610c0990613a3d565b6115aa6009600a613b97565b6115b49083613c42565b6012556115c36009600a613b97565b6115cd9082613c42565b6013555050565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116535760405162461bcd60e51b8152600401610c0990613a3d565b6040805160c0810182528781526020808201889052818301879052606082018690526080820185905260a090910183905287905560218690556022859055602384905560248390556025829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a1505050505050565b6001600160a01b03811660009081526005602052604081205460ff161561170c57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461141b90610f7a565b6000546001600160a01b031633146117585760405162461bcd60e51b8152600401610c0990613a3d565b611762600061270a565b565b6000546001600160a01b0316331461178e5760405162461bcd60e51b8152600401610c0990613a3d565b60005b8251811015610e7b5781600460008584815181106117b1576117b1613cbf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117ed81613c78565b915050611791565b6000546001600160a01b0316331461181f5760405162461bcd60e51b8152600401610c0990613a3d565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146118635760405162461bcd60e51b8152600401610c0990613a3d565b804710156118b35760405162461bcd60e51b815260206004820152601a60248201527f696e73756666696369656e742057444f47452062616c616e63650000000000006044820152606401610c09565b604051339082156108fc029083906000818181858888f193505050501580156111b1573d6000803e3d6000fd5b600954600090339060ff168061190e57506001600160a01b03811660009081526006602052604090205460ff165b61192a5760405162461bcd60e51b8152600401610c0990613a72565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156119ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c09565b6119bb3386610f698785613c61565b506001949350505050565b600954600090339060ff16806119f457506001600160a01b03811660009081526006602052604090205460ff165b611a105760405162461bcd60e51b8152600401610c0990613a72565b610d2e338585611de7565b6000546001600160a01b03163314611a455760405162461bcd60e51b8152600401610c0990613a3d565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a915760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ae65760405162461bcd60e51b8152600401610c0990613a3d565b611af26009600a613b97565b611afc9082613c42565b60115550565b6000546001600160a01b03163314611b2c5760405162461bcd60e51b8152600401610c0990613a3d565b611b386009600a613b97565b611b429082613c42565b60145550565b6000546001600160a01b03163314611b725760405162461bcd60e51b8152600401610c0990613a3d565b611b7d816001613c42565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611bbe5760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611c095760405162461bcd60e51b8152600401610c0990613a3d565b6001600160a01b038116611c6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b6112188161270a565b6000546001600160a01b03163314611ca15760405162461bcd60e51b8152600401610c0990613a3d565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611d255760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c09565b6001600160a01b038216611d865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c09565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e4b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c09565b6001600160a01b038216611ead5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c09565b60008111611f0f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c09565b611f18836116cf565b811115611f815760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c09565b6001600160a01b03831660009081526007602052604090205460ff16158015611fc357506001600160a01b03821660009081526007602052604090205460ff16155b611fff5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610c09565b6001600160a01b03831660009081526004602052604090205460ff1615801561204157506001600160a01b03821660009081526004602052604090205460ff16155b1561208d5760095460ff1661208d5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610c09565b6001600160a01b03831660009081526004602052604090205460ff161580156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e857506015546120e4906003613b1a565b4311155b1561215757600e546001600160a01b03838116911614156121575760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610c09565b600e546001600160a01b03848116911614801561218d57506001600160a01b03821660009081526004602052604090205460ff16155b80156121a2575060095462010000900460ff16155b1561225e576012548111156121f95760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610c09565b60145481612206846116cf565b6122109190613b1a565b111561225e5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c09565b600e546001600160a01b0384811691161480159061229557506001600160a01b03821660009081526004602052604090205460ff16155b80156122ba57506001600160a01b03831660009081526004602052604090205460ff16155b80156122cf575060095462010000900460ff16155b15612432576013548111156123265760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610c09565b600e546001600160a01b038381169116146123a05760145481612348846116cf565b6123529190613b1a565b11156123a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610c09565b600b5460ff1615612432576001600160a01b0383166000908152600a60205260408120546123ce9042613c61565b9050600c548110156124155760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610c09565b506001600160a01b0383166000908152600a602052604090204290555b61243e6009600a613b97565b61244990600a613c42565b81612453856116cf565b61245d9190613c61565b116124a45761246b836116cf565b816124786009600a613b97565b61248390600a613c42565b61248d9190613b1a565b6124979190613c61565b6124a19082613c61565b90505b60006011546124b2306116cf565b600954911115915062010000900460ff161580156124d75750600954610100900460ff165b80156124e05750805b80156124fa5750600e546001600160a01b03858116911614155b801561251f57506001600160a01b03841660009081526004602052604090205460ff16155b801561254457506001600160a01b03831660009081526004602052604090205460ff16155b156125f057600e546001600160a01b03848116911614156125aa576011546040805160c08101825260208054825260215490820152602254918101919091526023546060820152602454608082015260255460a08201526125a5919061275a565b6125f0565b6011546040805160c081018252601a548152601b546020820152601c5491810191909152601d546060820152601e546080820152601f5460a08201526125f0919061275a565b60095460019060009062010000900460ff168061262557506001600160a01b03861660009081526004602052604090205460ff165b8061264857506001600160a01b03851660009081526004602052604090205460ff165b1561265257600091505b600e546001600160a01b038681169116141561266c575060015b6126798686868585612900565b505050505050565b600080600061268e612c8d565b909250905061269d8183613b32565b9250505090565b6126ac613642565b6126b7848484612e10565b90506126cc8185856126c7612681565b613016565b608086015260608501526040840152602083015281526126f481846126ef612681565b613108565b60e084015260c083015260a08201529392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff000019166201000017905560a0810151608082015160208301516040840151600093929161278d91613b1a565b6127979190613b1a565b6127a19190613b1a565b6127ac906002613c42565b90506000818360400151856127c19190613c42565b6127cb9190613b32565b905060006127d98286613c61565b9050476127e582613163565b60006127f18247613c61565b905060008660400151866128059190613c61565b61280f9083613b32565b905060008760400151826128239190613c42565b905080156128355761283586826132c4565b6020880151600090612848846002613c42565b6128529190613c42565b9050801561287057601654612870906001600160a01b0316826133a8565b6080890151600090612883856002613c42565b61288d9190613c42565b905080156128ab576017546128ab906001600160a01b0316826133a8565b60a08a01516000906128be866002613c42565b6128c89190613c42565b905080156128e6576018546128e6906001600160a01b0316826133a8565b50506009805462ff00001916905550505050505050505050565b600061290d8484846126a4565b6001600160a01b03871660009081526005602052604090205490915060ff161561296f576001600160a01b038616600090815260026020526040902054612955908590613c61565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156129d3576101008101516001600160a01b0386166000908152600260205260409020546129b99190613b1a565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546129f89190613c61565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054612a2f9190613b1a565b6001600160a01b0386166000908152600160205260409081902091909155810151151580612a6257506000816101200151115b15612a7a57612a7a81604001518261012001516134c1565b600081608001511180612a9257506000816101600151115b15612b2757612aaa81608001518261016001516134f6565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101c00151846101a00151856101400151866101600151612b019190613b1a565b612b0b9190613b1a565b612b159190613b1a565b60405190815260200160405180910390a35b600081606001511180612b3f57506000816101400151115b15612b5757612b57816060015182610140015161356c565b60008160e001511180612b6f57506000816101c00151115b15612b8757612b878160e00151826101c00151613581565b60008160c001511180612b9f57506000816101a00151115b15612bb757612bb78160c00151826101a00151613596565b60008160a001511180612bcf57506000816101800151115b15612c3357612be78160a001518261018001516135ab565b6019546101808201516040519081526001600160a01b03918216918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612c7d91815260200190565b60405180910390a3505050505050565b601054600f546000918291825b600854811015612ddf57826001600060088481548110612cbc57612cbc613cbf565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d275750816002600060088481548110612d0057612d00613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3d57601054600f54945094505050509091565b6001600060088381548110612d5457612d54613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d839084613c61565b92506002600060088381548110612d9c57612d9c613cbf565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcb9083613c61565b915080612dd781613c78565b915050612c9a565b50600f54601054612df09190613b32565b821015612e0757601054600f549350935050509091565b90939092509050565b612e18613642565b82612e2a576101008101849052610ff7565b612e636040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8215612ea857506040805160c08101825260208054825260215490820152602254918101919091526023546060820152602454608082015260255460a0820152612ee3565b506040805160c081018252601a548152601b546020820152601c5491810191909152601d546060820152601e546080820152601f5460a08201525b8051606490612ef29087613c42565b612efc9190613b32565b6101208301526020810151606490612f149087613c42565b612f1e9190613b32565b6101408301526040810151606490612f369087613c42565b612f409190613b32565b6101608301526060810151606490612f589087613c42565b612f629190613b32565b6101808301526080810151606490612f7a9087613c42565b612f849190613b32565b6101a083015260a0810151606490612f9c9087613c42565b612fa69190613b32565b6101c083018190526101a0830151610180840151610160850151610140860151610120870151612fd6908b613c61565b612fe09190613c61565b612fea9190613c61565b612ff49190613c61565b612ffe9190613c61565b6130089190613c61565b610100830152509392505050565b6000808080806130268689613c42565b94508661303e575083925060009150819050806130fd565b8589610120015161304f9190613c42565b9250858961014001516130629190613c42565b9150858961016001516130759190613c42565b90506000868a610180015161308a9190613c42565b90506000878b6101a0015161309f9190613c42565b90506000888c6101c001516130b49190613c42565b905080828486886130c58b8e613c61565b6130cf9190613c61565b6130d99190613c61565b6130e39190613c61565b6130ed9190613c61565b6130f79190613c61565b96505050505b945094509450945094565b6000806000846131205750600091508190508061315a565b838661018001516131319190613c42565b925083866101a001516131449190613c42565b915083866101c001516131579190613c42565b90505b93509350939050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061319857613198613cbf565b6001600160a01b03928316602091820292909201810191909152600d54604080516302768aa360e51b815290519190931692634ed15460926004808301939192829003018186803b1580156131ec57600080fd5b505afa158015613200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322491906136f0565b8160018151811061323757613237613cbf565b6001600160a01b039283166020918202929092010152600d5461325d9130911684611cc3565b600d5460405163b43d9bbb60e01b81526001600160a01b039091169063b43d9bbb90613296908590600090869030904290600401613aa9565b600060405180830381600087803b1580156132b057600080fd5b505af1158015612679573d6000803e3d6000fd5b600d546132dc9030906001600160a01b031684611cc3565b600d546001600160a01b031663e6529ab48230856000806133056000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561336857600080fd5b505af115801561337c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133a19190613977565b5050505050565b804710156133f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613445576040519150601f19603f3d011682016040523d82523d6000602084013e61344a565b606091505b5050905080610e7b5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c09565b81601060008282546134d39190613c61565b9091555050602680548291906000906134ed908490613b1a565b90915550505050565b806026600201600082825461350b9190613b1a565b90915550503060009081526005602052604090205460ff161561354d573060009081526002602052604081208054839290613547908490613b1a565b90915550505b30600090815260016020526040812080548492906134ed908490613b1a565b806026600101600082825461350b9190613b1a565b806026600501600082825461350b9190613b1a565b806026600401600082825461350b9190613b1a565b80602660030160008282546135c09190613b1a565b90915550506019546001600160a01b031660009081526005602052604090205460ff1615613618576019546001600160a01b031660009081526002602052604081208054839290613612908490613b1a565b90915550505b6019546001600160a01b0316600090815260016020526040812080548492906134ed908490613b1a565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356136c381613ceb565b919050565b80356136c381613d00565b6000602082840312156136e557600080fd5b8135610ff781613ceb565b60006020828403121561370257600080fd5b8151610ff781613ceb565b6000806040838503121561372057600080fd5b823561372b81613ceb565b9150602083013561373b81613ceb565b809150509250929050565b60008060006060848603121561375b57600080fd5b833561376681613ceb565b9250602084013561377681613ceb565b929592945050506040919091013590565b6000806040838503121561379a57600080fd5b82356137a581613ceb565b9150602083013561373b81613d00565b600080604083850312156137c857600080fd5b82356137d381613ceb565b946020939093013593505050565b600080604083850312156137f457600080fd5b823567ffffffffffffffff8082111561380c57600080fd5b818501915085601f83011261382057600080fd5b813560208282111561383457613834613cd5565b8160051b604051601f19603f8301168101818110868211171561385957613859613cd5565b604052838152828101945085830182870184018b101561387857600080fd5b600096505b848710156138a25761388e816136b8565b86526001969096019594830194830161387d565b5096506138b290508782016136c8565b9450505050509250929050565b6000602082840312156138d157600080fd5b8135610ff781613d00565b6000602082840312156138ee57600080fd5b8151610ff781613d00565b6000806040838503121561390c57600080fd5b82356137d381613d00565b60006020828403121561392957600080fd5b5035919050565b6000806040838503121561394357600080fd5b82359150602083013561373b81613d00565b6000806040838503121561396857600080fd5b50508035926020909101359150565b60008060006060848603121561398c57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156139be57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015613a15578581018301518582016040015282016139f9565b81811115613a27576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613af95784516001600160a01b031683529383019391830191600101613ad4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613b2d57613b2d613c93565b500190565b600082613b4f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613b8f578160001904821115613b7557613b75613c93565b80851615613b8257918102915b93841c9390800290613b59565b509250929050565b6000610ff760ff841683600082613bb05750600161141b565b81613bbd5750600061141b565b8160018114613bd35760028114613bdd57613bf9565b600191505061141b565b60ff841115613bee57613bee613c93565b50506001821b61141b565b5060208310610133831016604e8410600b8410161715613c1c575081810a61141b565b613c268383613b54565b8060001904821115613c3a57613c3a613c93565b029392505050565b6000816000190483118215151615613c5c57613c5c613c93565b500290565b600082821015613c7357613c73613c93565b500390565b6000600019821415613c8c57613c8c613c93565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461121857600080fd5b801515811461121857600080fdfea2646970667358221220871807ab5aad565d64a8180721d193aa416c34c4d33ea2801edfed48e8f254af64736f6c63430008070033