koji.earth (KOJI v2) Token Tracker | BscScan (2025)

koji.earth (KOJI v2) Token Tracker | BscScan (1)

koji.earth (KOJI v2)

Sponsored

Sponsored

Сoins.game - 100 free spins for registration. Spin Now! Everyday giveaways up to 8.88BTC, Lucky Spins.Deposit BONUS 300% and Cashbacks!

Pasino Pasino.com - Claim your Freespin and Lottery Tickets Claim Now! Join Pasino and get the daily chance to win US$100k and 0.5 BTC

Sponsored

BC.GAME The Best BNB Casino with 1,000,000 BNB Daily Bonus. Claim Now 5000+ Slots, Live casino games, 50+ cryptos, 100% bet insurance. Register with Bscscan and get 240% first deposit bonus.

Whale Casino No BS Up to 20% DAILY CashBack Get Started! Casino | Sportsbook | Lootboxes | Tribes | Battlepass

BEP-20

  • Check previous token supply
  • Add Token to MetaMask (Web3)
  • Update Token Info
  • Update Name Tag or Label
  • Submit Burn Details
  • Report/Flag Address

Overview

Max Total Supply

1,000,000,000,000KOJI v2

Holders

311

Total Transfers

-

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

0x7eb567f5c781ee8e47c7100dc5046955503fc26a

  • Transfers
  • Holders
  • Info
  • Contract
  • Analytics

Loading...

Loading

Loading...

Loading

Loading...

Loading

Click here to update the token information / general information

  • Code
  • Read Contract
  • Write Contract

Contract Source Code Verified (Exact Match)

Contract Name:

KojiEarth

Compiler Version

v0.8.9+commit.e5eed63a

Optimization Enabled:

Yes with 200 runs

Other Settings:

constantinople EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

koji.earth (KOJI v2) Token Tracker | BscScan (9)koji.earth (KOJI v2) Token Tracker | BscScan (10)koji.earth (KOJI v2) Token Tracker | BscScan (11)IDE

  • Similar
  • Sol2Uml
  • Submit Audit
  • Compare

File 1 of 1 : KojiEarth_v2.sol

// SPDX-License-Identifier: Licensed to Kill Zeroes/*koji.earth projectlaunched on Ethereum 6.2021, high gas fees made trading unreasonablerelaunching on BSC with new, better contract at original public sale priceWebsite: https://koji.earthTelegram: https://t.me/kojiearth25 Million KOJI required to receive divs in BNBWithdraw/Reinvest dividends : https://app.koji.earthStaking & Full NFT comic book coming 1.2022 (maybe sooner!)Tokenomics: Supply: 1 TrillionPhase 1 Taxes - Staking/NFT pools inactive: / 1% KOJI to burn wallet | 6% left converts to BNB7% tax on buy/sell/transfer - | 40% of BNB to holders | 20% of BNB to liquidity | 20% of BNB to charity \ 20% of BNB to admin (artwork, marketing, etc..)Phase 2 Taxes - Staking/NFT pools active: / 1% KOJI to burn wallet | 1% KOJI to stake pool | 6% left converts to BNB8% tax on buy/sell/transfer - | 40% of BNB to holders | 15% of BNB to liquidity | 15% of BNB to charity | 15% of BNB to NFT reward pool \ 15% of BNB to admin (artwork, marketing, etc..) 5% slippage on buys, 10-15% on sells, make sure KOJI amount on sell doesn't end in zero No rug, no scam, trusted team; stop by our TG and say hi!*/pragma solidity ^0.8.9;/** * Standard SafeMath, stripped down to just add/sub/mul/div */library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; return c; }}/** * BEP20 standard interface. */interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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);}/** * Allows for contract ownership along with multi-address authorization */abstract contract Auth { address internal owner; constructor(address _owner) { owner = _owner; } /** * Function modifier to require caller to be contract deployer */ modifier onlyOwner() { require(isOwner(msg.sender), "!Owner"); _; } /** * Check if address is owner */ function isOwner(address account) public view returns (bool) { return account == owner; } /** * Transfer ownership to new address. Caller must be owner. */ function transferOwnership(address payable adr) public onlyOwner { owner = adr; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner);}abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; }}interface IOracle { function getdiscount(uint256 amount) external returns (uint256 discount);}interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair);}interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function approve(address spender, uint value) external returns (bool); function balanceOf(address owner) external view returns (uint); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);}interface IDEXRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external;}interface IDividendDistributor { function setDistributionCriteria(uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function addBNB() external payable; function addBNBnetDivs() external payable; function setDividendToken(address dividendToken) external; function distributeDividend(address shareholder, uint256 percent) external; function reinvestDividend(address shareholder, uint256 percent, uint256 minOut) external; function sweep(uint256 gas) external; function changeMinHold(uint256 _amount, uint256 _gas) external; function transferBEP20Tokens(address _tokenAddr, address _to, uint _amount) external; function changeImpoundTimelimit(uint256 _timelimit) external; function changeDistribGas(uint256 _walletGas, uint256 _reinvestGas) external; function rescueETHFromContract() external; function donate(address shareholder, address charity, uint256 percent) external;}contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 unpaidDividends; uint256 totalExcluded; uint256 totalRealised; bool rewardEligible; } IBEP20 dividendToken; IDEXRouter router; address WETH; address[] shareholders; address[] donators; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => uint256) shareholderDonated; mapping (address => uint256) public shareholderExpired; mapping (address => Share) public shares; mapping (address => bool) shareholderAdded; mapping (address => bool) donatorAdded; uint256 public totalWithdrawn; uint256 public totalReinvested; uint256 public totalDonated; uint256 public netDividends; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 lastDeposit; uint256 distribWalletGas = 40000; uint256 distribReinvestGas = 450000; uint256 public impoundTimelimit = 2592000; //1 month default uint256 public minDistribution = 1000000* (10 ** 9); //0.001 uint256 public minHoldAmountForRewards = 25000000 * (10**9); // Must hold 25 million tokens to receive rewards uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } event DividendTokenUpdate(address dividendToken); constructor (address _router, address _dividendToken) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); _token = msg.sender; dividendToken = IBEP20(_dividendToken); WETH = router.WETH(); } function setShare(address shareholder, uint256 amount) public override onlyToken { if(shares[shareholder].amount > 0){ shares[shareholder].unpaidDividends = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder)); } if(amount > 0 && shares[shareholder].amount == 0){ if (amount >= minHoldAmountForRewards) { addShareholder(shareholder); shareholderExpired[shareholder] = 9999999999; } }else if(amount == 0 && shares[shareholder].amount > 0){ if (shares[shareholder].unpaidDividends == 1 || shares[shareholder].unpaidDividends == 0) { removeShareholder(shareholder); } else { shareholderExpired[shareholder] = block.timestamp; } } bool boolGetsRewards = shares[shareholder].rewardEligible; if (amount >= minHoldAmountForRewards) { if (!boolGetsRewards) { shares[shareholder].rewardEligible = true; totalShares = totalShares.add(amount); shares[shareholder].amount = amount; } else { totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; } } else { if (boolGetsRewards) { shares[shareholder].rewardEligible = false; totalShares = totalShares.sub(shares[shareholder].amount); shares[shareholder].amount = 0; } else { shares[shareholder].amount = 0; } } shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyToken { uint256 amount = msg.value; lastDeposit = amount; netDividends = netDividends.add(amount); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function addBNB() external payable override onlyToken { uint256 amount = msg.value; } function addBNBnetDivs() external payable override onlyToken { uint256 amount = msg.value; netDividends = netDividends.add(amount); totalDividends = totalDividends.add(amount); } //withdraw dividends function distributeDividend(address shareholder, uint256 percent) external override onlyToken { require(percent >= 25 && percent <= 100, "Percent of withdrawal is outside of parameters"); uint256 fullamount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder)); uint256 netamount = fullamount.mul(percent).div(100); if(netamount > 0){ netamount = netamount.sub(1); //this is so we aren't short on dust in the holding wallet totalDistributed = totalDistributed.add(netamount); (bool successShareholder, /* bytes memory data */) = payable(shareholder).call{value: netamount, gas: distribWalletGas}(""); require(successShareholder, "Shareholder rejected BNB transfer"); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].unpaidDividends = fullamount.sub(netamount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(netamount); totalWithdrawn = totalWithdrawn.add(netamount); netDividends = netDividends.sub(netamount); } else { return; } } //Reinvest dividends function reinvestDividend(address shareholder, uint256 percent, uint256 minOut) external override onlyToken { require(percent >= 25 && percent <= 100, "Percent of reinvestment is outside of parameters"); uint256 fullamount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder)); uint256 netamount = fullamount.mul(percent).div(100); if(netamount >= minDistribution){ netamount = netamount.sub(1); //this is so we aren't short on dust in the holding wallet address[] memory path = new address[](2); path[0] = WETH; path[1] = _token; router.swapExactETHForTokensSupportingFeeOnTransferTokens{value:netamount, gas:distribReinvestGas}( minOut, path, address(shareholder), block.timestamp ); totalDistributed = totalDistributed.add(netamount); shares[shareholder].unpaidDividends = fullamount.sub(netamount); shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(netamount); totalReinvested = totalReinvested.add(netamount); shareholderClaims[shareholder] = block.timestamp; netDividends = netDividends.sub(netamount); } else { return; } } //withdraw dividends function donate(address shareholder, address charityAddress, uint256 percent) external override onlyToken { require(percent >= 25 && percent <= 100, "Percent of donation is outside of parameters"); uint256 fullamount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder)); uint256 netamount = fullamount.mul(percent).div(100); if(netamount > 0){ netamount = netamount.sub(1); //this is so we aren't short on dust in the holding wallet totalDistributed = totalDistributed.add(netamount); (bool successShareholder, /* bytes memory data */) = payable(charityAddress).call{value: netamount, gas: distribWalletGas}(""); require(successShareholder, "Shareholder rejected BNB transfer"); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].unpaidDividends = fullamount.sub(netamount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); addDonator(shareholder); shareholderDonated[shareholder] = shareholderDonated[shareholder].add(netamount); totalDonated = totalDonated.add(netamount); netDividends = netDividends.sub(netamount); } else { return; } } function getUnpaidDividends(address shareholder) public view returns (uint256 unpaidDividends) { return shares[shareholder].unpaidDividends; } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } //Impounds all divs from non-KOJI holders that sold all, yet didn't claim rewards within time limit function sweep(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; currentIndex = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if (shares[shareholders[currentIndex]].unpaidDividends > 0 && shares[shareholders[currentIndex]].amount == 0 && block.timestamp.add(impoundTimelimit) > shareholderExpired[shareholders[currentIndex]]) { impoundDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } cleanup(); } //Removes non-KOJI holders from array after sweep() function cleanup() internal { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; currentIndex = 0; while(iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if (shares[shareholders[currentIndex]].unpaidDividends == 0 && shares[shareholders[currentIndex]].amount == 0 && block.timestamp.add(impoundTimelimit) > shareholderExpired[shareholders[currentIndex]]) { removeShareholder(shareholders[currentIndex]); } currentIndex++; iterations++; } } //Impounds unclaimed dividends from wallets that sold all their tokens yet didn't claim rewards within the specified timeframe (default 30 days) function impoundDividend(address shareholder) internal { uint256 amount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder)); uint256 netamount = amount.sub(1); //this is so we aren't short on dust in the holding wallet (bool successShareholder, /* bytes memory data */) = payable(_token).call{value: netamount, gas: distribWalletGas}(""); require(successShareholder, "Shareholder rejected BNB transfer"); shareholderClaims[shareholder] = block.timestamp; shareholderExpired[shareholder] = 9999999999; shares[shareholder].unpaidDividends = 0; netDividends = netDividends.sub(amount); } function addShareholder(address shareholder) internal { if (shareholderAdded[shareholder]) { return; } else { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); shareholderAdded[shareholder] = true; } } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); shareholderAdded[shareholder] = false; } function addDonator(address shareholder) internal { if (donatorAdded[shareholder]) { return; } else { donators.push(shareholder); donatorAdded[shareholder] = true; } } function setDividendToken(address _dividendToken) external override onlyToken { dividendToken = IBEP20(_dividendToken); emit DividendTokenUpdate(_dividendToken); } function getDividendToken() external view returns (address) { return address(dividendToken); } //Change the min hold requirement for rewards. function changeMinHold(uint256 _amount, uint256 _gas) external override onlyToken { require(_amount != minHoldAmountForRewards, "new threshold amount cannot be the same as existing threshold"); require(_amount >= 1000000000 || _amount <= 100000000000000000, "Min hold amount for divs should between 1 and 100M tokens"); require(_gas >= 450000, "Please use a gas value equal to or higher than 450,000"); uint256 lastAmount = minHoldAmountForRewards; minHoldAmountForRewards = _amount; if (lastAmount > minHoldAmountForRewards) { //lowered changeMinHoldAmount(_gas, 0); } else { //raised changeMinHoldAmount(_gas, 1); } } function changeMinHoldAmount(uint256 gas, uint256 flag) internal { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; currentIndex = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(flag == 0) { if(shares[shareholders[currentIndex]].amount == 0 && shareholderExpired[shareholders[currentIndex]] == 9999999999) { uint256 balance = IBEP20(_token).balanceOf(shareholders[currentIndex]); setShare(shareholders[currentIndex],balance); } } else { if(shares[shareholders[currentIndex]].amount > 0) { setShare(shareholders[currentIndex],shares[shareholders[currentIndex]].amount); } } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferBEP20Tokens(address _tokenAddr, address _to, uint _amount) external override onlyToken { IBEP20(_tokenAddr).transfer(_to, _amount); } // This will allow to rescue ETH held in the distributor interface address function rescueETHFromContract() external override onlyToken { address payable _owner = payable(_token); _owner.transfer(address(this).balance); } function viewMinHold() external view returns (uint256) { return minHoldAmountForRewards; } function holderInfo(address _holder) external view returns (uint256, uint256, uint256, uint256, bool) { return (shares[_holder].amount, shares[_holder].unpaidDividends, shares[_holder].totalRealised, shares[_holder].totalExcluded, shares[_holder].rewardEligible); } function mathInfo() external view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { return (totalShares, netDividends, totalDistributed, totalReinvested, totalWithdrawn, totalDonated, totalDividends); } function getShareholderExpired(address _holder) external view returns (uint256) { return shareholderExpired[_holder]; } function changeImpoundTimelimit(uint256 _timelimit) external override onlyToken { impoundTimelimit = _timelimit; } function changeDistribGas(uint256 _walletGas, uint256 _reinvestGas) external override onlyToken { distribWalletGas = _walletGas; distribReinvestGas = _reinvestGas; } function setDistributionCriteria(uint256 _minDistribution) external override onlyToken { minDistribution = _minDistribution; } function getDistributionCriteria() external view returns (uint256) { return minDistribution; } function getDonationLeaders() external view returns (address[] memory, uint256[] memory) { uint limit = donators.length; address[] memory list = new address[](limit); uint256[] memory sent = new uint256[](limit); for (uint start = 0; start < limit; ++start) { list[start] = donators[start]; sent[start] = shareholderDonated[donators[start]]; } return (list, sent); }}contract KojiEarth is IBEP20, Auth, ReentrancyGuard { using SafeMath for uint256; address WETH; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; IWETH WETHrouter; string constant _name = "koji.earth"; string constant _symbol = "KOJI v2"; uint8 constant _decimals = 9; uint256 _totalSupply = 1000000000000 * (10 ** _decimals); uint256 public _maxTxAmountBuy = _totalSupply; uint256 public _maxTxAmountSell = _totalSupply; uint256 public _maxWalletToken = _totalSupply; struct Partners { address token_addr; uint256 minHoldAmount; uint256 discount; bool enabled; } mapping (uint256 => Partners) private partners; address[] partneraddr; mapping (address => bool) partnerAdded; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isDividendExempt; mapping (address => bool) public isBot; uint256 initialBlockLimit = 1; uint256 public burnRatio = 142; uint256 public stakepoolRatio = 142; uint256 public taxRatio = 200; uint256 public totalFee = 70; //(7%) uint256 discountOffset = 1; uint256 public partnerFeeLimiter = 50; uint256 public feeDenominator = 1000; uint256 public WETHaddedToPool; address public charityWallet; address public adminWallet; address public nftRewardWallet; address public stakePoolWallet; uint256 public totalCharity; uint256 public totalAdmin; uint256 public totalNFTrewards; uint256 public totalStakepool; IDEXRouter public router; IOracle public oracle; address public pair; uint256 public launchedAt; bool public swapEnabled = false; bool public stakePoolActive = false; bool public nftPoolActive = false; bool public distributorDeposit = true; bool public teamWalletDeposit = true; bool public addToLiquid = true; bool public enablePartners = false; bool public enableOracle = false; bool public airdropEnabled = false; bool public launchEnabled = false; bool inSwap; DividendDistributor distributor; uint256 distributorGas = 750000; uint256 walletGas = 40000; uint256 depositGas = 350000; uint256 private swapThreshold = 100000000000000; //100k tokens modifier swapping() { inSwap = true; _; inSwap = false; } constructor () Auth(msg.sender) { router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); oracle = IOracle(0x2E7bC3122009E9d6487a9b62465C5Ecc5466E81e); address _presaler = msg.sender; WETH = router.WETH(); pair = IDEXFactory(router.factory()).createPair(WETH, address(this)); _allowances[address(this)][address(router)] = type(uint256).max; distributor = new DividendDistributor(address(router), WETH); isFeeExempt[_presaler] = true; isDividendExempt[_presaler] = true; isTxLimitExempt[_presaler] = true; isTxLimitExempt[DEAD] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; charityWallet = 0xDcd236b4C77711BE7e90bC2b57Dea812330165B3; adminWallet = 0xC475d33a760c3e0325A33C3abA706c135c456C29; nftRewardWallet = 0x70117981e4C9fA0309a9BC83412305281dB5Af8B; stakePoolWallet = 0x70117981e4C9fA0309a9BC83412305281dB5Af8B; isFeeExempt[stakePoolWallet] = true; isDividendExempt[stakePoolWallet] = true; _balances[_presaler] = _totalSupply; emit Transfer(address(0), _presaler, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { if(!isOwner(msg.sender)){require(launchEnabled, "Liquid has not been added yet!");} _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _tF(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _tF(sender, recipient, amount); } function _tF(address s, address r, uint256 amount) internal returns (bool) { require(amount > 0, "Insufficient Amount: cannot send 0 KOJI"); if(airdropEnabled){ return _basicTransfer(s, r, amount); } if(inSwap){ return _basicTransfer(s, r, amount); } checkTxLimit(s, r, amount); if (r == pair) { if(shouldSwapBack()){ swapBack(); } } if(!launched() && r == pair){ require(_balances[s] > 0); launch(); } _balances[s] = _balances[s].sub(amount, "Insufficient Balance"); uint256 amountReceived = shouldTakeFee(s) && shouldTakeFee(r) ? takeFee(s, r, amount) : amount; if(r != pair && !isTxLimitExempt[r]){ uint256 contractBalanceRecepient = balanceOf(r); require(contractBalanceRecepient + amountReceived <= _maxWalletToken, "Exceeds maximum wallet token amount"); } _balances[r] = _balances[r].add(amountReceived); if(!isDividendExempt[s]){ try distributor.setShare(s, _balances[s]) {} catch {}} if(!isDividendExempt[r]){ try distributor.setShare(r, _balances[r]) {} catch {}} emit Transfer(s, r, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function manualBurn(uint256 amount) external onlyOwner returns (bool) { return _basicTransfer(address(this), DEAD, amount); } function checkTxLimit(address sender, address receiver, uint256 amount) internal view { if(sender == pair) {require(amount <= _maxTxAmountBuy || isTxLimitExempt[receiver], "Buy TX Limit Exceeded");} if(receiver == pair) {require(amount <= _maxTxAmountSell || isTxLimitExempt[sender], "Sell TX Limit Exceeded");} } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } function getTotalFee(bool bot) public view returns (uint256) { // Anti-bot, fees as 99% for the first block if(launchedAt + initialBlockLimit >= block.number || bot){ return feeDenominator.sub(1); } return totalFee; } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeAmount; uint256 regularFee = getTotalFee(isBot[sender]); uint256 discountFee = 0; if (enablePartners && recipient != pair && sender == pair) { //scan wallet for BEP20 tokens matching those in struct uint256 partnerCount = partneraddr.length; for (uint256 x = 0; x <= partnerCount; ++x) { Partners storage tokenpartners = partners[x]; if (tokenpartners.enabled) { if(IBEP20(address(tokenpartners.token_addr)).balanceOf(address(recipient)) >= tokenpartners.minHoldAmount) { discountFee = discountFee.add(tokenpartners.discount); } } } } if (enableOracle && recipient != pair && sender == pair) { uint256 discountAmount = oracle.getdiscount(amount); discountAmount = discountAmount.div(100000000); discountAmount = discountAmount.add(discountOffset); discountFee = discountFee.add(discountAmount); } if (discountFee == 0) { feeAmount = amount.mul(regularFee).div(feeDenominator); } else { if (discountFee > regularFee.mul(partnerFeeLimiter).div(100)) { discountFee = regularFee.mul(partnerFeeLimiter).div(100); } else { discountFee = regularFee.sub(discountFee); } feeAmount = amount.mul(discountFee).div(feeDenominator); } _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function swapBack() internal swapping { uint256 amountToSwap = IBEP20(address(this)).balanceOf(address(this)); uint256 burnAmount = amountToSwap.mul(burnRatio).div(feeDenominator); IBEP20(address(this)).transfer(address(DEAD), burnAmount); if (stakePoolActive) { uint256 stakePoolAmount = amountToSwap.mul(stakepoolRatio).div(feeDenominator); amountToSwap = amountToSwap.sub(stakePoolAmount); IBEP20(address(this)).transfer(address(stakePoolWallet), stakePoolAmount); totalStakepool = totalStakepool.add(stakePoolAmount); amountToSwap = amountToSwap.sub(burnAmount); } else { amountToSwap = amountToSwap.sub(burnAmount); } address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uint256 balanceBefore = address(this).balance; //We want to put any built up WBNB back into the pool if (addToLiquid) { uint256 balance = IWETH(WETH).balanceOf(address(this)); if (balance > 0) { IWETH(WETH).transfer(pair, balance); WETHaddedToPool = WETHaddedToPool.add(balance); } } //Exchange the built up tokens router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); //Calculate the distribution uint256 amountBNB = address(this).balance.sub(balanceBefore); uint256 taxSplit = amountBNB.mul(taxRatio).div(feeDenominator); uint256 amountBNBcharity = taxSplit; uint256 amountBNBadmin = taxSplit; uint256 amountBNBbuyback = taxSplit; uint256 amountBNBReflection; uint256 amountBNBnft; if (nftPoolActive) { amountBNBnft = taxSplit; amountBNBReflection = amountBNB.sub(amountBNBcharity).sub(amountBNBbuyback).sub(amountBNBadmin).sub(amountBNBnft); (bool successTeam3, /* bytes memory data */) = payable(nftRewardWallet).call{value: amountBNBnft, gas: walletGas}(""); require(successTeam3, "NFT reward wallet rejected BNB transfer"); totalNFTrewards = totalNFTrewards.add(amountBNBnft); } else { amountBNBReflection = amountBNB.sub(amountBNBcharity).sub(amountBNBbuyback).sub(amountBNBadmin); } //Deposit into the distributor if (distributorDeposit) { try distributor.deposit{value: amountBNBReflection}() {} catch {} } //Deposit to the team wallets if (teamWalletDeposit) { (bool successTeam1, /* bytes memory data */) = payable(charityWallet).call{value: amountBNBcharity, gas: walletGas}(""); require(successTeam1, "Charity wallet rejected BNB transfer"); totalCharity = totalCharity.add(amountBNBcharity); (bool successTeam2, /* bytes memory data */) = payable(adminWallet).call{value: amountBNBadmin, gas: walletGas}(""); require(successTeam2, "Admin wallet rejected BNB transfer"); totalAdmin = totalAdmin.add(amountBNBadmin); } //Convert the buyback amount to WBNB and hold until the next qualifying sell IWETH(WETH).deposit{value : amountBNBbuyback}(); } function launched() internal view returns (bool) { return launchedAt != 0; } function launch() internal { launchedAt = block.number; } function setInitialBlockLimit(uint256 blocks) external onlyOwner { require(blocks > 0, "Blocks should be greater than 0"); initialBlockLimit = blocks; } function setBuyTxLimit(uint256 amount) external onlyOwner { _maxTxAmountBuy = amount; } function setSellTxLimit(uint256 amount) external onlyOwner { require(amount >= 250000000000000000, "Sell limit must not be less than 250M tokens"); _maxTxAmountSell = amount; } function setMaxWalletToken(uint256 amount) external onlyOwner { require(amount >= 250000000000000000, "Wallet limit must not be less than 250M tokens"); _maxWalletToken = amount; } function setBot(address _address, bool toggle) external onlyOwner { isBot[_address] = toggle; _setIsDividendExempt(_address, toggle); } function _setIsDividendExempt(address holder, bool exempt) internal { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { _setIsDividendExempt(holder, exempt); } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } function setFee(uint256 _totalFee) external onlyOwner { //Total fees has to be between 0 and 10 percent require(_totalFee >= 0 && _totalFee <= 100, "Total Fee must be between 0 and 100 (100 = ten percent)"); totalFee = _totalFee; } function setFeeReceivers(address _charityWallet, address _adminWallet, address _nftRewardWallet, address _stakePoolWallet) external onlyOwner { require(_charityWallet != ZERO, "Charity wallet must not be zero address"); require(_adminWallet != ZERO, "Admin wallet must not be zero address"); require(_nftRewardWallet != ZERO, "NFT reward wallet must not be zero address"); require(_stakePoolWallet != ZERO, "Stakepool wallet must not be zero address"); require(_charityWallet != DEAD, "Charity wallet must not be dead address"); require(_adminWallet != DEAD, "Admin wallet must not be dead address"); require(_nftRewardWallet != DEAD, "NFT reward wallet must not be dead address"); require(_stakePoolWallet != DEAD, "Stakepool wallet must not be dead address"); charityWallet = _charityWallet; nftRewardWallet = _nftRewardWallet; adminWallet = _adminWallet; stakePoolWallet = _stakePoolWallet; } function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner { swapEnabled = _enabled; swapThreshold = _amount; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function setDistributorDeposit(bool _status) external onlyOwner { distributorDeposit = _status; } function setTeamWalletDeposit(bool _status) external onlyOwner { teamWalletDeposit = _status; } function setAddToLiquid(bool _status) external onlyOwner { addToLiquid = _status; } function viewTeamWalletInfo() public view returns (uint256 charityDivs, uint256 adminDivs, uint256 nftDivs, uint256 stakeDivs) { return (totalCharity, totalAdmin, totalNFTrewards, totalStakepool); } // This will allow owner to rescue BNB sent by mistake directly to the contract function rescueBNB() external onlyOwner { address payable _owner = payable(msg.sender); _owner.transfer(address(this).balance); } // Converts to WBNB any BNB held in the contract (from sweep() function, for example) function convertBNBtoWBNB() external onlyOwner { IWETH(WETH).deposit{value : address(this).balance}(); } // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) function transferBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IBEP20(_tokenAddr).transfer(_to, _amount); } // This allows us to get any BNB out of the distributor address function RescueBNBfromDistributor() external onlyOwner { distributor.rescueETHFromContract(); } // Function to allow admin to claim *other* ERC20 tokens sent to the distributor (by mistake) function TransferBEP20fromDistributor(address _tokenAddr, address _to, uint _amount) external onlyOwner { distributor.transferBEP20Tokens(_tokenAddr, _to, _amount); } //Depost BNB into the contract, then call this to increase holders dividends function AddToDistributorDeposit() external onlyOwner { distributor.deposit{value: address(this).balance}(); } //Deposit BNB into the contract, then call this to add BNB to the distributor in case it doesn't have enough to cover withdrawals (shouldn't happen, but just in case) function AddToDistributorBalance() external onlyOwner { distributor.addBNB{value: address(this).balance}(); } function AddToDistributorNetDivs() external onlyOwner { distributor.addBNBnetDivs{value: address(this).balance}(); } function changeOracle(address _oracle) external onlyOwner { oracle = IOracle(_oracle); } function GetClaimed(address _holder) external view returns (uint256 pending) { return distributor.getUnpaidDividends(_holder); } function GetPending(address _holder) external view returns (uint256 pending) { return distributor.getUnpaidEarnings(_holder); } function Withdrawal(uint256 _percent) external nonReentrant { distributor.distributeDividend(msg.sender, _percent); } function Reinvest(uint256 _percent, uint256 _amountOutMin) external nonReentrant { distributor.reinvestDividend(msg.sender, _percent, _amountOutMin); } function Donate(uint256 _percent) external nonReentrant { distributor.donate(msg.sender, charityWallet, _percent); } function setburnRatio(uint256 _amount) external onlyOwner { require(_amount <= taxRatio.div(2), "burn ratio cannot be more than 50 percent of total tax"); burnRatio = _amount; } function setstakepoolRatio(uint256 _amount) external onlyOwner { require(_amount <= taxRatio.div(2), "stakepool ratio cannot be more than 50 percent of total tax"); stakepoolRatio = _amount; } function settaxRatio(uint256 _amount) external onlyOwner { require(_amount <= feeDenominator.div(4), "tax ratio cannot be more than 250 (25%)"); taxRatio = _amount; } function ChangeMinHold(uint256 _amount, uint256 _gas) external onlyOwner swapping { distributor.changeMinHold(_amount, _gas); } function ViewMinHold() external view returns (uint256 amount) { return distributor.viewMinHold(); } function ViewHolderInfo(address _address) external view returns (uint256 amount, uint256 unpaid, uint256 realised, uint256 excluded, bool rewardeligible) { return distributor.holderInfo(_address); } function ViewMathInfo() external view returns (uint256 totalshares, uint256 netdividends, uint256 totaldistributed, uint256 totalreinvested, uint256 totalwithdrawn, uint256 totalDonated, uint256 totaldividends) { return distributor.mathInfo(); } function GetMinDistribution() external view returns (uint256) { return distributor.getDistributionCriteria(); } function GetRewardsToken() external view returns (address) { return distributor.getDividendToken(); } function SetDistributionCriteria(uint256 _amount) external onlyOwner { require(_amount > 0, "minimum distribution level must be greater than zero"); distributor.setDistributionCriteria(_amount); } function GetShareholderExpired(address _holder) external view returns (uint256) { return distributor.getShareholderExpired(_holder); } function ChangeImpoundTimelimit(uint256 _timelimit) external onlyOwner { require(_timelimit >= 2592000, "Holder should have minimum 30 days (2592000) to withdraw unclaimed divs"); distributor.changeImpoundTimelimit(_timelimit); } //reclaim divs from anyone who dumped KOJI over 30 days (default) ago but never withdrew their dividends function SweepDivs() external onlyOwner { try distributor.sweep(distributorGas) {} catch {} } function setStakePoolActive(bool _status) external onlyOwner { stakePoolActive = _status; } function setNFTPoolActive(bool _status) external onlyOwner { nftPoolActive = _status; } function changeContractGas(uint256 _distributorgas, uint256 _walletgas) external onlyOwner { require(_distributorgas > 0, "distributor cannot be equal to zero"); require(_walletgas > 0, "distributor cannot be equal to zero"); distributorGas = _distributorgas; walletGas = _walletgas; } function ChangeDistribGas(uint256 _walletGas, uint256 _reinvestGas) external onlyOwner { require(_walletGas > 0, "distributor cannot be equal to zero"); require(_reinvestGas > 0, "distributor cannot be equal to zero"); distributor.changeDistribGas(_walletGas, _reinvestGas); } function isContract(address addr) internal view returns (bool) { bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; bytes32 codehash; assembly { codehash := extcodehash(addr) } return (codehash != 0x0 && codehash != accountHash); } function addPartnership(address _tokencontract, uint256 _minHoldAmount, uint256 _percent) external onlyOwner { require(_tokencontract != DEAD && _tokencontract != ZERO && _tokencontract != pair, "Please input a valid token contract address"); require(isContract(_tokencontract), "Please input an actual token contract"); require(!partnerAdded[_tokencontract], "Contract already added. To change parameters please remove first."); require(_minHoldAmount > 0, "Min hold must be greater than zero"); require(_percent <= totalFee, "Discount cannot be greater than total tax"); uint256 partnerCount = partneraddr.length; Partners storage tokenpartners = partners[partnerCount]; tokenpartners.token_addr = _tokencontract; tokenpartners.minHoldAmount = _minHoldAmount; tokenpartners.discount =_percent; tokenpartners.enabled = true; partnerAdded[_tokencontract] = true; partneraddr.push(_tokencontract); } function removePartnership(address _tokencontract) external onlyOwner { uint256 partnerCount = partneraddr.length; if (partnerCount > 0) { for (uint256 x = 0; x < partnerCount; ++x) { Partners storage tokenpartners = partners[x]; if (address(tokenpartners.token_addr) == address(_tokencontract)) { if (x == partnerCount) { tokenpartners.token_addr = ZERO; tokenpartners.minHoldAmount = 0; tokenpartners.discount = 0; tokenpartners.enabled = false; partnerAdded[_tokencontract] = false; partneraddr.pop(); } else { Partners storage tokenpartnerscopy = partners[partneraddr.length-1]; tokenpartners.token_addr = tokenpartnerscopy.token_addr; tokenpartners.minHoldAmount = tokenpartnerscopy.minHoldAmount; tokenpartners.discount = tokenpartnerscopy.discount; tokenpartners.enabled = true; partnerAdded[_tokencontract] = false; tokenpartnerscopy.token_addr = ZERO; tokenpartnerscopy.minHoldAmount = 0; tokenpartnerscopy.discount = 0; tokenpartnerscopy.enabled = false; partneraddr[x] = partneraddr[partneraddr.length-1]; partneraddr.pop(); } } } } else { return; } } function getPartnershipIndex() external view returns (uint256) { return partneraddr.length; } function viewPartnership(uint256 _index) external view returns (string memory name, string memory symbol, uint8 decimals, address tokencontract, uint256 minHoldAmount, uint256 discount, bool enabled) { Partners storage tokenpartners = partners[_index]; string memory token_name = IBEP20(tokenpartners.token_addr).name(); string memory token_symbol = IBEP20(tokenpartners.token_addr).symbol(); uint8 token_decimals = IBEP20(tokenpartners.token_addr).decimals(); return (token_name, token_symbol, token_decimals, tokenpartners.token_addr,tokenpartners.minHoldAmount,tokenpartners.discount,tokenpartners.enabled); } function setEnablePartners(bool _status) external onlyOwner { enablePartners = _status; } function setEnableOracle(bool _status) external onlyOwner { enableOracle = _status; } //value of 100 allows partner taxes to reduce 0% of totalFee tax, 50 = 50% of total tax (default), 1 allows 99% tax reduction of total tax for partners function setPartnerFeeLimiter(uint256 _limiter) external onlyOwner { require(_limiter <= 100 && _limiter >= 1, "fee limiter must be between 1 and 100"); partnerFeeLimiter = _limiter; } //once the airdrop is complete, this function turns off _basicTransfer permanently for airdropEnabled function setAirdropDisabled() external onlyOwner { airdropEnabled = false; } //once the liquid is added, this function turns on launchEnabled permanently function setLaunchEnabled() external onlyOwner { require(!airdropEnabled, "Please disable airdrop mode first"); launchEnabled = true; } function registerShares() external nonReentrant { uint256 balance = IBEP20(address(this)).balanceOf(msg.sender); distributor.setShare(msg.sender,balance); } function getDonationLeaders() external view returns (address[] memory, uint256[] memory) { return distributor.getDonationLeaders(); } function setDiscountOffset(uint256 _offset) external onlyOwner { discountOffset = _offset; }}

Settings

{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "constantinople", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }}

Contract Security Audit

  • No Contract Security Audit Submitted- Submit Audit Here

Contract ABI

API

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AddToDistributorBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddToDistributorDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddToDistributorNetDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletGas","type":"uint256"},{"internalType":"uint256","name":"_reinvestGas","type":"uint256"}],"name":"ChangeDistribGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timelimit","type":"uint256"}],"name":"ChangeImpoundTimelimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"ChangeMinHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"Donate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetClaimed","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetMinDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetPending","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetRewardsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetShareholderExpired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"}],"name":"Reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RescueBNBfromDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SetDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SweepDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferBEP20fromDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"ViewHolderInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unpaid","type":"uint256"},{"internalType":"uint256","name":"realised","type":"uint256"},{"internalType":"uint256","name":"excluded","type":"uint256"},{"internalType":"bool","name":"rewardeligible","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ViewMathInfo","outputs":[{"internalType":"uint256","name":"totalshares","type":"uint256"},{"internalType":"uint256","name":"netdividends","type":"uint256"},{"internalType":"uint256","name":"totaldistributed","type":"uint256"},{"internalType":"uint256","name":"totalreinvested","type":"uint256"},{"internalType":"uint256","name":"totalwithdrawn","type":"uint256"},{"internalType":"uint256","name":"totalDonated","type":"uint256"},{"internalType":"uint256","name":"totaldividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ViewMinHold","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETHaddedToPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"Withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokencontract","type":"address"},{"internalType":"uint256","name":"_minHoldAmount","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"addPartnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addToLiquid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorgas","type":"uint256"},{"internalType":"uint256","name":"_walletgas","type":"uint256"}],"name":"changeContractGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"changeOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertBNBtoWBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePartners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDonationLeaders","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPartnershipIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"bot","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nftPoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeLimiter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokencontract","type":"address"}],"name":"removePartnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAddToLiquid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAirdropDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"setDiscountOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setDistributorDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEnableOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEnablePartners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_adminWallet","type":"address"},{"internalType":"address","name":"_nftRewardWallet","type":"address"},{"internalType":"address","name":"_stakePoolWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setInitialBlockLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setNFTPoolActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limiter","type":"uint256"}],"name":"setPartnerFeeLimiter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakePoolActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTeamWalletDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setburnRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setstakepoolRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"settaxRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakePoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakePoolWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakepoolRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTrewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakepool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"viewPartnership","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"tokencontract","type":"address"},{"internalType":"uint256","name":"minHoldAmount","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTeamWalletInfo","outputs":[{"internalType":"uint256","name":"charityDivs","type":"uint256"},{"internalType":"uint256","name":"adminDivs","type":"uint256"},{"internalType":"uint256","name":"nftDivs","type":"uint256"},{"internalType":"uint256","name":"stakeDivs","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Contract Creation Code

Decompile Bytecode Switch to Opcodes View

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a6200068c565b620000439064e8d4a51000620006a4565b60068190556007819055600881905560095560016013819055608e601481905560155560c8601655604660175560185560326019556103e8601a55602880546001600160501b03191665010101000000179055620b71b0602955619c40602a5562055730602b55655af3107a4000602c55348015620000c157600080fd5b50600080546001600160a01b031990811633908117909255600180556024805482167310ed43c718714eb63d5aa57b78b54704e256024e90811790915560258054909216732e7bc3122009e9d6487a9b62465c5ecc5466e81e17909155604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905163ad5c464891600480820192602092909190829003018186803b1580156200016e57600080fd5b505afa15801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a99190620006c6565b600280546001600160a01b0319166001600160a01b03928316179055602454604080517fc45a01550000000000000000000000000000000000000000000000000000000081529051919092169163c45a0155916004808301926020929190829003018186803b1580156200021c57600080fd5b505afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002579190620006c6565b6002546040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002bd57600080fd5b505af1158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006c6565b602680546001600160a01b0319166001600160a01b03928316179055306000908152600e6020908152604080832060248054861685529252918290206000199055546002549151908316929190911690620003539062000550565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000387573d6000803e3d6000fd5b5060288054600160581b600160f81b0319166b0100000000000000000000006001600160a01b03938416021790558181166000818152600f60209081526040808320805460ff199081166001908117909255601180855283862080548316841790556010855283862080548316841790556003805489168752848720805484168517905560265489168752908552838620805483168417905530865283862080548316841790555490961684528184208054871682179055601c805473dcd236b4c77711be7e90bc2b57dea812330165b36001600160a01b031991821617909155601d805473c475d33a760c3e0325a33c3aba706c135c456c29908316179055601e80547370117981e4c9fa0309a9bc83412305281db5af8b9083168117909155601f80549092161790557f240c61d8c007a2530a063e3b0321c8922b6968a6cc0d5e816e2344f887441ebd80548716821790557f593c9f2fe20d73d68078ad926fc4bcb20b3b0cc69d71769263bb806bc511d900805490961617909455600654838352600d82528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620006f1565b612804806200612283390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115620005ce578160001904821115620005b257620005b26200055e565b80851615620005c057918102915b93841c939080029062000592565b509250929050565b600082620005e75750600162000686565b81620005f65750600062000686565b81600181146200060f57600281146200061a576200063a565b600191505062000686565b60ff8411156200062e576200062e6200055e565b50506001821b62000686565b5060208310610133831016604e8410600b84101617156200065f575081810a62000686565b6200066b83836200058d565b80600019048211156200068257620006826200055e565b0290505b92915050565b60006200069d60ff841683620005d6565b9392505050565b6000816000190483118215151615620006c157620006c16200055e565b500290565b600060208284031215620006d957600080fd5b81516001600160a01b03811681146200069d57600080fd5b615a2180620007016000396000f3fe6080604052600436106106a05760003560e01c806377d4e37a1161035f578063b786a796116101d1578063dd62ed3e11610102578063f3107ee7116100a0578063f708a64f1161007a578063f708a64f14611429578063f84ba65d14611449578063f887ea4014611469578063f89893461461148957600080fd5b8063f3107ee7146113de578063f4c85091146113fe578063f59d047c1461141357600080fd5b8063e2b88782116100dc578063e2b8878214611369578063f1f3bca314611389578063f25f136c146113a9578063f2fde38b146113be57600080fd5b8063dd62ed3e146112b9578063df20fd49146112ff578063e27b95a71461131f57600080fd5b8063c7606d211161016f578063cc4b12e511610149578063cc4b12e514611219578063cf2157ea14611263578063d129c17714611283578063d608b3b2146112a357600080fd5b8063c7606d21146111c3578063c7e42c2f146111e3578063ca6eddeb146111f957600080fd5b8063bea23c6b116101ab578063bea23c6b1461114a578063bee3eae41461116d578063bf56b3711461118d578063c3647c8c146111a357600080fd5b8063b786a796146110f5578063b99fe6471461110a578063bac283fe1461112a57600080fd5b806390e23014116102ab5780639cc0e35711610249578063a9059cbb11610223578063a9059cbb1461107d578063ac5433f21461109d578063b16a3bb1146110b2578063b340348d146110d357600080fd5b80639cc0e3571461101c578063a7d742ba1461103d578063a8aa1b311461105d57600080fd5b8063943ff60711610285578063943ff60714610fa157806395d89b4114610fb757806398a17ed214610fe75780639c95df3414610ffc57600080fd5b806390e2301414610f4b57806391d55f4114610f6157806393d8e30214610f8157600080fd5b80637dc0d1d0116103185780638877bf2e116102f25780638877bf2e14610ebd578063893d20e814610edd5780638b3e65d214610efb5780638b42507f14610f1b57600080fd5b80637dc0d1d014610e5d57806382122d9814610e7d57806383b09dcf14610e9d57600080fd5b806377d4e37a14610da457806378109e5414610dc35780637b20876914610dd95780637bc000ca14610df95780637c542bf814610e0e5780637d9b451414610e4757600080fd5b806333ac2627116105135780635192c82c1161044457806369fe0e2d116103e2578063719f04b4116103bc578063719f04b414610d2e578063736ad05014610d4e57806376c7a80714610d6e5780637791563914610d8e57600080fd5b806369fe0e2d14610cbe5780636ddd171314610cde57806370a0823114610cf857600080fd5b8063634341fc1161041e578063634341fc14610c5357806364319e3314610c68578063658d4b7f14610c7e57806368d86de614610c9e57600080fd5b80635192c82c14610c07578063571ac8b014610c1d57806359bb84cd14610c3d57600080fd5b80633f4218e0116104b157806346100e4a1161048b57806346100e4a14610b8e57806346469ae714610bb157806347c421b514610bc75780634e70a60414610be757600080fd5b80633f4218e014610b0e578063433c994c14610b3e5780634355855a14610b5e57600080fd5b806336b19cd7116104ed57806336b19cd714610a715780633bbac57914610aa95780633c8e556d14610ad95780633dc4734514610af957600080fd5b806333ac262714610a11578063342aa8b514610a315780633615e7d514610a5157600080fd5b80631df4ccfc116105ed5780632807293a1161058b5780632b112e49116105655780632b112e491461099c5780632d686ebb146109b15780632f54bf6e146109c6578063313ce567146109f557600080fd5b80632807293a14610933578063292c914a14610948578063297bc9471461096957600080fd5b8063236a4afb116105c7578063236a4afb146108b257806323b63585146108d357806323b872dd146108f357806327c89d301461091357600080fd5b80631df4ccfc1461085b57806320104289146108715780632362dd391461089257600080fd5b80630c3f9cbd1161065a578063168f857a11610634578063168f857a14610806578063180b0d7e1461081b57806318160ddd146108315780631b3efe301461084657600080fd5b80630c3f9cbd146107a3578063149537f2146107b8578063151396ff146107e657600080fd5b8062b75d1c146106ac5780630197aeac146106ce57806306fdde03146106ee57806308cad4e514610733578063095ea7b31461075357806309ec68301461078357600080fd5b366106a757005b600080fd5b3480156106b857600080fd5b506106cc6106c7366004615178565b61149e565b005b3480156106da57600080fd5b506106cc6106e9366004615195565b6114ef565b3480156106fa57600080fd5b5060408051808201909152600a8152690d6ded4d25ccac2e4e8d60b31b60208201525b60405161072a919061520f565b60405180910390f35b34801561073f57600080fd5b506106cc61074e366004615222565b6115a9565b34801561075f57600080fd5b5061077361076e366004615250565b611645565b604051901515815260200161072a565b34801561078f57600080fd5b506106cc61079e366004615178565b611716565b3480156107af57600080fd5b506106cc61175c565b3480156107c457600080fd5b506107d86107d336600461527c565b611868565b60405190815260200161072a565b3480156107f257600080fd5b506106cc610801366004615299565b6118ee565b34801561081257600080fd5b506107d861199e565b34801561082757600080fd5b506107d8601a5481565b34801561083d57600080fd5b506006546107d8565b34801561085257600080fd5b506106cc611a2b565b34801561086757600080fd5b506107d860175481565b34801561087d57600080fd5b5060285461077390600160401b900460ff1681565b34801561089e57600080fd5b506106cc6108ad3660046152da565b611aca565b3480156108be57600080fd5b5060285461077390600160481b900460ff1681565b3480156108df57600080fd5b506107736108ee366004615222565b611df1565b3480156108ff57600080fd5b5061077361090e366004615299565b611e34565b34801561091f57600080fd5b506106cc61092e366004615222565b611ef6565b34801561093f57600080fd5b506106cc611ff6565b34801561095457600080fd5b5060285461077390600160381b900460ff1681565b34801561097557600080fd5b50610989610984366004615222565b612084565b60405161072a979695949392919061530f565b3480156109a857600080fd5b506107d8612274565b3480156109bd57600080fd5b506106cc6122c1565b3480156109d257600080fd5b506107736109e136600461527c565b6000546001600160a01b0391821691161490565b348015610a0157600080fd5b506040516009815260200161072a565b348015610a1d57600080fd5b506106cc610a2c366004615222565b6122ff565b348015610a3d57600080fd5b506106cc610a4c36600461536d565b61236f565b348015610a5d57600080fd5b506106cc610a6c366004615222565b6123cb565b348015610a7d57600080fd5b50601d54610a91906001600160a01b031681565b6040516001600160a01b03909116815260200161072a565b348015610ab557600080fd5b50610773610ac436600461527c565b60126020526000908152604090205460ff1681565b348015610ae557600080fd5b506106cc610af43660046153a6565b612499565b348015610b0557600080fd5b506106cc612888565b348015610b1a57600080fd5b50610773610b2936600461527c565b600f6020526000908152604090205460ff1681565b348015610b4a57600080fd5b506106cc610b59366004615178565b612931565b348015610b6a57600080fd5b50610773610b7936600461527c565b60116020526000908152604090205460ff1681565b348015610b9a57600080fd5b50610ba361297d565b60405161072a929190615446565b348015610bbd57600080fd5b506107d860075481565b348015610bd357600080fd5b506106cc610be236600461527c565b612a12565b348015610bf357600080fd5b506106cc610c02366004615222565b612a5e565b348015610c1357600080fd5b506107d860145481565b348015610c2957600080fd5b50610773610c3836600461527c565b612abe565b348015610c4957600080fd5b506107d860195481565b348015610c5f57600080fd5b506106cc612acc565b348015610c7457600080fd5b506107d860215481565b348015610c8a57600080fd5b506106cc610c9936600461536d565b612b3e565b348015610caa57600080fd5b506028546107739062010000900460ff1681565b348015610cca57600080fd5b506106cc610cd9366004615222565b612b93565b348015610cea57600080fd5b506028546107739060ff1681565b348015610d0457600080fd5b506107d8610d1336600461527c565b6001600160a01b03166000908152600d602052604090205490565b348015610d3a57600080fd5b506106cc610d49366004615222565b612c39565b348015610d5a57600080fd5b506106cc610d69366004615222565b612cd5565b348015610d7a57600080fd5b506106cc610d89366004615178565b612d04565b348015610d9a57600080fd5b506107d860165481565b348015610db057600080fd5b5060285461077390610100900460ff1681565b348015610dcf57600080fd5b506107d860095481565b348015610de557600080fd5b50601c54610a91906001600160a01b031681565b348015610e0557600080fd5b50600b546107d8565b348015610e1a57600080fd5b5060205460215460225460235460408051948552602085019390935291830152606082015260800161072a565b348015610e5357600080fd5b506107d860235481565b348015610e6957600080fd5b50602554610a91906001600160a01b031681565b348015610e8957600080fd5b506106cc610e98366004615222565b612d4f565b348015610ea957600080fd5b506107d8610eb836600461527c565b612dfa565b348015610ec957600080fd5b506106cc610ed8366004615178565b612e34565b348015610ee957600080fd5b506000546001600160a01b0316610a91565b348015610f0757600080fd5b506106cc610f16366004615222565b612e78565b348015610f2757600080fd5b50610773610f3636600461527c565b60106020526000908152604090205460ff1681565b348015610f5757600080fd5b506107d860155481565b348015610f6d57600080fd5b506106cc610f7c366004615222565b612f13565b348015610f8d57600080fd5b50601f54610a91906001600160a01b031681565b348015610fad57600080fd5b506107d860225481565b348015610fc357600080fd5b5060408051808201909152600781526625a7a524903b1960c91b602082015261071d565b348015610ff357600080fd5b506106cc612fb1565b34801561100857600080fd5b506106cc611017366004615195565b61303f565b34801561102857600080fd5b5060285461077390600160301b900460ff1681565b34801561104957600080fd5b506106cc61105836600461527c565b613119565b34801561106957600080fd5b50602654610a91906001600160a01b031681565b34801561108957600080fd5b50610773611098366004615250565b61337e565b3480156110a957600080fd5b50610a9161338b565b3480156110be57600080fd5b50602854610773906301000000900460ff1681565b3480156110df57600080fd5b5060285461077390640100000000900460ff1681565b34801561110157600080fd5b506107d8613413565b34801561111657600080fd5b506106cc611125366004615178565b613463565b34801561113657600080fd5b506106cc611145366004615299565b6134ad565b34801561115657600080fd5b506028546107739065010000000000900460ff1681565b34801561117957600080fd5b506106cc611188366004615195565b613552565b34801561119957600080fd5b506107d860275481565b3480156111af57600080fd5b506106cc6111be366004615222565b6135c7565b3480156111cf57600080fd5b506106cc6111de366004615195565b613646565b3480156111ef57600080fd5b506107d8601b5481565b34801561120557600080fd5b506106cc611214366004615222565b6136e7565b34801561122557600080fd5b5061123961123436600461527c565b613716565b6040805195865260208601949094529284019190915260608301521515608082015260a00161072a565b34801561126f57600080fd5b506107d861127e36600461527c565b6137b8565b34801561128f57600080fd5b506106cc61129e366004615178565b6137f2565b3480156112af57600080fd5b506107d860205481565b3480156112c557600080fd5b506107d86112d436600461549d565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561130b57600080fd5b506106cc61131a3660046154cb565b61383e565b34801561132b57600080fd5b5061133461387f565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161072a565b34801561137557600080fd5b506106cc611384366004615222565b613926565b34801561139557600080fd5b506107d86113a4366004615178565b6139d8565b3480156113b557600080fd5b506106cc613a10565b3480156113ca57600080fd5b506106cc6113d936600461527c565b613a69565b3480156113ea57600080fd5b50601e54610a91906001600160a01b031681565b34801561140a57600080fd5b506106cc613ae7565b34801561141f57600080fd5b506107d860085481565b34801561143557600080fd5b506106cc61144436600461536d565b613b6b565b34801561145557600080fd5b506106cc61146436600461536d565b613b9f565b34801561147557600080fd5b50602454610a91906001600160a01b031681565b34801561149557600080fd5b506106cc613bf4565b6000546001600160a01b031633146114d15760405162461bcd60e51b81526004016114c8906154e9565b60405180910390fd5b6028805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146115195760405162461bcd60e51b81526004016114c8906154e9565b60288054600160501b60ff60501b19909116179081905560405163e2b2782d60e01b81526004810184905260248101839052600160581b9091046001600160a01b03169063e2b2782d90604401600060405180830381600087803b15801561158057600080fd5b505af1158015611594573d6000803e3d6000fd5b50506028805460ff60501b1916905550505050565b6000546001600160a01b031633146115d35760405162461bcd60e51b81526004016114c8906154e9565b6703782dace9d900008110156116405760405162461bcd60e51b815260206004820152602c60248201527f53656c6c206c696d6974206d757374206e6f74206265206c657373207468616e60448201526b203235304d20746f6b656e7360a01b60648201526084016114c8565b600855565b600080546001600160a01b031633146116b157602854600160481b900460ff166116b15760405162461bcd60e51b815260206004820152601e60248201527f4c697175696420686173206e6f74206265656e2061646465642079657421000060448201526064016114c8565b336000818152600e602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b031633146117405760405162461bcd60e51b81526004016114c8906154e9565b60288054911515620100000262ff000019909216919091179055565b6002600154141561177f5760405162461bcd60e51b81526004016114c890615509565b60026001556040516370a0823160e01b815233600482015260009030906370a082319060240160206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f59190615540565b602854604051630a5b654b60e11b8152919250600160581b90046001600160a01b0316906314b6ca969061182f9033908590600401615559565b600060405180830381600087803b15801561184957600080fd5b505af115801561185d573d6000803e3d6000fd5b505060018055505050565b602854604051630958a1f960e01b81526001600160a01b038381166004830152600092600160581b90041690630958a1f9906024015b60206040518083038186803b1580156118b657600080fd5b505afa1580156118ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117109190615540565b6000546001600160a01b031633146119185760405162461bcd60e51b81526004016114c8906154e9565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906119469085908590600401615559565b602060405180830381600087803b15801561196057600080fd5b505af1158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190615572565b50505050565b60006028600b9054906101000a90046001600160a01b03166001600160a01b0316634ff3dff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190615540565b905090565b6000546001600160a01b03163314611a555760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b03166320c9f5fc306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b505af1158015611ac3573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314611af45760405162461bcd60e51b81526004016114c8906154e9565b6003546001600160a01b03848116911614801590611b2057506004546001600160a01b03848116911614155b8015611b3a57506026546001600160a01b03848116911614155b611b9a5760405162461bcd60e51b815260206004820152602b60248201527f506c6561736520696e70757420612076616c696420746f6b656e20636f6e747260448201526a616374206164647265737360a81b60648201526084016114c8565b611ba383613c78565b611bfd5760405162461bcd60e51b815260206004820152602560248201527f506c6561736520696e70757420616e2061637475616c20746f6b656e20636f6e6044820152641d1c9858dd60da1b60648201526084016114c8565b6001600160a01b0383166000908152600c602052604090205460ff1615611c965760405162461bcd60e51b815260206004820152604160248201527f436f6e747261637420616c72656164792061646465642e20546f206368616e6760448201527f6520706172616d657465727320706c656173652072656d6f76652066697273746064820152601760f91b608482015260a4016114c8565b60008211611cf15760405162461bcd60e51b815260206004820152602260248201527f4d696e20686f6c64206d7573742062652067726561746572207468616e207a65604482015261726f60f01b60648201526084016114c8565b601754811115611d555760405162461bcd60e51b815260206004820152602960248201527f446973636f756e742063616e6e6f742062652067726561746572207468616e206044820152680e8dee8c2d840e8c2f60bb1b60648201526084016114c8565b600b80546000908152600a6020908152604080832080546001600160a01b039098166001600160a01b0319988916811782556001808301989098556002820196909655600301805460ff199081168817909155858452600c909252822080549091168517905581549384018255527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99091018054909216179055565b600080546001600160a01b03163314611e1c5760405162461bcd60e51b81526004016114c8906154e9565b6003546117109030906001600160a01b031684613cb4565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914611ee1576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054611ebc918490613d9a565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b611eec848484613dd4565b90505b9392505050565b6000546001600160a01b03163314611f205760405162461bcd60e51b81526004016114c8906154e9565b62278d00811015611fa95760405162461bcd60e51b815260206004820152604760248201527f486f6c6465722073686f756c642068617665206d696e696d756d20333020646160448201527f79732028323539323030302920746f20776974686472617720756e636c61696d6064820152666564206469767360c81b608482015260a4016114c8565b60285460405163352e051560e11b815260048101839052600160581b9091046001600160a01b031690636a5c0a2a906024015b600060405180830381600087803b158015611aaf57600080fd5b6000546001600160a01b031633146120205760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b0316631b51972c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561207057600080fd5b505af1158015611998573d6000803e3d6000fd5b6000818152600a6020526040808220805482516306fdde0360e01b815292516060948594909384938493849384939284926001600160a01b03909116916306fdde039160048083019286929190829003018186803b1580156120e557600080fd5b505afa1580156120f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261212191908101906155d6565b905060008260000160009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561217557600080fd5b505afa158015612189573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121b191908101906155d6565b905060008360000160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561220557600080fd5b505afa158015612219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223d919061566a565b845460018601546002870154600390970154959f949e50919c506001600160a01b03169a50985092965060ff909116945092505050565b6004546001600160a01b03166000908152600d6020526040812054611a26906003546001600160a01b03166000908152600d60205260409020546122bb9060065490614231565b90614231565b6000546001600160a01b031633146122eb5760405162461bcd60e51b81526004016114c8906154e9565b6028805468ff000000000000000019169055565b600260015414156123225760405162461bcd60e51b81526004016114c890615509565b6002600155602854601c54604051631c35e02d60e11b81523360048201526001600160a01b03918216602482015260448101849052600160581b909204169063386bc05a9060640161182f565b6000546001600160a01b031633146123995760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b0382166000908152601260205260409020805460ff19168215151790556123c78282614273565b5050565b6000546001600160a01b031633146123f55760405162461bcd60e51b81526004016114c8906154e9565b600081116124625760405162461bcd60e51b815260206004820152603460248201527f6d696e696d756d20646973747269627574696f6e206c6576656c206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016114c8565b602854604051634c72dff760e11b815260048101839052600160581b9091046001600160a01b0316906398e5bfee90602401611fdc565b6000546001600160a01b031633146124c35760405162461bcd60e51b81526004016114c8906154e9565b6004546001600160a01b03858116911614156125315760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f74206265207a65726f206044820152666164647265737360c81b60648201526084016114c8565b6004546001600160a01b038481169116141561259d5760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f74206265207a65726f206164604482015264647265737360d81b60648201526084016114c8565b6004546001600160a01b038381169116141561260e5760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f74206265207a65604482015269726f206164647265737360b01b60648201526084016114c8565b6004546001600160a01b038281169116141561267e5760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f74206265207a65726044820152686f206164647265737360b81b60648201526084016114c8565b6003546001600160a01b03858116911614156126ec5760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f742062652064656164206044820152666164647265737360c81b60648201526084016114c8565b6003546001600160a01b03848116911614156127585760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f742062652064656164206164604482015264647265737360d81b60648201526084016114c8565b6003546001600160a01b03838116911614156127c95760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f742062652064656044820152696164206164647265737360b01b60648201526084016114c8565b6003546001600160a01b03828116911614156128395760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f742062652064656160448201526864206164647265737360b81b60648201526084016114c8565b601c80546001600160a01b03199081166001600160a01b0396871617909155601e8054821693861693909317909255601d8054831693851693909317909255601f805490911691909216179055565b6000546001600160a01b031633146128b25760405162461bcd60e51b81526004016114c8906154e9565b602854600160401b900460ff16156129165760405162461bcd60e51b815260206004820152602160248201527f506c656173652064697361626c652061697264726f70206d6f646520666972736044820152601d60fa1b60648201526084016114c8565b6028805469ff0000000000000000001916600160481b179055565b6000546001600160a01b0316331461295b5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515650100000000000265ff000000000019909216919091179055565b6060806028600b9054906101000a90046001600160a01b03166001600160a01b03166346100e4a6040518163ffffffff1660e01b815260040160006040518083038186803b1580156129ce57600080fd5b505afa1580156129e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0a919081019061571c565b915091509091565b6000546001600160a01b03163314612a3c5760405162461bcd60e51b81526004016114c8906154e9565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b60026001541415612a815760405162461bcd60e51b81526004016114c890615509565b60026001556028546040516335027f1960e01b8152600160581b9091046001600160a01b0316906335027f199061182f9033908590600401615559565b600061171082600019611645565b6000546001600160a01b03163314612af65760405162461bcd60e51b81526004016114c8906154e9565b60025460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db091303191600480830192600092919082900301818588803b158015611aaf57600080fd5b6000546001600160a01b03163314612b685760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612bbd5760405162461bcd60e51b81526004016114c8906154e9565b6064811115612c345760405162461bcd60e51b815260206004820152603760248201527f546f74616c20466565206d757374206265206265747765656e203020616e642060448201527f3130302028313030203d2074656e2070657263656e742900000000000000000060648201526084016114c8565b601755565b6000546001600160a01b03163314612c635760405162461bcd60e51b81526004016114c8906154e9565b601a54612c71906004614355565b811115612cd05760405162461bcd60e51b815260206004820152602760248201527f74617820726174696f2063616e6e6f74206265206d6f7265207468616e2032356044820152663020283235252960c81b60648201526084016114c8565b601655565b6000546001600160a01b03163314612cff5760405162461bcd60e51b81526004016114c8906154e9565b600755565b6000546001600160a01b03163314612d2e5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515600160301b0266ff00000000000019909216919091179055565b6000546001600160a01b03163314612d795760405162461bcd60e51b81526004016114c8906154e9565b601654612d87906002614355565b811115612df55760405162461bcd60e51b815260206004820152603660248201527f6275726e20726174696f2063616e6e6f74206265206d6f7265207468616e203560448201527506040e0cae4c6cadce840decc40e8dee8c2d840e8c2f60531b60648201526084016114c8565b601455565b60285460405163051fa63360e31b81526001600160a01b038381166004830152600092600160581b900416906328fd31989060240161189e565b6000546001600160a01b03163314612e5e5760405162461bcd60e51b81526004016114c8906154e9565b602880549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314612ea25760405162461bcd60e51b81526004016114c8906154e9565b60648111158015612eb4575060018110155b612f0e5760405162461bcd60e51b815260206004820152602560248201527f666565206c696d69746572206d757374206265206265747765656e203120616e604482015264064203130360dc1b60648201526084016114c8565b601955565b6000546001600160a01b03163314612f3d5760405162461bcd60e51b81526004016114c8906154e9565b6703782dace9d90000811015612fac5760405162461bcd60e51b815260206004820152602e60248201527f57616c6c6574206c696d6974206d757374206e6f74206265206c65737320746860448201526d616e203235304d20746f6b656e7360901b60648201526084016114c8565b600955565b6000546001600160a01b03163314612fdb5760405162461bcd60e51b81526004016114c8906154e9565b60285460295460405163aa60e73360e01b81526004810191909152600160581b9091046001600160a01b03169063aa60e73390602401600060405180830381600087803b15801561302b57600080fd5b505af192505050801561303c575060015b50565b6000546001600160a01b031633146130695760405162461bcd60e51b81526004016114c8906154e9565b600082116130895760405162461bcd60e51b81526004016114c8906157e1565b600081116130a95760405162461bcd60e51b81526004016114c8906157e1565b6028546040516349465b8360e11b81526004810184905260248101839052600160581b9091046001600160a01b03169063928cb706906044015b600060405180830381600087803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146131435760405162461bcd60e51b81526004016114c8906154e9565b600b5480156123c75760005b81811015613379576000818152600a6020526040902080546001600160a01b0385811691161415613368578282141561320b5760045481546001600160a01b0319166001600160a01b039182161782556000600183018190556002830181905560038301805460ff199081169091559186168152600c6020526040902080549091169055600b8054806131e4576131e4615824565b600082815260209020810160001990810180546001600160a01b0319169055019055613368565b6000600a60006001600b805490506132239190615850565b815260208082019290925260409081016000908120805486546001600160a01b03199081166001600160a01b03928316178855600180840180548a83015560028086018054918c01919091556003808c01805460ff1990811686179091558f87168952600c909a5297872080548a169055600454865490941693909416929092178455908490559290559182018054909316909255600b8054919350916132c991615850565b815481106132d9576132d9615867565b600091825260209091200154600b80546001600160a01b03909216918590811061330557613305615867565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b80548061334457613344615824565b600082815260209020810160001990810180546001600160a01b0319169055019055505b506133728161587d565b905061314f565b505050565b6000611eef338484613dd4565b60006028600b9054906101000a90046001600160a01b03166001600160a01b031663162db73f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156133db57600080fd5b505afa1580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190615898565b60006028600b9054906101000a90046001600160a01b03166001600160a01b0316631b57ef7d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ee57600080fd5b6000546001600160a01b0316331461348d5760405162461bcd60e51b81526004016114c8906154e9565b602880549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b031633146134d75760405162461bcd60e51b81526004016114c8906154e9565b60285460405163151396ff60e01b81526001600160a01b038581166004830152848116602483015260448201849052600160581b9092049091169063151396ff90606401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461357c5760405162461bcd60e51b81526004016114c8906154e9565b6000821161359c5760405162461bcd60e51b81526004016114c8906157e1565b600081116135bc5760405162461bcd60e51b81526004016114c8906157e1565b602991909155602a55565b6000546001600160a01b031633146135f15760405162461bcd60e51b81526004016114c8906154e9565b600081116136415760405162461bcd60e51b815260206004820152601f60248201527f426c6f636b732073686f756c642062652067726561746572207468616e20300060448201526064016114c8565b601355565b600260015414156136695760405162461bcd60e51b81526004016114c890615509565b6002600155602854604051633900720360e21b81523360048201526024810184905260448101839052600160581b9091046001600160a01b03169063e401c80c90606401600060405180830381600087803b1580156136c757600080fd5b505af11580156136db573d6000803e3d6000fd5b50506001805550505050565b6000546001600160a01b031633146137115760405162461bcd60e51b81526004016114c8906154e9565b601855565b602854604051630da3ab3560e31b81526001600160a01b0383811660048301526000928392839283928392600160581b90910490911690636d1d59a89060240160a06040518083038186803b15801561376e57600080fd5b505afa158015613782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a691906158b5565b939a9299509097509550909350915050565b602854604051633b1eaf3160e01b81526001600160a01b038381166004830152600092600160581b90041690633b1eaf319060240161189e565b6000546001600160a01b0316331461381c5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515600160381b0267ff0000000000000019909216919091179055565b6000546001600160a01b031633146138685760405162461bcd60e51b81526004016114c8906154e9565b6028805460ff191692151592909217909155602c55565b60008060008060008060006028600b9054906101000a90046001600160a01b03166001600160a01b031663c11df1d76040518163ffffffff1660e01b815260040160e06040518083038186803b1580156138d857600080fd5b505afa1580156138ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139109190615902565b959d949c50929a50909850965094509092509050565b6000546001600160a01b031633146139505760405162461bcd60e51b81526004016114c8906154e9565b60165461395e906002614355565b8111156139d35760405162461bcd60e51b815260206004820152603b60248201527f7374616b65706f6f6c20726174696f2063616e6e6f74206265206d6f7265207460448201527f68616e2035302070657263656e74206f6620746f74616c20746178000000000060648201526084016114c8565b601555565b6000436013546027546139eb9190615956565b1015806139f55750815b15613a0857601a54611710906001614231565b505060175490565b6000546001600160a01b03163314613a3a5760405162461bcd60e51b81526004016114c8906154e9565b60405133908190303180156108fc02916000818181858888f193505050501580156123c7573d6000803e3d6000fd5b6000546001600160a01b03163314613a935760405162461bcd60e51b81526004016114c8906154e9565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314613b115760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b03166324cc72a2306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b6000546001600160a01b03163314613b955760405162461bcd60e51b81526004016114c8906154e9565b6123c78282614273565b6000546001600160a01b03163314613bc95760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314613c1e5760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f8015801590613cac5750818114155b949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054613d05918490613d9a565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054613d349083614397565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613d889086815260200190565b60405180910390a35060019392505050565b60008184841115613dbe5760405162461bcd60e51b81526004016114c8919061520f565b506000613dcb8486615850565b95945050505050565b6000808211613e355760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e7420416d6f756e743a2063616e6e6f742073656e646044820152662030204b4f4a4960c81b60648201526084016114c8565b602854600160401b900460ff1615613e5957613e52848484613cb4565b9050611eef565b602854600160501b900460ff1615613e7657613e52848484613cb4565b613e818484846143f6565b6026546001600160a01b0384811691161415613eac57613e9f6144fd565b15613eac57613eac614553565b602754158015613ec957506026546001600160a01b038481169116145b15613ef9576001600160a01b0384166000908152600d6020526040902054613ef057600080fd5b613ef943602755565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600d9091529190912054613f4b918490613d9a565b6001600160a01b0385166000908152600d6020908152604080832093909355600f90529081205460ff16158015613f9b57506001600160a01b0384166000908152600f602052604090205460ff16155b613fa55782613fb0565b613fb0858585614d71565b6026549091506001600160a01b03858116911614801590613fea57506001600160a01b03841660009081526010602052604090205460ff16155b15614071576001600160a01b0384166000908152600d60205260409020546009546140158383615956565b111561406f5760405162461bcd60e51b815260206004820152602360248201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152621d5b9d60ea1b60648201526084016114c8565b505b6001600160a01b0384166000908152600d60205260409020546140949082614397565b6001600160a01b038086166000908152600d602090815260408083209490945591881681526011909152205460ff16614140576028546001600160a01b038681166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca969161411391899190600401615559565b600060405180830381600087803b15801561412d57600080fd5b505af192505050801561413e575060015b505b6001600160a01b03841660009081526011602052604090205460ff166141d9576028546001600160a01b038581166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca96916141ac91889190600401615559565b600060405180830381600087803b1580156141c657600080fd5b505af19250505080156141d7575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161421e91815260200190565b60405180910390a3506001949350505050565b6000611eef83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d9a565b6001600160a01b038216301480159061429a57506026546001600160a01b03838116911614155b6142a357600080fd5b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561430957602854604051630a5b654b60e11b8152600160581b9091046001600160a01b0316906314b6ca96906130e3908590600090600401615559565b6028546001600160a01b038381166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca96916130e391869190600401615559565b6000611eef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506150bd565b6000806143a48385615956565b905083811015611eef5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016114c8565b6026546001600160a01b0384811691161415614479576007548111158061443557506001600160a01b03821660009081526010602052604090205460ff165b6144795760405162461bcd60e51b8152602060048201526015602482015274109d5e48151608131a5b5a5d08115e18d959591959605a1b60448201526064016114c8565b6026546001600160a01b038381169116141561337957600854811115806144b857506001600160a01b03831660009081526010602052604090205460ff165b6133795760405162461bcd60e51b815260206004820152601660248201527514d95b1b08151608131a5b5a5d08115e18d95959195960521b60448201526064016114c8565b6026546000906001600160a01b031633148015906145255750602854600160501b900460ff16155b8015614533575060285460ff165b8015611a26575050602c54306000908152600d6020526040902054101590565b6028805460ff60501b1916600160501b1790556040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b15801561459f57600080fd5b505afa1580156145b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d79190615540565b905060006145fc601a546145f6601454856150eb90919063ffffffff16565b90614355565b60035460405163a9059cbb60e01b8152919250309163a9059cbb91614631916001600160a01b03909116908590600401615559565b602060405180830381600087803b15801561464b57600080fd5b505af115801561465f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146839190615572565b50602854610100900460ff16156147675760006146b1601a546145f6601554866150eb90919063ffffffff16565b90506146bd8382614231565b601f5460405163a9059cbb60e01b8152919450309163a9059cbb916146f2916001600160a01b03909116908590600401615559565b602060405180830381600087803b15801561470c57600080fd5b505af1158015614720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147449190615572565b506023546147529082614397565b60235561475f8383614231565b925050614774565b6147718282614231565b91505b60408051600280825260608201835260009260208301908036833701905050905030816000815181106147a9576147a9615867565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106147da576147da615867565b6001600160a01b039092166020928302919091019091015260285430319060ff65010000000000909104161561492a576002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561484e57600080fd5b505afa158015614862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148869190615540565b905080156149285760025460265460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926148c4929116908590600401615559565b602060405180830381600087803b1580156148de57600080fd5b505af11580156148f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149169190615572565b50601b546149249082614397565b601b555b505b60245460405163791ac94760e01b81526001600160a01b039091169063791ac9479061496390879060009087903090429060040161596e565b600060405180830381600087803b15801561497d57600080fd5b505af1158015614991573d6000803e3d6000fd5b50600092506149a4915050303183614231565b905060006149c3601a546145f6601654856150eb90919063ffffffff16565b602854909150819081908190600090819062010000900460ff1615614ac85750846149f6816122bb868187818d8c614231565b601e54602a546040519294506000926001600160a01b0390921691849084818181858888f193505050503d8060008114614a4c576040519150601f19603f3d011682016040523d82523d6000602084013e614a51565b606091505b5050905080614ab25760405162461bcd60e51b815260206004820152602760248201527f4e4654207265776172642077616c6c65742072656a656374656420424e4220746044820152663930b739b332b960c91b60648201526084016114c8565b602254614abf9083614397565b60225550614adb565b614ad8846122bb85818b8a614231565b91505b6028546301000000900460ff1615614b51576028600b9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614b3d57600080fd5b505af193505050508015614b4f575060015b505b602854640100000000900460ff1615614cee57601c54602a546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614bb6576040519150601f19603f3d011682016040523d82523d6000602084013e614bbb565b606091505b5050905080614c185760405162461bcd60e51b8152602060048201526024808201527f436861726974792077616c6c65742072656a656374656420424e42207472616e60448201526339b332b960e11b60648201526084016114c8565b602054614c259087614397565b602055601d54602a546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614c7a576040519150601f19603f3d011682016040523d82523d6000602084013e614c7f565b606091505b5050905080614cdb5760405162461bcd60e51b815260206004820152602260248201527f41646d696e2077616c6c65742072656a656374656420424e42207472616e736660448201526132b960f11b60648201526084016114c8565b602154614ce89087614397565b60215550505b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d3e57600080fd5b505af1158015614d52573d6000803e3d6000fd5b50506028805460ff60501b191690555050505050505050505050505050565b6001600160a01b03831660009081526012602052604081205481908190614d9a9060ff166139d8565b602854909150600090600160301b900460ff168015614dc757506026546001600160a01b03878116911614155b8015614de057506026546001600160a01b038881169116145b15614eba57600b5460005b818111614eb7576000818152600a60205260409020600381015460ff1615614ea657600181015481546040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a082319060240160206040518083038186803b158015614e5657600080fd5b505afa158015614e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e8e9190615540565b10614ea6576002810154614ea3908590614397565b93505b50614eb08161587d565b9050614deb565b50505b602854600160381b900460ff168015614ee157506026546001600160a01b03878116911614155b8015614efa57506026546001600160a01b038881169116145b15614fb557602554604051630f39254f60e41b8152600481018790526000916001600160a01b03169063f39254f090602401602060405180830381600087803b158015614f4657600080fd5b505af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190615540565b9050614f8e816305f5e100614355565b9050614fa56018548261439790919063ffffffff16565b9050614fb18282614397565b9150505b80614fd257601a54614fcb906145f687856150eb565b9250615035565b614fec60646145f6601954856150eb90919063ffffffff16565b8111156150145761500d60646145f6601954856150eb90919063ffffffff16565b9050615021565b61501e8282614231565b90505b601a54615032906145f687846150eb565b92505b306000908152600d602052604090205461504f9084614397565b306000818152600d6020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906150a09087815260200190565b60405180910390a36150b28584614231565b979650505050505050565b600081836150de5760405162461bcd60e51b81526004016114c8919061520f565b506000613dcb84866159aa565b6000826150fa57506000611710565b600061510683856159cc565b90508261511385836159aa565b14611eef5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016114c8565b801515811461303c57600080fd5b60006020828403121561518a57600080fd5b8135611eef8161516a565b600080604083850312156151a857600080fd5b50508035926020909101359150565b60005b838110156151d25781810151838201526020016151ba565b838111156119985750506000910152565b600081518084526151fb8160208601602086016151b7565b601f01601f19169290920160200192915050565b602081526000611eef60208301846151e3565b60006020828403121561523457600080fd5b5035919050565b6001600160a01b038116811461303c57600080fd5b6000806040838503121561526357600080fd5b823561526e8161523b565b946020939093013593505050565b60006020828403121561528e57600080fd5b8135611eef8161523b565b6000806000606084860312156152ae57600080fd5b83356152b98161523b565b925060208401356152c98161523b565b929592945050506040919091013590565b6000806000606084860312156152ef57600080fd5b83356152fa8161523b565b95602085013595506040909401359392505050565b60e08152600061532260e083018a6151e3565b8281036020840152615334818a6151e3565b60ff98909816604084015250506001600160a01b03949094166060850152608084019290925260a0830152151560c09091015292915050565b6000806040838503121561538057600080fd5b823561538b8161523b565b9150602083013561539b8161516a565b809150509250929050565b600080600080608085870312156153bc57600080fd5b84356153c78161523b565b935060208501356153d78161523b565b925060408501356153e78161523b565b915060608501356153f78161523b565b939692955090935050565b600081518084526020808501945080840160005b8381101561543b5781516001600160a01b031687529582019590820190600101615416565b509495945050505050565b6040815260006154596040830185615402565b82810360208481019190915284518083528582019282019060005b8181101561549057845183529383019391830191600101615474565b5090979650505050505050565b600080604083850312156154b057600080fd5b82356154bb8161523b565b9150602083013561539b8161523b565b600080604083850312156154de57600080fd5b823561526e8161516a565b60208082526006908201526510a7bbb732b960d11b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006020828403121561555257600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561558457600080fd5b8151611eef8161516a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155ce576155ce61558f565b604052919050565b6000602082840312156155e857600080fd5b815167ffffffffffffffff8082111561560057600080fd5b818401915084601f83011261561457600080fd5b8151818111156156265761562661558f565b615639601f8201601f19166020016155a5565b915080825285602082850101111561565057600080fd5b6156618160208401602086016151b7565b50949350505050565b60006020828403121561567c57600080fd5b815160ff81168114611eef57600080fd5b600067ffffffffffffffff8211156156a7576156a761558f565b5060051b60200190565b600082601f8301126156c257600080fd5b815160206156d76156d28361568d565b6155a5565b82815260059290921b840181019181810190868411156156f657600080fd5b8286015b8481101561571157805183529183019183016156fa565b509695505050505050565b6000806040838503121561572f57600080fd5b825167ffffffffffffffff8082111561574757600080fd5b818501915085601f83011261575b57600080fd5b8151602061576b6156d28361568d565b82815260059290921b8401810191818101908984111561578a57600080fd5b948201945b838610156157b15785516157a28161523b565b8252948201949082019061578f565b918801519196509093505050808211156157ca57600080fd5b506157d7858286016156b1565b9150509250929050565b60208082526023908201527f6469737472696275746f722063616e6e6f7420626520657175616c20746f207a60408201526265726f60e81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156158625761586261583a565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158915761589161583a565b5060010190565b6000602082840312156158aa57600080fd5b8151611eef8161523b565b600080600080600060a086880312156158cd57600080fd5b8551945060208601519350604086015192506060860151915060808601516158f48161516a565b809150509295509295909350565b600080600080600080600060e0888a03121561591d57600080fd5b5050855160208701516040880151606089015160808a015160a08b015160c0909b0151949c939b50919990985090965094509092509050565b600082198211156159695761596961583a565b500190565b85815284602082015260a06040820152600061598d60a0830186615402565b6001600160a01b0394909416606083015250608001529392505050565b6000826159c757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156159e6576159e661583a565b50029056fea2646970667358221220f765f0b9da2da770d6257de600d125a2a72610af9421d4529ed376c59cebe26464736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000601555619c406017556206ddd060185562278d0060195566038d7ea4c68000601a556658d15e17628000601b553480156200004e57600080fd5b5060405162002804380380620028048339810160408190526200007191620001aa565b6001600160a01b0382166200009b577310ed43c718714eb63d5aa57b78b54704e256024e6200009d565b815b600280546001600160a01b039283166001600160a01b0319918216811790925560008054821633179055600180549385169390911692909217909155604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905163ad5c464891600480820192602092909190829003018186803b1580156200012957600080fd5b505afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001649190620001e2565b600380546001600160a01b0319166001600160a01b039290921691909117905550620002079050565b80516001600160a01b0381168114620001a557600080fd5b919050565b60008060408385031215620001be57600080fd5b620001c9836200018d565b9150620001d9602084016200018d565b90509250929050565b600060208284031215620001f557600080fd5b62000200826200018d565b9392505050565b6125ed80620002176000396000f3fe6080604052600436106102245760003560e01c80634fab0ae811610123578063aa60e733116100ab578063d87db7521161006f578063d87db75214610692578063e2b2782d146106bf578063e2d2e219146106df578063e401c80c146106f5578063efca2eed1461071557600080fd5b8063aa60e733146105b0578063c11df1d7146105d0578063ce7c2ac214610627578063d0e30db014610674578063d627ab791461067c57600080fd5b8063928cb706116100f2578063928cb7061461052e57806398e5bfee1461054e578063997664d71461056e578063a7c3799214610584578063aa37d6101461059a57600080fd5b80634fab0ae8146104605780634ff3dff5146104765780636a5c0a2a1461048b5780636d1d59a8146104ab57600080fd5b806320ffe2fd116101b1578063386bc05a11610175578063386bc05a146103b85780633a98ef39146103d85780633b1eaf31146103ee57806346100e4a146104275780634b3197131461044a57600080fd5b806320ffe2fd1461033a57806324cc72a21461035a57806327c95e201461036257806328fd31981461037857806335027f191461039857600080fd5b8063151396ff116101f8578063151396ff146102c0578063162db73f146102e05780631b51972c146103085780631b57ef7d1461031d57806320c9f5fc1461033257600080fd5b8062b37044146102295780630958a1f91461025257806311ce023d1461028857806314b6ca961461029e575b600080fd5b34801561023557600080fd5b5061023f600f5481565b6040519081526020015b60405180910390f35b34801561025e57600080fd5b5061023f61026d366004612244565b6001600160a01b031660009081526009602052604090205490565b34801561029457600080fd5b5061023f60155481565b3480156102aa57600080fd5b506102be6102b936600461225f565b61072b565b005b3480156102cc57600080fd5b506102be6102db366004612289565b610a14565b3480156102ec57600080fd5b506001546040516001600160a01b039091168152602001610249565b34801561031457600080fd5b506102be610ab3565b34801561032957600080fd5b50601b5461023f565b6102be610b0c565b34801561034657600080fd5b506102be610355366004612244565b610b25565b6102be610b90565b34801561036e57600080fd5b5061023f60105481565b34801561038457600080fd5b5061023f610393366004612244565b610bcc565b3480156103a457600080fd5b506102be6103b336600461225f565b610c55565b3480156103c457600080fd5b506102be6103d3366004612289565b610e89565b3480156103e457600080fd5b5061023f60115481565b3480156103fa57600080fd5b5061023f610409366004612244565b6001600160a01b03166000908152600a602052604090206001015490565b34801561043357600080fd5b5061043c6110cf565b604051610249929190612309565b34801561045657600080fd5b5061023f600d5481565b34801561046c57600080fd5b5061023f601a5481565b34801561048257600080fd5b50601a5461023f565b34801561049757600080fd5b506102be6104a6366004612360565b611249565b3480156104b757600080fd5b506105046104c6366004612244565b6001600160a01b03166000908152600a602052604090208054600182015460038301546002840154600490940154929491939092909160ff90911690565b6040805195865260208601949094529284019190915260608301521515608082015260a001610249565b34801561053a57600080fd5b506102be610549366004612379565b611265565b34801561055a57600080fd5b506102be610569366004612360565b611287565b34801561057a57600080fd5b5061023f60125481565b34801561059057600080fd5b5061023f60195481565b3480156105a657600080fd5b5061023f600e5481565b3480156105bc57600080fd5b506102be6105cb366004612360565b6112a3565b3480156105dc57600080fd5b50601154601054601354600e54600d54600f54601254604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610249565b34801561063357600080fd5b50610504610642366004612244565b600a60205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6102be611458565b34801561068857600080fd5b5061023f601b5481565b34801561069e57600080fd5b5061023f6106ad366004612244565b60096020526000908152604090205481565b3480156106cb57600080fd5b506102be6106da366004612379565b6114bc565b3480156106eb57600080fd5b5061023f60145481565b34801561070157600080fd5b506102be61071036600461239b565b611670565b34801561072157600080fd5b5061023f60135481565b6000546001600160a01b0316331461074257600080fd5b6001600160a01b0382166000908152600a6020526040902054156107ab5761078e61076c83610bcc565b6001600160a01b0384166000908152600a6020526040902060010154906118cd565b6001600160a01b0383166000908152600a60205260409020600101555b6000811180156107d157506001600160a01b0382166000908152600a6020526040902054155b1561080e57601b548110610809576107e882611935565b6001600160a01b03821660009081526009602052604090206402540be3ff90555b6108a5565b8015801561083357506001600160a01b0382166000908152600a602052604090205415155b156108a5576001600160a01b0382166000908152600a60205260409020600190810154148061087b57506001600160a01b0382166000908152600a6020526040902060010154155b1561088957610809826119ce565b6001600160a01b03821660009081526009602052604090204290555b6001600160a01b0382166000908152600a6020526040902060040154601b5460ff90911690821061095c578061092b576001600160a01b0383166000908152600a60205260409020600401805460ff1916600117905560115461090890836118cd565b6011556001600160a01b0383166000908152600a602052604090208290556109ce565b6001600160a01b0383166000908152600a602052604090205460115461090891849161095691611b05565b906118cd565b80156109b4576001600160a01b0383166000908152600a6020526040902060048101805460ff191690555460115461099391611b05565b6011556001600160a01b0383166000908152600a60205260408120556109ce565b6001600160a01b0383166000908152600a60205260408120555b6001600160a01b0383166000908152600a60205260409020546109f090611b47565b6001600160a01b039093166000908152600a60205260409020600201929092555050565b6000546001600160a01b03163314610a2b57600080fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610a7557600080fd5b505af1158015610a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad91906123ce565b50505050565b6000546001600160a01b03163314610aca57600080fd5b600080546040516001600160a01b03909116918291303180156108fc0292909190818181858888f19350505050158015610b08573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610b2357600080fd5b565b6000546001600160a01b03163314610b3c57600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f8f14af6e51856288e65b250dbddfce7be3cf8785fae01f7498d98a6765a02c849060200160405180910390a150565b6000546001600160a01b03163314610ba757600080fd5b6010543490610bb690826118cd565b601055601254610bc690826118cd565b60125550565b6001600160a01b0381166000908152600a6020526040812054610bf157506000919050565b6001600160a01b0382166000908152600a6020526040812054610c1390611b47565b6001600160a01b0384166000908152600a6020526040902060020154909150808211610c43575060009392505050565b610c4d8282611b05565b949350505050565b6000546001600160a01b03163314610c6c57600080fd5b60198110158015610c7e575060648111155b610ce65760405162461bcd60e51b815260206004820152602e60248201527f50657263656e74206f66207769746864726177616c206973206f75747369646560448201526d206f6620706172616d657465727360901b60648201526084015b60405180910390fd5b6000610d16610cf484610bcc565b6001600160a01b0385166000908152600a6020526040902060010154906118cd565b90506000610d2f6064610d298486611b64565b90611be3565b90508015610aad57610d42816001611b05565b601354909150610d5290826118cd565b6013556017546040516000916001600160a01b03871691849084818181858888f193505050503d8060008114610da4576040519150601f19603f3d011682016040523d82523d6000602084013e610da9565b606091505b5050905080610dca5760405162461bcd60e51b8152600401610cdd906123f0565b6001600160a01b0385166000908152600760205260409020429055610def8383611b05565b6001600160a01b0386166000908152600a60205260409020600181019190915554610e1990611b47565b6001600160a01b0386166000908152600a60205260409020600281019190915560030154610e4790836118cd565b6001600160a01b0386166000908152600a6020526040902060030155600d54610e7090836118cd565b600d55601054610e809083611b05565b60105550610aad565b6000546001600160a01b03163314610ea057600080fd5b60198110158015610eb2575060648111155b610f135760405162461bcd60e51b815260206004820152602c60248201527f50657263656e74206f6620646f6e6174696f6e206973206f757473696465206f60448201526b6620706172616d657465727360a01b6064820152608401610cdd565b6000610f43610f2185610bcc565b6001600160a01b0386166000908152600a6020526040902060010154906118cd565b90506000610f566064610d298486611b64565b905080156110c357610f69816001611b05565b601354909150610f7990826118cd565b6013556017546040516000916001600160a01b03871691849084818181858888f193505050503d8060008114610fcb576040519150601f19603f3d011682016040523d82523d6000602084013e610fd0565b606091505b5050905080610ff15760405162461bcd60e51b8152600401610cdd906123f0565b6001600160a01b03861660009081526007602052604090204290556110168383611b05565b6001600160a01b0387166000908152600a6020526040902060018101919091555461104090611b47565b6001600160a01b0387166000908152600a602052604090206002015561106586611c25565b6001600160a01b03861660009081526008602052604090205461108890836118cd565b6001600160a01b038716600090815260086020526040902055600f546110ae90836118cd565b600f556010546110be9083611b05565b601055505b5050505050565b505050565b600554606090819060008167ffffffffffffffff8111156110f2576110f2612431565b60405190808252806020026020018201604052801561111b578160200160208202803683370190505b50905060008267ffffffffffffffff81111561113957611139612431565b604051908082528060200260200182016040528015611162578160200160208202803683370190505b50905060005b8381101561123e576005818154811061118357611183612447565b9060005260206000200160009054906101000a90046001600160a01b03168382815181106111b3576111b3612447565b60200260200101906001600160a01b031690816001600160a01b03168152505060086000600583815481106111ea576111ea612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054825183908390811061122357611223612447565b602090810291909101015261123781612473565b9050611168565b509094909350915050565b6000546001600160a01b0316331461126057600080fd5b601955565b6000546001600160a01b0316331461127c57600080fd5b601791909155601855565b6000546001600160a01b0316331461129e57600080fd5b601a55565b6000546001600160a01b031633146112ba57600080fd5b600454806112c6575050565b6000805a6000601c8190559091505b84831080156112e357508381105b156114505783601c54106112f7576000601c555b6000600a60006004601c548154811061131257611312612447565b60009182526020808320909101546001600160a01b031683528201929092526040019020600101541180156113825750600a60006004601c548154811061135b5761135b612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054155b80156113d75750600960006004601c54815481106113a2576113a2612447565b60009182526020808320909101546001600160a01b031683528201929092526040019020546019546113d59042906118cd565b115b1561140e5761140e6004601c54815481106113f4576113f4612447565b6000918252602090912001546001600160a01b0316611cb0565b61142361141c5a8490611b05565b84906118cd565b92505a601c8054919350600061143883612473565b9190505550808061144890612473565b9150506112d5565b6110c3611d98565b6000546001600160a01b0316331461146f57600080fd5b34601681905560105461148290826118cd565b60105560125461149290826118cd565b6012556011546015546114b6916114ad91610d299085611b64565b601454906118cd565b60145550565b6000546001600160a01b031633146114d357600080fd5b601b5482141561154b5760405162461bcd60e51b815260206004820152603d60248201527f6e6577207468726573686f6c6420616d6f756e742063616e6e6f74206265207460448201527f68652073616d65206173206578697374696e67207468726573686f6c640000006064820152608401610cdd565b633b9aca0082101580611566575067016345785d8a00008211155b6115d85760405162461bcd60e51b815260206004820152603960248201527f4d696e20686f6c6420616d6f756e7420666f7220646976732073686f756c642060448201527f6265747765656e203120616e64203130304d20746f6b656e73000000000000006064820152608401610cdd565b6206ddd081101561164a5760405162461bcd60e51b815260206004820152603660248201527f506c65617365207573652061206761732076616c756520657175616c20746f2060448201527506f7220686967686572207468616e203435302c3030360541b6064820152608401610cdd565b601b80549083905582811115611665576110ca826000611eff565b6110ca826001611eff565b6000546001600160a01b0316331461168757600080fd5b60198210158015611699575060648211155b6116fe5760405162461bcd60e51b815260206004820152603060248201527f50657263656e74206f66207265696e766573746d656e74206973206f7574736960448201526f6465206f6620706172616d657465727360801b6064820152608401610cdd565b600061170c610f2185610bcc565b9050600061171f6064610d298487611b64565b9050601a5481106110c357611735816001611b05565b6040805160028082526060820183529293506000929091602083019080368337505060035482519293506001600160a01b03169183915060009061177b5761177b612447565b6001600160a01b0392831660209182029290920101526000548251911690829060019081106117ac576117ac612447565b6001600160a01b03928316602091820292909201015260025460185460405163b6f9de9560e01b8152919092169163b6f9de959185906117f690899087908d90429060040161248e565b6000604051808303818589803b15801561180f57600080fd5b5088f1158015611823573d6000803e3d6000fd5b50505050505061183e826013546118cd90919063ffffffff16565b60135561184b8383611b05565b6001600160a01b0387166000908152600a6020526040902060018101919091556003015461187990836118cd565b6001600160a01b0387166000908152600a6020526040902060030155600e546118a290836118cd565b600e556001600160a01b03861660009081526007602052604090204290556010546110be9083611b05565b6000806118da83856124c3565b90508381101561192c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cdd565b90505b92915050565b6001600160a01b0381166000908152600b602052604090205460ff16156119595750565b600480546001600160a01b038316600081815260066020908152604080832085905560018086019096557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90940180546001600160a01b03191684179055918152600b90915220805460ff1916909117905550565b600480546119de906001906124db565b815481106119ee576119ee612447565b60009182526020808320909101546001600160a01b0384811684526006909252604090922054600480549290931692918110611a2c57611a2c612447565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260069182905260408120546004805491939291611a78906001906124db565b81548110611a8857611a88612447565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480611abe57611abe6124f2565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03929092168152600b90915260409020805460ff19169055565b600061192c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121c0565b600061192f601554610d2960145485611b6490919063ffffffff16565b600082611b735750600061192f565b6000611b7f8385612508565b905082611b8c8583612527565b1461192c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cdd565b600061192c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121fa565b6001600160a01b0381166000908152600c602052604090205460ff1615611c495750565b6005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0384166001600160a01b031990911681179091556000908152600c60205260409020805460ff1916909117905550565b6000611cbe61076c83610bcc565b90506000611ccd826001611b05565b6000805460175460405193945091926001600160a01b039091169190849084818181858888f193505050503d8060008114611d24576040519150601f19603f3d011682016040523d82523d6000602084013e611d29565b606091505b5050905080611d4a5760405162461bcd60e51b8152600401610cdd906123f0565b6001600160a01b0384166000908152600760209081526040808320429055600982528083206402540be3ff9055600a909152812060010155601054611d8f9084611b05565b60105550505050565b60045480611da35750565b6000601c8190555b81811015610b085781601c5410611dc2576000601c555b600a60006004601c5481548110611ddb57611ddb612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154158015611e4b5750600a60006004601c5481548110611e2457611e24612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054155b8015611ea05750600960006004601c5481548110611e6b57611e6b612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054601954611e9e9042906118cd565b115b15611ed757611ed76004601c5481548110611ebd57611ebd612447565b6000918252602090912001546001600160a01b03166119ce565b601c8054906000611ee783612473565b91905055508080611ef790612473565b915050611dab565b60045480611f0c57505050565b6000805a6000601c8190559091505b8583108015611f2957508381105b156121b85783601c5410611f3d576000601c555b846120be57600a60006004601c5481548110611f5b57611f5b612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054158015611fce5750600960006004601c5481548110611fa157611fa1612447565b60009182526020808320909101546001600160a01b031683528201929092526040019020546402540be3ff145b156120b95760008054601c54600480546001600160a01b03909316926370a0823192908110611fff57611fff612447565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b15801561204a57600080fd5b505afa15801561205e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120829190612549565b90506120b76004601c548154811061209c5761209c612447565b6000918252602090912001546001600160a01b03168261072b565b505b61217d565b6000600a60006004601c54815481106120d9576120d9612447565b60009182526020808320909101546001600160a01b03168352820192909252604001902054111561217d5761217d6004601c548154811061211c5761211c612447565b9060005260206000200160009054906101000a90046001600160a01b0316600a60006004601c548154811061215357612153612447565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461072b565b61218b61141c5a8490611b05565b92505a601c805491935060006121a083612473565b919050555080806121b090612473565b915050611f1b565b505050505050565b600081848411156121e45760405162461bcd60e51b8152600401610cdd9190612562565b5060006121f184866124db565b95945050505050565b6000818361221b5760405162461bcd60e51b8152600401610cdd9190612562565b5060006121f18486612527565b80356001600160a01b038116811461223f57600080fd5b919050565b60006020828403121561225657600080fd5b61192c82612228565b6000806040838503121561227257600080fd5b61227b83612228565b946020939093013593505050565b60008060006060848603121561229e57600080fd5b6122a784612228565b92506122b560208501612228565b9150604084013590509250925092565b600081518084526020808501945080840160005b838110156122fe5781516001600160a01b0316875295820195908201906001016122d9565b509495945050505050565b60408152600061231c60408301856122c5565b82810360208481019190915284518083528582019282019060005b8181101561235357845183529383019391830191600101612337565b5090979650505050505050565b60006020828403121561237257600080fd5b5035919050565b6000806040838503121561238c57600080fd5b50508035926020909101359150565b6000806000606084860312156123b057600080fd5b6123b984612228565b95602085013595506040909401359392505050565b6000602082840312156123e057600080fd5b8151801515811461192c57600080fd5b60208082526021908201527f5368617265686f6c6465722072656a656374656420424e42207472616e7366656040820152603960f91b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156124875761248761245d565b5060010190565b8481526080602082015260006124a760808301866122c5565b6001600160a01b03949094166040830152506060015292915050565b600082198211156124d6576124d661245d565b500190565b6000828210156124ed576124ed61245d565b500390565b634e487b7160e01b600052603160045260246000fd5b60008160001904831182151516156125225761252261245d565b500290565b60008261254457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561255b57600080fd5b5051919050565b600060208083528351808285015260005b8181101561258f57858101830151858201604001528201612573565b818111156125a1576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212204fadfc7a161409ad5b4a3f8bd8f846c700174f03dd1b261fb6375bd77907532d64736f6c63430008090033


Deployed Bytecode

0x6080604052600436106106a05760003560e01c806377d4e37a1161035f578063b786a796116101d1578063dd62ed3e11610102578063f3107ee7116100a0578063f708a64f1161007a578063f708a64f14611429578063f84ba65d14611449578063f887ea4014611469578063f89893461461148957600080fd5b8063f3107ee7146113de578063f4c85091146113fe578063f59d047c1461141357600080fd5b8063e2b88782116100dc578063e2b8878214611369578063f1f3bca314611389578063f25f136c146113a9578063f2fde38b146113be57600080fd5b8063dd62ed3e146112b9578063df20fd49146112ff578063e27b95a71461131f57600080fd5b8063c7606d211161016f578063cc4b12e511610149578063cc4b12e514611219578063cf2157ea14611263578063d129c17714611283578063d608b3b2146112a357600080fd5b8063c7606d21146111c3578063c7e42c2f146111e3578063ca6eddeb146111f957600080fd5b8063bea23c6b116101ab578063bea23c6b1461114a578063bee3eae41461116d578063bf56b3711461118d578063c3647c8c146111a357600080fd5b8063b786a796146110f5578063b99fe6471461110a578063bac283fe1461112a57600080fd5b806390e23014116102ab5780639cc0e35711610249578063a9059cbb11610223578063a9059cbb1461107d578063ac5433f21461109d578063b16a3bb1146110b2578063b340348d146110d357600080fd5b80639cc0e3571461101c578063a7d742ba1461103d578063a8aa1b311461105d57600080fd5b8063943ff60711610285578063943ff60714610fa157806395d89b4114610fb757806398a17ed214610fe75780639c95df3414610ffc57600080fd5b806390e2301414610f4b57806391d55f4114610f6157806393d8e30214610f8157600080fd5b80637dc0d1d0116103185780638877bf2e116102f25780638877bf2e14610ebd578063893d20e814610edd5780638b3e65d214610efb5780638b42507f14610f1b57600080fd5b80637dc0d1d014610e5d57806382122d9814610e7d57806383b09dcf14610e9d57600080fd5b806377d4e37a14610da457806378109e5414610dc35780637b20876914610dd95780637bc000ca14610df95780637c542bf814610e0e5780637d9b451414610e4757600080fd5b806333ac2627116105135780635192c82c1161044457806369fe0e2d116103e2578063719f04b4116103bc578063719f04b414610d2e578063736ad05014610d4e57806376c7a80714610d6e5780637791563914610d8e57600080fd5b806369fe0e2d14610cbe5780636ddd171314610cde57806370a0823114610cf857600080fd5b8063634341fc1161041e578063634341fc14610c5357806364319e3314610c68578063658d4b7f14610c7e57806368d86de614610c9e57600080fd5b80635192c82c14610c07578063571ac8b014610c1d57806359bb84cd14610c3d57600080fd5b80633f4218e0116104b157806346100e4a1161048b57806346100e4a14610b8e57806346469ae714610bb157806347c421b514610bc75780634e70a60414610be757600080fd5b80633f4218e014610b0e578063433c994c14610b3e5780634355855a14610b5e57600080fd5b806336b19cd7116104ed57806336b19cd714610a715780633bbac57914610aa95780633c8e556d14610ad95780633dc4734514610af957600080fd5b806333ac262714610a11578063342aa8b514610a315780633615e7d514610a5157600080fd5b80631df4ccfc116105ed5780632807293a1161058b5780632b112e49116105655780632b112e491461099c5780632d686ebb146109b15780632f54bf6e146109c6578063313ce567146109f557600080fd5b80632807293a14610933578063292c914a14610948578063297bc9471461096957600080fd5b8063236a4afb116105c7578063236a4afb146108b257806323b63585146108d357806323b872dd146108f357806327c89d301461091357600080fd5b80631df4ccfc1461085b57806320104289146108715780632362dd391461089257600080fd5b80630c3f9cbd1161065a578063168f857a11610634578063168f857a14610806578063180b0d7e1461081b57806318160ddd146108315780631b3efe301461084657600080fd5b80630c3f9cbd146107a3578063149537f2146107b8578063151396ff146107e657600080fd5b8062b75d1c146106ac5780630197aeac146106ce57806306fdde03146106ee57806308cad4e514610733578063095ea7b31461075357806309ec68301461078357600080fd5b366106a757005b600080fd5b3480156106b857600080fd5b506106cc6106c7366004615178565b61149e565b005b3480156106da57600080fd5b506106cc6106e9366004615195565b6114ef565b3480156106fa57600080fd5b5060408051808201909152600a8152690d6ded4d25ccac2e4e8d60b31b60208201525b60405161072a919061520f565b60405180910390f35b34801561073f57600080fd5b506106cc61074e366004615222565b6115a9565b34801561075f57600080fd5b5061077361076e366004615250565b611645565b604051901515815260200161072a565b34801561078f57600080fd5b506106cc61079e366004615178565b611716565b3480156107af57600080fd5b506106cc61175c565b3480156107c457600080fd5b506107d86107d336600461527c565b611868565b60405190815260200161072a565b3480156107f257600080fd5b506106cc610801366004615299565b6118ee565b34801561081257600080fd5b506107d861199e565b34801561082757600080fd5b506107d8601a5481565b34801561083d57600080fd5b506006546107d8565b34801561085257600080fd5b506106cc611a2b565b34801561086757600080fd5b506107d860175481565b34801561087d57600080fd5b5060285461077390600160401b900460ff1681565b34801561089e57600080fd5b506106cc6108ad3660046152da565b611aca565b3480156108be57600080fd5b5060285461077390600160481b900460ff1681565b3480156108df57600080fd5b506107736108ee366004615222565b611df1565b3480156108ff57600080fd5b5061077361090e366004615299565b611e34565b34801561091f57600080fd5b506106cc61092e366004615222565b611ef6565b34801561093f57600080fd5b506106cc611ff6565b34801561095457600080fd5b5060285461077390600160381b900460ff1681565b34801561097557600080fd5b50610989610984366004615222565b612084565b60405161072a979695949392919061530f565b3480156109a857600080fd5b506107d8612274565b3480156109bd57600080fd5b506106cc6122c1565b3480156109d257600080fd5b506107736109e136600461527c565b6000546001600160a01b0391821691161490565b348015610a0157600080fd5b506040516009815260200161072a565b348015610a1d57600080fd5b506106cc610a2c366004615222565b6122ff565b348015610a3d57600080fd5b506106cc610a4c36600461536d565b61236f565b348015610a5d57600080fd5b506106cc610a6c366004615222565b6123cb565b348015610a7d57600080fd5b50601d54610a91906001600160a01b031681565b6040516001600160a01b03909116815260200161072a565b348015610ab557600080fd5b50610773610ac436600461527c565b60126020526000908152604090205460ff1681565b348015610ae557600080fd5b506106cc610af43660046153a6565b612499565b348015610b0557600080fd5b506106cc612888565b348015610b1a57600080fd5b50610773610b2936600461527c565b600f6020526000908152604090205460ff1681565b348015610b4a57600080fd5b506106cc610b59366004615178565b612931565b348015610b6a57600080fd5b50610773610b7936600461527c565b60116020526000908152604090205460ff1681565b348015610b9a57600080fd5b50610ba361297d565b60405161072a929190615446565b348015610bbd57600080fd5b506107d860075481565b348015610bd357600080fd5b506106cc610be236600461527c565b612a12565b348015610bf357600080fd5b506106cc610c02366004615222565b612a5e565b348015610c1357600080fd5b506107d860145481565b348015610c2957600080fd5b50610773610c3836600461527c565b612abe565b348015610c4957600080fd5b506107d860195481565b348015610c5f57600080fd5b506106cc612acc565b348015610c7457600080fd5b506107d860215481565b348015610c8a57600080fd5b506106cc610c9936600461536d565b612b3e565b348015610caa57600080fd5b506028546107739062010000900460ff1681565b348015610cca57600080fd5b506106cc610cd9366004615222565b612b93565b348015610cea57600080fd5b506028546107739060ff1681565b348015610d0457600080fd5b506107d8610d1336600461527c565b6001600160a01b03166000908152600d602052604090205490565b348015610d3a57600080fd5b506106cc610d49366004615222565b612c39565b348015610d5a57600080fd5b506106cc610d69366004615222565b612cd5565b348015610d7a57600080fd5b506106cc610d89366004615178565b612d04565b348015610d9a57600080fd5b506107d860165481565b348015610db057600080fd5b5060285461077390610100900460ff1681565b348015610dcf57600080fd5b506107d860095481565b348015610de557600080fd5b50601c54610a91906001600160a01b031681565b348015610e0557600080fd5b50600b546107d8565b348015610e1a57600080fd5b5060205460215460225460235460408051948552602085019390935291830152606082015260800161072a565b348015610e5357600080fd5b506107d860235481565b348015610e6957600080fd5b50602554610a91906001600160a01b031681565b348015610e8957600080fd5b506106cc610e98366004615222565b612d4f565b348015610ea957600080fd5b506107d8610eb836600461527c565b612dfa565b348015610ec957600080fd5b506106cc610ed8366004615178565b612e34565b348015610ee957600080fd5b506000546001600160a01b0316610a91565b348015610f0757600080fd5b506106cc610f16366004615222565b612e78565b348015610f2757600080fd5b50610773610f3636600461527c565b60106020526000908152604090205460ff1681565b348015610f5757600080fd5b506107d860155481565b348015610f6d57600080fd5b506106cc610f7c366004615222565b612f13565b348015610f8d57600080fd5b50601f54610a91906001600160a01b031681565b348015610fad57600080fd5b506107d860225481565b348015610fc357600080fd5b5060408051808201909152600781526625a7a524903b1960c91b602082015261071d565b348015610ff357600080fd5b506106cc612fb1565b34801561100857600080fd5b506106cc611017366004615195565b61303f565b34801561102857600080fd5b5060285461077390600160301b900460ff1681565b34801561104957600080fd5b506106cc61105836600461527c565b613119565b34801561106957600080fd5b50602654610a91906001600160a01b031681565b34801561108957600080fd5b50610773611098366004615250565b61337e565b3480156110a957600080fd5b50610a9161338b565b3480156110be57600080fd5b50602854610773906301000000900460ff1681565b3480156110df57600080fd5b5060285461077390640100000000900460ff1681565b34801561110157600080fd5b506107d8613413565b34801561111657600080fd5b506106cc611125366004615178565b613463565b34801561113657600080fd5b506106cc611145366004615299565b6134ad565b34801561115657600080fd5b506028546107739065010000000000900460ff1681565b34801561117957600080fd5b506106cc611188366004615195565b613552565b34801561119957600080fd5b506107d860275481565b3480156111af57600080fd5b506106cc6111be366004615222565b6135c7565b3480156111cf57600080fd5b506106cc6111de366004615195565b613646565b3480156111ef57600080fd5b506107d8601b5481565b34801561120557600080fd5b506106cc611214366004615222565b6136e7565b34801561122557600080fd5b5061123961123436600461527c565b613716565b6040805195865260208601949094529284019190915260608301521515608082015260a00161072a565b34801561126f57600080fd5b506107d861127e36600461527c565b6137b8565b34801561128f57600080fd5b506106cc61129e366004615178565b6137f2565b3480156112af57600080fd5b506107d860205481565b3480156112c557600080fd5b506107d86112d436600461549d565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561130b57600080fd5b506106cc61131a3660046154cb565b61383e565b34801561132b57600080fd5b5061133461387f565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161072a565b34801561137557600080fd5b506106cc611384366004615222565b613926565b34801561139557600080fd5b506107d86113a4366004615178565b6139d8565b3480156113b557600080fd5b506106cc613a10565b3480156113ca57600080fd5b506106cc6113d936600461527c565b613a69565b3480156113ea57600080fd5b50601e54610a91906001600160a01b031681565b34801561140a57600080fd5b506106cc613ae7565b34801561141f57600080fd5b506107d860085481565b34801561143557600080fd5b506106cc61144436600461536d565b613b6b565b34801561145557600080fd5b506106cc61146436600461536d565b613b9f565b34801561147557600080fd5b50602454610a91906001600160a01b031681565b34801561149557600080fd5b506106cc613bf4565b6000546001600160a01b031633146114d15760405162461bcd60e51b81526004016114c8906154e9565b60405180910390fd5b6028805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146115195760405162461bcd60e51b81526004016114c8906154e9565b60288054600160501b60ff60501b19909116179081905560405163e2b2782d60e01b81526004810184905260248101839052600160581b9091046001600160a01b03169063e2b2782d90604401600060405180830381600087803b15801561158057600080fd5b505af1158015611594573d6000803e3d6000fd5b50506028805460ff60501b1916905550505050565b6000546001600160a01b031633146115d35760405162461bcd60e51b81526004016114c8906154e9565b6703782dace9d900008110156116405760405162461bcd60e51b815260206004820152602c60248201527f53656c6c206c696d6974206d757374206e6f74206265206c657373207468616e60448201526b203235304d20746f6b656e7360a01b60648201526084016114c8565b600855565b600080546001600160a01b031633146116b157602854600160481b900460ff166116b15760405162461bcd60e51b815260206004820152601e60248201527f4c697175696420686173206e6f74206265656e2061646465642079657421000060448201526064016114c8565b336000818152600e602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b031633146117405760405162461bcd60e51b81526004016114c8906154e9565b60288054911515620100000262ff000019909216919091179055565b6002600154141561177f5760405162461bcd60e51b81526004016114c890615509565b60026001556040516370a0823160e01b815233600482015260009030906370a082319060240160206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f59190615540565b602854604051630a5b654b60e11b8152919250600160581b90046001600160a01b0316906314b6ca969061182f9033908590600401615559565b600060405180830381600087803b15801561184957600080fd5b505af115801561185d573d6000803e3d6000fd5b505060018055505050565b602854604051630958a1f960e01b81526001600160a01b038381166004830152600092600160581b90041690630958a1f9906024015b60206040518083038186803b1580156118b657600080fd5b505afa1580156118ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117109190615540565b6000546001600160a01b031633146119185760405162461bcd60e51b81526004016114c8906154e9565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906119469085908590600401615559565b602060405180830381600087803b15801561196057600080fd5b505af1158015611974573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119989190615572565b50505050565b60006028600b9054906101000a90046001600160a01b03166001600160a01b0316634ff3dff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ee57600080fd5b505afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190615540565b905090565b6000546001600160a01b03163314611a555760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b03166320c9f5fc306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b505af1158015611ac3573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314611af45760405162461bcd60e51b81526004016114c8906154e9565b6003546001600160a01b03848116911614801590611b2057506004546001600160a01b03848116911614155b8015611b3a57506026546001600160a01b03848116911614155b611b9a5760405162461bcd60e51b815260206004820152602b60248201527f506c6561736520696e70757420612076616c696420746f6b656e20636f6e747260448201526a616374206164647265737360a81b60648201526084016114c8565b611ba383613c78565b611bfd5760405162461bcd60e51b815260206004820152602560248201527f506c6561736520696e70757420616e2061637475616c20746f6b656e20636f6e6044820152641d1c9858dd60da1b60648201526084016114c8565b6001600160a01b0383166000908152600c602052604090205460ff1615611c965760405162461bcd60e51b815260206004820152604160248201527f436f6e747261637420616c72656164792061646465642e20546f206368616e6760448201527f6520706172616d657465727320706c656173652072656d6f76652066697273746064820152601760f91b608482015260a4016114c8565b60008211611cf15760405162461bcd60e51b815260206004820152602260248201527f4d696e20686f6c64206d7573742062652067726561746572207468616e207a65604482015261726f60f01b60648201526084016114c8565b601754811115611d555760405162461bcd60e51b815260206004820152602960248201527f446973636f756e742063616e6e6f742062652067726561746572207468616e206044820152680e8dee8c2d840e8c2f60bb1b60648201526084016114c8565b600b80546000908152600a6020908152604080832080546001600160a01b039098166001600160a01b0319988916811782556001808301989098556002820196909655600301805460ff199081168817909155858452600c909252822080549091168517905581549384018255527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99091018054909216179055565b600080546001600160a01b03163314611e1c5760405162461bcd60e51b81526004016114c8906154e9565b6003546117109030906001600160a01b031684613cb4565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914611ee1576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054611ebc918490613d9a565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b611eec848484613dd4565b90505b9392505050565b6000546001600160a01b03163314611f205760405162461bcd60e51b81526004016114c8906154e9565b62278d00811015611fa95760405162461bcd60e51b815260206004820152604760248201527f486f6c6465722073686f756c642068617665206d696e696d756d20333020646160448201527f79732028323539323030302920746f20776974686472617720756e636c61696d6064820152666564206469767360c81b608482015260a4016114c8565b60285460405163352e051560e11b815260048101839052600160581b9091046001600160a01b031690636a5c0a2a906024015b600060405180830381600087803b158015611aaf57600080fd5b6000546001600160a01b031633146120205760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b0316631b51972c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561207057600080fd5b505af1158015611998573d6000803e3d6000fd5b6000818152600a6020526040808220805482516306fdde0360e01b815292516060948594909384938493849384939284926001600160a01b03909116916306fdde039160048083019286929190829003018186803b1580156120e557600080fd5b505afa1580156120f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261212191908101906155d6565b905060008260000160009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561217557600080fd5b505afa158015612189573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121b191908101906155d6565b905060008360000160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561220557600080fd5b505afa158015612219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223d919061566a565b845460018601546002870154600390970154959f949e50919c506001600160a01b03169a50985092965060ff909116945092505050565b6004546001600160a01b03166000908152600d6020526040812054611a26906003546001600160a01b03166000908152600d60205260409020546122bb9060065490614231565b90614231565b6000546001600160a01b031633146122eb5760405162461bcd60e51b81526004016114c8906154e9565b6028805468ff000000000000000019169055565b600260015414156123225760405162461bcd60e51b81526004016114c890615509565b6002600155602854601c54604051631c35e02d60e11b81523360048201526001600160a01b03918216602482015260448101849052600160581b909204169063386bc05a9060640161182f565b6000546001600160a01b031633146123995760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b0382166000908152601260205260409020805460ff19168215151790556123c78282614273565b5050565b6000546001600160a01b031633146123f55760405162461bcd60e51b81526004016114c8906154e9565b600081116124625760405162461bcd60e51b815260206004820152603460248201527f6d696e696d756d20646973747269627574696f6e206c6576656c206d7573742060448201527362652067726561746572207468616e207a65726f60601b60648201526084016114c8565b602854604051634c72dff760e11b815260048101839052600160581b9091046001600160a01b0316906398e5bfee90602401611fdc565b6000546001600160a01b031633146124c35760405162461bcd60e51b81526004016114c8906154e9565b6004546001600160a01b03858116911614156125315760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f74206265207a65726f206044820152666164647265737360c81b60648201526084016114c8565b6004546001600160a01b038481169116141561259d5760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f74206265207a65726f206164604482015264647265737360d81b60648201526084016114c8565b6004546001600160a01b038381169116141561260e5760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f74206265207a65604482015269726f206164647265737360b01b60648201526084016114c8565b6004546001600160a01b038281169116141561267e5760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f74206265207a65726044820152686f206164647265737360b81b60648201526084016114c8565b6003546001600160a01b03858116911614156126ec5760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f742062652064656164206044820152666164647265737360c81b60648201526084016114c8565b6003546001600160a01b03848116911614156127585760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f742062652064656164206164604482015264647265737360d81b60648201526084016114c8565b6003546001600160a01b03838116911614156127c95760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f742062652064656044820152696164206164647265737360b01b60648201526084016114c8565b6003546001600160a01b03828116911614156128395760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f742062652064656160448201526864206164647265737360b81b60648201526084016114c8565b601c80546001600160a01b03199081166001600160a01b0396871617909155601e8054821693861693909317909255601d8054831693851693909317909255601f805490911691909216179055565b6000546001600160a01b031633146128b25760405162461bcd60e51b81526004016114c8906154e9565b602854600160401b900460ff16156129165760405162461bcd60e51b815260206004820152602160248201527f506c656173652064697361626c652061697264726f70206d6f646520666972736044820152601d60fa1b60648201526084016114c8565b6028805469ff0000000000000000001916600160481b179055565b6000546001600160a01b0316331461295b5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515650100000000000265ff000000000019909216919091179055565b6060806028600b9054906101000a90046001600160a01b03166001600160a01b03166346100e4a6040518163ffffffff1660e01b815260040160006040518083038186803b1580156129ce57600080fd5b505afa1580156129e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0a919081019061571c565b915091509091565b6000546001600160a01b03163314612a3c5760405162461bcd60e51b81526004016114c8906154e9565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b60026001541415612a815760405162461bcd60e51b81526004016114c890615509565b60026001556028546040516335027f1960e01b8152600160581b9091046001600160a01b0316906335027f199061182f9033908590600401615559565b600061171082600019611645565b6000546001600160a01b03163314612af65760405162461bcd60e51b81526004016114c8906154e9565b60025460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db091303191600480830192600092919082900301818588803b158015611aaf57600080fd5b6000546001600160a01b03163314612b685760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612bbd5760405162461bcd60e51b81526004016114c8906154e9565b6064811115612c345760405162461bcd60e51b815260206004820152603760248201527f546f74616c20466565206d757374206265206265747765656e203020616e642060448201527f3130302028313030203d2074656e2070657263656e742900000000000000000060648201526084016114c8565b601755565b6000546001600160a01b03163314612c635760405162461bcd60e51b81526004016114c8906154e9565b601a54612c71906004614355565b811115612cd05760405162461bcd60e51b815260206004820152602760248201527f74617820726174696f2063616e6e6f74206265206d6f7265207468616e2032356044820152663020283235252960c81b60648201526084016114c8565b601655565b6000546001600160a01b03163314612cff5760405162461bcd60e51b81526004016114c8906154e9565b600755565b6000546001600160a01b03163314612d2e5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515600160301b0266ff00000000000019909216919091179055565b6000546001600160a01b03163314612d795760405162461bcd60e51b81526004016114c8906154e9565b601654612d87906002614355565b811115612df55760405162461bcd60e51b815260206004820152603660248201527f6275726e20726174696f2063616e6e6f74206265206d6f7265207468616e203560448201527506040e0cae4c6cadce840decc40e8dee8c2d840e8c2f60531b60648201526084016114c8565b601455565b60285460405163051fa63360e31b81526001600160a01b038381166004830152600092600160581b900416906328fd31989060240161189e565b6000546001600160a01b03163314612e5e5760405162461bcd60e51b81526004016114c8906154e9565b602880549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314612ea25760405162461bcd60e51b81526004016114c8906154e9565b60648111158015612eb4575060018110155b612f0e5760405162461bcd60e51b815260206004820152602560248201527f666565206c696d69746572206d757374206265206265747765656e203120616e604482015264064203130360dc1b60648201526084016114c8565b601955565b6000546001600160a01b03163314612f3d5760405162461bcd60e51b81526004016114c8906154e9565b6703782dace9d90000811015612fac5760405162461bcd60e51b815260206004820152602e60248201527f57616c6c6574206c696d6974206d757374206e6f74206265206c65737320746860448201526d616e203235304d20746f6b656e7360901b60648201526084016114c8565b600955565b6000546001600160a01b03163314612fdb5760405162461bcd60e51b81526004016114c8906154e9565b60285460295460405163aa60e73360e01b81526004810191909152600160581b9091046001600160a01b03169063aa60e73390602401600060405180830381600087803b15801561302b57600080fd5b505af192505050801561303c575060015b50565b6000546001600160a01b031633146130695760405162461bcd60e51b81526004016114c8906154e9565b600082116130895760405162461bcd60e51b81526004016114c8906157e1565b600081116130a95760405162461bcd60e51b81526004016114c8906157e1565b6028546040516349465b8360e11b81526004810184905260248101839052600160581b9091046001600160a01b03169063928cb706906044015b600060405180830381600087803b1580156130fd57600080fd5b505af1158015613111573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146131435760405162461bcd60e51b81526004016114c8906154e9565b600b5480156123c75760005b81811015613379576000818152600a6020526040902080546001600160a01b0385811691161415613368578282141561320b5760045481546001600160a01b0319166001600160a01b039182161782556000600183018190556002830181905560038301805460ff199081169091559186168152600c6020526040902080549091169055600b8054806131e4576131e4615824565b600082815260209020810160001990810180546001600160a01b0319169055019055613368565b6000600a60006001600b805490506132239190615850565b815260208082019290925260409081016000908120805486546001600160a01b03199081166001600160a01b03928316178855600180840180548a83015560028086018054918c01919091556003808c01805460ff1990811686179091558f87168952600c909a5297872080548a169055600454865490941693909416929092178455908490559290559182018054909316909255600b8054919350916132c991615850565b815481106132d9576132d9615867565b600091825260209091200154600b80546001600160a01b03909216918590811061330557613305615867565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b80548061334457613344615824565b600082815260209020810160001990810180546001600160a01b0319169055019055505b506133728161587d565b905061314f565b505050565b6000611eef338484613dd4565b60006028600b9054906101000a90046001600160a01b03166001600160a01b031663162db73f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156133db57600080fd5b505afa1580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190615898565b60006028600b9054906101000a90046001600160a01b03166001600160a01b0316631b57ef7d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ee57600080fd5b6000546001600160a01b0316331461348d5760405162461bcd60e51b81526004016114c8906154e9565b602880549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b031633146134d75760405162461bcd60e51b81526004016114c8906154e9565b60285460405163151396ff60e01b81526001600160a01b038581166004830152848116602483015260448201849052600160581b9092049091169063151396ff90606401600060405180830381600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461357c5760405162461bcd60e51b81526004016114c8906154e9565b6000821161359c5760405162461bcd60e51b81526004016114c8906157e1565b600081116135bc5760405162461bcd60e51b81526004016114c8906157e1565b602991909155602a55565b6000546001600160a01b031633146135f15760405162461bcd60e51b81526004016114c8906154e9565b600081116136415760405162461bcd60e51b815260206004820152601f60248201527f426c6f636b732073686f756c642062652067726561746572207468616e20300060448201526064016114c8565b601355565b600260015414156136695760405162461bcd60e51b81526004016114c890615509565b6002600155602854604051633900720360e21b81523360048201526024810184905260448101839052600160581b9091046001600160a01b03169063e401c80c90606401600060405180830381600087803b1580156136c757600080fd5b505af11580156136db573d6000803e3d6000fd5b50506001805550505050565b6000546001600160a01b031633146137115760405162461bcd60e51b81526004016114c8906154e9565b601855565b602854604051630da3ab3560e31b81526001600160a01b0383811660048301526000928392839283928392600160581b90910490911690636d1d59a89060240160a06040518083038186803b15801561376e57600080fd5b505afa158015613782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a691906158b5565b939a9299509097509550909350915050565b602854604051633b1eaf3160e01b81526001600160a01b038381166004830152600092600160581b90041690633b1eaf319060240161189e565b6000546001600160a01b0316331461381c5760405162461bcd60e51b81526004016114c8906154e9565b60288054911515600160381b0267ff0000000000000019909216919091179055565b6000546001600160a01b031633146138685760405162461bcd60e51b81526004016114c8906154e9565b6028805460ff191692151592909217909155602c55565b60008060008060008060006028600b9054906101000a90046001600160a01b03166001600160a01b031663c11df1d76040518163ffffffff1660e01b815260040160e06040518083038186803b1580156138d857600080fd5b505afa1580156138ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139109190615902565b959d949c50929a50909850965094509092509050565b6000546001600160a01b031633146139505760405162461bcd60e51b81526004016114c8906154e9565b60165461395e906002614355565b8111156139d35760405162461bcd60e51b815260206004820152603b60248201527f7374616b65706f6f6c20726174696f2063616e6e6f74206265206d6f7265207460448201527f68616e2035302070657263656e74206f6620746f74616c20746178000000000060648201526084016114c8565b601555565b6000436013546027546139eb9190615956565b1015806139f55750815b15613a0857601a54611710906001614231565b505060175490565b6000546001600160a01b03163314613a3a5760405162461bcd60e51b81526004016114c8906154e9565b60405133908190303180156108fc02916000818181858888f193505050501580156123c7573d6000803e3d6000fd5b6000546001600160a01b03163314613a935760405162461bcd60e51b81526004016114c8906154e9565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314613b115760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b03166324cc72a2306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b6000546001600160a01b03163314613b955760405162461bcd60e51b81526004016114c8906154e9565b6123c78282614273565b6000546001600160a01b03163314613bc95760405162461bcd60e51b81526004016114c8906154e9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314613c1e5760405162461bcd60e51b81526004016114c8906154e9565b6028600b9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b158015611aaf57600080fd5b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f8015801590613cac5750818114155b949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054613d05918490613d9a565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054613d349083614397565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613d889086815260200190565b60405180910390a35060019392505050565b60008184841115613dbe5760405162461bcd60e51b81526004016114c8919061520f565b506000613dcb8486615850565b95945050505050565b6000808211613e355760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e7420416d6f756e743a2063616e6e6f742073656e646044820152662030204b4f4a4960c81b60648201526084016114c8565b602854600160401b900460ff1615613e5957613e52848484613cb4565b9050611eef565b602854600160501b900460ff1615613e7657613e52848484613cb4565b613e818484846143f6565b6026546001600160a01b0384811691161415613eac57613e9f6144fd565b15613eac57613eac614553565b602754158015613ec957506026546001600160a01b038481169116145b15613ef9576001600160a01b0384166000908152600d6020526040902054613ef057600080fd5b613ef943602755565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600d9091529190912054613f4b918490613d9a565b6001600160a01b0385166000908152600d6020908152604080832093909355600f90529081205460ff16158015613f9b57506001600160a01b0384166000908152600f602052604090205460ff16155b613fa55782613fb0565b613fb0858585614d71565b6026549091506001600160a01b03858116911614801590613fea57506001600160a01b03841660009081526010602052604090205460ff16155b15614071576001600160a01b0384166000908152600d60205260409020546009546140158383615956565b111561406f5760405162461bcd60e51b815260206004820152602360248201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152621d5b9d60ea1b60648201526084016114c8565b505b6001600160a01b0384166000908152600d60205260409020546140949082614397565b6001600160a01b038086166000908152600d602090815260408083209490945591881681526011909152205460ff16614140576028546001600160a01b038681166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca969161411391899190600401615559565b600060405180830381600087803b15801561412d57600080fd5b505af192505050801561413e575060015b505b6001600160a01b03841660009081526011602052604090205460ff166141d9576028546001600160a01b038581166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca96916141ac91889190600401615559565b600060405180830381600087803b1580156141c657600080fd5b505af19250505080156141d7575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161421e91815260200190565b60405180910390a3506001949350505050565b6000611eef83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d9a565b6001600160a01b038216301480159061429a57506026546001600160a01b03838116911614155b6142a357600080fd5b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561430957602854604051630a5b654b60e11b8152600160581b9091046001600160a01b0316906314b6ca96906130e3908590600090600401615559565b6028546001600160a01b038381166000908152600d602052604090819020549051630a5b654b60e11b8152600160581b909304909116916314b6ca96916130e391869190600401615559565b6000611eef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506150bd565b6000806143a48385615956565b905083811015611eef5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016114c8565b6026546001600160a01b0384811691161415614479576007548111158061443557506001600160a01b03821660009081526010602052604090205460ff165b6144795760405162461bcd60e51b8152602060048201526015602482015274109d5e48151608131a5b5a5d08115e18d959591959605a1b60448201526064016114c8565b6026546001600160a01b038381169116141561337957600854811115806144b857506001600160a01b03831660009081526010602052604090205460ff165b6133795760405162461bcd60e51b815260206004820152601660248201527514d95b1b08151608131a5b5a5d08115e18d95959195960521b60448201526064016114c8565b6026546000906001600160a01b031633148015906145255750602854600160501b900460ff16155b8015614533575060285460ff165b8015611a26575050602c54306000908152600d6020526040902054101590565b6028805460ff60501b1916600160501b1790556040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b15801561459f57600080fd5b505afa1580156145b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d79190615540565b905060006145fc601a546145f6601454856150eb90919063ffffffff16565b90614355565b60035460405163a9059cbb60e01b8152919250309163a9059cbb91614631916001600160a01b03909116908590600401615559565b602060405180830381600087803b15801561464b57600080fd5b505af115801561465f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146839190615572565b50602854610100900460ff16156147675760006146b1601a546145f6601554866150eb90919063ffffffff16565b90506146bd8382614231565b601f5460405163a9059cbb60e01b8152919450309163a9059cbb916146f2916001600160a01b03909116908590600401615559565b602060405180830381600087803b15801561470c57600080fd5b505af1158015614720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147449190615572565b506023546147529082614397565b60235561475f8383614231565b925050614774565b6147718282614231565b91505b60408051600280825260608201835260009260208301908036833701905050905030816000815181106147a9576147a9615867565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106147da576147da615867565b6001600160a01b039092166020928302919091019091015260285430319060ff65010000000000909104161561492a576002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561484e57600080fd5b505afa158015614862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148869190615540565b905080156149285760025460265460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926148c4929116908590600401615559565b602060405180830381600087803b1580156148de57600080fd5b505af11580156148f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149169190615572565b50601b546149249082614397565b601b555b505b60245460405163791ac94760e01b81526001600160a01b039091169063791ac9479061496390879060009087903090429060040161596e565b600060405180830381600087803b15801561497d57600080fd5b505af1158015614991573d6000803e3d6000fd5b50600092506149a4915050303183614231565b905060006149c3601a546145f6601654856150eb90919063ffffffff16565b602854909150819081908190600090819062010000900460ff1615614ac85750846149f6816122bb868187818d8c614231565b601e54602a546040519294506000926001600160a01b0390921691849084818181858888f193505050503d8060008114614a4c576040519150601f19603f3d011682016040523d82523d6000602084013e614a51565b606091505b5050905080614ab25760405162461bcd60e51b815260206004820152602760248201527f4e4654207265776172642077616c6c65742072656a656374656420424e4220746044820152663930b739b332b960c91b60648201526084016114c8565b602254614abf9083614397565b60225550614adb565b614ad8846122bb85818b8a614231565b91505b6028546301000000900460ff1615614b51576028600b9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015614b3d57600080fd5b505af193505050508015614b4f575060015b505b602854640100000000900460ff1615614cee57601c54602a546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614bb6576040519150601f19603f3d011682016040523d82523d6000602084013e614bbb565b606091505b5050905080614c185760405162461bcd60e51b8152602060048201526024808201527f436861726974792077616c6c65742072656a656374656420424e42207472616e60448201526339b332b960e11b60648201526084016114c8565b602054614c259087614397565b602055601d54602a546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614c7a576040519150601f19603f3d011682016040523d82523d6000602084013e614c7f565b606091505b5050905080614cdb5760405162461bcd60e51b815260206004820152602260248201527f41646d696e2077616c6c65742072656a656374656420424e42207472616e736660448201526132b960f11b60648201526084016114c8565b602154614ce89087614397565b60215550505b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614d3e57600080fd5b505af1158015614d52573d6000803e3d6000fd5b50506028805460ff60501b191690555050505050505050505050505050565b6001600160a01b03831660009081526012602052604081205481908190614d9a9060ff166139d8565b602854909150600090600160301b900460ff168015614dc757506026546001600160a01b03878116911614155b8015614de057506026546001600160a01b038881169116145b15614eba57600b5460005b818111614eb7576000818152600a60205260409020600381015460ff1615614ea657600181015481546040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a082319060240160206040518083038186803b158015614e5657600080fd5b505afa158015614e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e8e9190615540565b10614ea6576002810154614ea3908590614397565b93505b50614eb08161587d565b9050614deb565b50505b602854600160381b900460ff168015614ee157506026546001600160a01b03878116911614155b8015614efa57506026546001600160a01b038881169116145b15614fb557602554604051630f39254f60e41b8152600481018790526000916001600160a01b03169063f39254f090602401602060405180830381600087803b158015614f4657600080fd5b505af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190615540565b9050614f8e816305f5e100614355565b9050614fa56018548261439790919063ffffffff16565b9050614fb18282614397565b9150505b80614fd257601a54614fcb906145f687856150eb565b9250615035565b614fec60646145f6601954856150eb90919063ffffffff16565b8111156150145761500d60646145f6601954856150eb90919063ffffffff16565b9050615021565b61501e8282614231565b90505b601a54615032906145f687846150eb565b92505b306000908152600d602052604090205461504f9084614397565b306000818152600d6020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906150a09087815260200190565b60405180910390a36150b28584614231565b979650505050505050565b600081836150de5760405162461bcd60e51b81526004016114c8919061520f565b506000613dcb84866159aa565b6000826150fa57506000611710565b600061510683856159cc565b90508261511385836159aa565b14611eef5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016114c8565b801515811461303c57600080fd5b60006020828403121561518a57600080fd5b8135611eef8161516a565b600080604083850312156151a857600080fd5b50508035926020909101359150565b60005b838110156151d25781810151838201526020016151ba565b838111156119985750506000910152565b600081518084526151fb8160208601602086016151b7565b601f01601f19169290920160200192915050565b602081526000611eef60208301846151e3565b60006020828403121561523457600080fd5b5035919050565b6001600160a01b038116811461303c57600080fd5b6000806040838503121561526357600080fd5b823561526e8161523b565b946020939093013593505050565b60006020828403121561528e57600080fd5b8135611eef8161523b565b6000806000606084860312156152ae57600080fd5b83356152b98161523b565b925060208401356152c98161523b565b929592945050506040919091013590565b6000806000606084860312156152ef57600080fd5b83356152fa8161523b565b95602085013595506040909401359392505050565b60e08152600061532260e083018a6151e3565b8281036020840152615334818a6151e3565b60ff98909816604084015250506001600160a01b03949094166060850152608084019290925260a0830152151560c09091015292915050565b6000806040838503121561538057600080fd5b823561538b8161523b565b9150602083013561539b8161516a565b809150509250929050565b600080600080608085870312156153bc57600080fd5b84356153c78161523b565b935060208501356153d78161523b565b925060408501356153e78161523b565b915060608501356153f78161523b565b939692955090935050565b600081518084526020808501945080840160005b8381101561543b5781516001600160a01b031687529582019590820190600101615416565b509495945050505050565b6040815260006154596040830185615402565b82810360208481019190915284518083528582019282019060005b8181101561549057845183529383019391830191600101615474565b5090979650505050505050565b600080604083850312156154b057600080fd5b82356154bb8161523b565b9150602083013561539b8161523b565b600080604083850312156154de57600080fd5b823561526e8161516a565b60208082526006908201526510a7bbb732b960d11b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006020828403121561555257600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561558457600080fd5b8151611eef8161516a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155ce576155ce61558f565b604052919050565b6000602082840312156155e857600080fd5b815167ffffffffffffffff8082111561560057600080fd5b818401915084601f83011261561457600080fd5b8151818111156156265761562661558f565b615639601f8201601f19166020016155a5565b915080825285602082850101111561565057600080fd5b6156618160208401602086016151b7565b50949350505050565b60006020828403121561567c57600080fd5b815160ff81168114611eef57600080fd5b600067ffffffffffffffff8211156156a7576156a761558f565b5060051b60200190565b600082601f8301126156c257600080fd5b815160206156d76156d28361568d565b6155a5565b82815260059290921b840181019181810190868411156156f657600080fd5b8286015b8481101561571157805183529183019183016156fa565b509695505050505050565b6000806040838503121561572f57600080fd5b825167ffffffffffffffff8082111561574757600080fd5b818501915085601f83011261575b57600080fd5b8151602061576b6156d28361568d565b82815260059290921b8401810191818101908984111561578a57600080fd5b948201945b838610156157b15785516157a28161523b565b8252948201949082019061578f565b918801519196509093505050808211156157ca57600080fd5b506157d7858286016156b1565b9150509250929050565b60208082526023908201527f6469737472696275746f722063616e6e6f7420626520657175616c20746f207a60408201526265726f60e81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156158625761586261583a565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158915761589161583a565b5060010190565b6000602082840312156158aa57600080fd5b8151611eef8161523b565b600080600080600060a086880312156158cd57600080fd5b8551945060208601519350604086015192506060860151915060808601516158f48161516a565b809150509295509295909350565b600080600080600080600060e0888a03121561591d57600080fd5b5050855160208701516040880151606089015160808a015160a08b015160c0909b0151949c939b50919990985090965094509092509050565b600082198211156159695761596961583a565b500190565b85815284602082015260a06040820152600061598d60a0830186615402565b6001600160a01b0394909416606083015250608001529392505050565b6000826159c757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156159e6576159e661583a565b50029056fea2646970667358221220f765f0b9da2da770d6257de600d125a2a72610af9421d4529ed376c59cebe26464736f6c63430008090033

Loading...

Loading

[Download: CSV Export ]

[Download: CSV Export ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.

Connect a Wallet
Connect a Wallet

Compiler specific version warnings:

The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity), FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), DataLocationChangeInInternalOverride (very low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity) Solidity Compiler Bugs.

koji.earth (KOJI v2) Token Tracker | BscScan (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Msgr. Refugio Daniel

Last Updated:

Views: 5597

Rating: 4.3 / 5 (74 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Msgr. Refugio Daniel

Birthday: 1999-09-15

Address: 8416 Beatty Center, Derekfort, VA 72092-0500

Phone: +6838967160603

Job: Mining Executive

Hobby: Woodworking, Knitting, Fishing, Coffee roasting, Kayaking, Horseback riding, Kite flying

Introduction: My name is Msgr. Refugio Daniel, I am a fine, precious, encouraging, calm, glamorous, vivacious, friendly person who loves writing and wants to share my knowledge and understanding with you.