ERC-20
Overview
Max Total Supply
100,000,000,000 DARK
Holders
170
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
39,809,914.692270329 DARKValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DarkOnion
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: NOLICENSE pragma solidity ^0.8.0; /* $$$$$$$\ $$\ $$$$$$\ $$\ $$ __$$\ $$ | $$ __$$\ \__| $$ | $$ | $$$$$$\ $$$$$$\ $$ | $$\ $$ / $$ |$$$$$$$\ $$\ $$$$$$\ $$$$$$$\ $$ | $$ | \____$$\ $$ __$$\ $$ | $$ | $$ | $$ |$$ __$$\ $$ |$$ __$$\ $$ __$$\ $$ | $$ | $$$$$$$ |$$ | \__|$$$$$$ / $$ | $$ |$$ | $$ |$$ |$$ / $$ |$$ | $$ | $$ | $$ |$$ __$$ |$$ | $$ _$$< $$ | $$ |$$ | $$ |$$ |$$ | $$ |$$ | $$ | $$$$$$$ |\$$$$$$$ |$$ | $$ | \$$\ $$$$$$ |$$ | $$ |$$ |\$$$$$$ |$$ | $$ | \_______/ \_______|\__| \__| \__| \______/ \__| \__|\__| \______/ \__| \__| 🔥 Launch: 20th December @ 11pm UTC Website: www.darkonion.co Telegram: @darkoniontoken Twitter: @darkoniontoken Dark-Webbing The Metaverses! ⭐️ $DARK TOKENOMICS ⭐️ 🔸 Supply: 100 Billion 🔸 Team Tokens: 3% (100% vested, 90 days) 🔸 Private Sale: 3% (50% Vested) 🔸 Liquidity Pool: 96% 🔹Starting LP: $30,000 USD. (7.6 ETH) 🔸 Tax: 10% 🔸 Reflection: 3% 🔸 Virtual Asset Wallet: 7% ❗️During the first 24 hours, sell tax is set at 25%. */ import "./Ownable.sol"; import "./IERC20.sol"; import "./IUniswapV2Router02.sol"; import "./IUniswapV2Factory.sol"; import "./Address.sol"; contract DarkOnion is Context, IERC20, Ownable { using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; mapping (address => bool) private _isExcludedFromMaxWallet; mapping (address => bool) public isBot; address[] private _excluded; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10**11 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = _tTotal/142; uint256 public maxTxAmountSell = _tTotal/333; uint256 public maxWalletAmount = _tTotal/100; //antisnipers uint256 public liqAddedBlockNumber; uint256 public blocksToWait = 2; address payable public marketingAddress; mapping (address => bool) public isAutomatedMarketMakerPair; string private constant _name = "Dark Onion"; string private constant _symbol = "DARK"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity = _tTotal/500; struct feeRatesStruct { uint8 rfi; uint8 marketing; uint8 autolp; uint8 toSwap; } feeRatesStruct public buyRates = feeRatesStruct( { rfi: 3, marketing: 7, autolp: 0, toSwap: 7 }); feeRatesStruct public sellRates = feeRatesStruct( { rfi: 3, marketing: 22, autolp: 0, toSwap: 22 }); feeRatesStruct private appliedRates = buyRates; struct TotFeesPaidStruct{ uint256 rfi; uint256 toSwap; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rToSwap; uint256 tTransferAmount; uint256 tRfi; uint256 tToSwap; } event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap); event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BlacklistedUser(address botAddress, bool indexed value); event MaxWalletAmountUpdated(uint256 amount); event ExcludeFromMaxWallet(address account, bool indexed isExcluded); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory()) .createPair(address(this), _UniswapV2Router.WETH()); isAutomatedMarketMakerPair[uniswapPair] = true; emit SetAutomatedMarketMakerPair(uniswapPair, true); UniswapV2Router = _UniswapV2Router; _rOwned[owner()] = _rTotal; marketingAddress= payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingAddress]=true; _isExcludedFromFee[address(this)]=true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[marketingAddress]=true; _isExcludedFromMaxWallet[address(this)]=true; _isExcludedFromMaxWallet[uniswapPair] = true; emit Transfer(address(0), owner(), _tTotal); } //std ERC20: function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } //override ERC20: function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender]+addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } //@dev kept original RFI naming -> "reward" as in reflection function excludeFromReward(address account) external onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function excludeMultipleAccountsFromMaxWallet(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { require(_isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet"); _isExcludedFromMaxWallet[accounts[i]] = excluded; emit ExcludeFromMaxWallet(accounts[i], excluded); } } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function isExcludedFromMaxWallet(address account) public view returns(bool) { return _isExcludedFromMaxWallet[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // @dev receive ETH from UniswapV2Router when swapping receive() external payable {} function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -= rRfi; totFeesPaid.rfi += tRfi; } function _takeToSwap(uint256 rToSwap,uint256 tToSwap) private { _rOwned[address(this)] +=rToSwap; if(_isExcluded[address(this)]) _tOwned[address(this)] += tToSwap; totFeesPaid.toSwap+=tToSwap; } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rToSwap) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = tAmount*appliedRates.rfi/100; s.tToSwap = tAmount*appliedRates.toSwap/100; s.tTransferAmount = tAmount-s.tRfi-s.tToSwap; return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rToSwap) { rAmount = tAmount*currentRate; if(!takeFee) { return(rAmount, rAmount,0,0); } rRfi = s.tRfi*currentRate; rToSwap = s.tToSwap*currentRate; rTransferAmount = rAmount-rRfi-rToSwap; return (rAmount, rTransferAmount, rRfi,rToSwap); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/tSupply; } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply -=_rOwned[_excluded[i]]; tSupply -=_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { if(liqAddedBlockNumber==0 && isAutomatedMarketMakerPair[to] ) {liqAddedBlockNumber = block.number; } require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBot[from], "ERC20: address blacklisted (bot)"); require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"You are trying to transfer more than your balance"); bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); if(takeFee) { if(isAutomatedMarketMakerPair[from]) { if(block.number<liqAddedBlockNumber+blocksToWait) { isBot[to] = true; emit BlacklistedUser(to,true); } appliedRates = buyRates; require(amount<=maxTxAmountBuy, "amount must be <= maxTxAmountBuy"); } else { appliedRates = sellRates; require(amount<=maxTxAmountSell, "amount must be <= maxTxAmountSell"); } } if (balanceOf(address(this)) >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled) { //add liquidity swapAndLiquify(numTokensSellToAddToLiquidity); } _tokenTransfer(from, to, amount, takeFee); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender]) { _tOwned[sender] -= tAmount; } if (_isExcluded[recipient]) { _tOwned[recipient] += s.tTransferAmount; } _rOwned[sender] -= s.rAmount; _rOwned[recipient] += s.rTransferAmount; if(takeFee) { _reflectRfi(s.rRfi, s.tRfi); _takeToSwap(s.rToSwap,s.tToSwap); emit Transfer(sender, address(this), s.tToSwap); } require(_isExcludedFromMaxWallet[recipient] || balanceOf(recipient)<= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount"); emit Transfer(sender, recipient, s.tTransferAmount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 denominator = appliedRates.toSwap*2; uint256 tokensToAddLiquidityWith = contractTokenBalance*appliedRates.autolp/denominator; uint256 toSwap = contractTokenBalance-tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance -initialBalance; uint256 ETHToAddLiquidityWith = deltaBalance*appliedRates.autolp/ (denominator- appliedRates.autolp); // add liquidity to Uniswap addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); marketingAddress.sendValue(address(this).balance); //we give the remaining tax to marketing (5/8 of the toSwap tax) } function swapTokensForETH(uint256 tokenAmount) private { // generate the Pancakeswap pair path of token -> wETH address[] memory path = new address[](2); path[0] = address(this); path[1] = UniswapV2Router.WETH(); if(allowance(address(this), address(UniswapV2Router)) < tokenAmount) { _approve(address(this), address(UniswapV2Router), ~uint256(0)); } // make the swap UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { // add the liquidity UniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); emit LiquidityAdded(tokenAmount, ETHAmount); } function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner{ require(isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value"); isAutomatedMarketMakerPair[_pair] = value; if(value) { _isExcludedFromMaxWallet[_pair] = true; emit ExcludeFromMaxWallet(_pair, value); } emit SetAutomatedMarketMakerPair(_pair, value); } function setBuyFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner { buyRates.rfi=_rfi; buyRates.marketing=_marketing; buyRates.autolp=_autolp; buyRates.toSwap= _marketing+_autolp; } function setSellFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner { sellRates.rfi=_rfi; sellRates.marketing=_marketing; sellRates.autolp=_autolp; sellRates.toSwap= _marketing+_autolp; } function setMaxTransactionAmountsPerK(uint256 _maxTxAmountBuyPer10K, uint256 _maxTxAmountSellPer10K) external onlyOwner { maxTxAmountBuy = _tTotal*_maxTxAmountBuyPer10K/10000; maxTxAmountSell = _tTotal*_maxTxAmountSellPer10K/10000; } function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner { numTokensSellToAddToLiquidity = amountTokens*10**_decimals; } function setMarketingAddress(address payable _marketingAddress) external onlyOwner { marketingAddress = _marketingAddress; } function manualSwapAndAddToLiq() external onlyOwner { swapAndLiquify(balanceOf(address(this))); } // Cannot BLACKLIST user manually, the only way to get into the Blacklist is to snipe, buy in block no.1. We give grace here if a genuine user can prove that they did not snipe in block 0 or 1. function unblacklistSniper(address botAddress) external onlyOwner { require(!isBot[botAddress] ,"address provided is already not blacklisted"); isBot[botAddress] = false; emit BlacklistedUser(botAddress,false); } function setMaxWalletAmount(uint256 _maxAmountWalletPer10K) external onlyOwner { maxWalletAmount = _tTotal*_maxAmountWalletPer10K/10000; emit MaxWalletAmountUpdated(maxWalletAmount); } function excludeFromMaxWallet(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value"); _isExcludedFromMaxWallet[account] = excluded; emit ExcludeFromMaxWallet(account, excluded); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IUniswapV2Router01 { 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 removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); 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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPer10K","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPer10K","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountWalletPer10K","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a62000657565b620000239064174876e80062000742565b600981905562000036906000196200077e565b620000449060001962000764565b600a55608e600954620000589190620005f3565b600b5561014d6009546200006d9190620005f3565b600c556064600954620000819190620005f3565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000ae906101f490620005f3565b601455604080516080808201835260038083526007602080850182905260008587018190526060958601929092526015805460ff19908116851761ff00199081166107001763ffff0000199081166307000000179384905589519788018a52868852601694880185905298870194909452949095018190528054841690921781166116001790941663160000001790556017805463ff0000001962ff00001960ff80871693909516929092179095166101008086048516021716620100008085048416021793909316630100000092839004919091169091021790553480156200019757600080fd5b50620001ac620001a66200053d565b62000541565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620005a0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028357600080fd5b505afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620005a0565b6040518363ffffffff1660e01b8152600401620002dd929190620005d0565b602060405180830381600087803b158015620002f857600080fd5b505af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003339190620005a0565b601380546001600160a01b0319166001600160a01b03928316178082558216600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003cc62000591565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b031916331790556001906004906200040d62000591565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560105490911681526004909252808220805484166001908117909155308352908220805490931681179092556006906200047462000591565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004e762000591565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200052e9190620005ea565b60405180910390a350620007c1565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620005b2578081fd5b81516001600160a01b0381168114620005c9578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b600082620006055762000605620007ab565b500490565b80825b60018086116200061e57506200064e565b81870482111562000633576200063362000795565b808616156200064157918102915b9490941c9380026200060d565b94509492505050565b6000620005c960001960ff8516846000826200067657506001620005c9565b816200068557506000620005c9565b81600181146200069e5760028114620006a957620006dd565b6001915050620005c9565b60ff841115620006bd57620006bd62000795565b6001841b915084821115620006d657620006d662000795565b50620005c9565b5060208310610133831016604e8410600b841016171562000715575081810a838111156200070f576200070f62000795565b620005c9565b6200072484848460016200060a565b80860482111562000739576200073962000795565b02949350505050565b60008160001904831182151516156200075f576200075f62000795565b500290565b60008282101562000779576200077962000795565b500390565b600082620007905762000790620007ab565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61359780620007d16000396000f3fe6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a8f565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b53565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612bad565b34801561035457600080fd5b506103686103633660046129cc565b610943565b60405161031d9190612ba2565b34801561038157600080fd5b506102f96103903660046128e8565b610961565b3480156103a157600080fd5b506103aa610a33565b60405161031d919061328e565b3480156103c357600080fd5b506103686103d2366004612958565b610a39565b3480156103e357600080fd5b506102f96103f2366004612a8f565b610acb565b34801561040357600080fd5b506103aa610412366004612a8f565b610b63565b34801561042357600080fd5b5061042c610ba6565b60405161031d9190613315565b34801561044557600080fd5b506102f96104543660046128e8565b610bab565b34801561046557600080fd5b506103686104743660046129cc565b610d80565b34801561048557600080fd5b506103686104943660046128e8565b610dd4565b3480156104a557600080fd5b506102f96104b43660046128e8565b610de9565b3480156104c557600080fd5b506103aa6104d4366004612aa7565b610e4c565b3480156104e557600080fd5b50610368610ea6565b3480156104fa57600080fd5b506102f9610509366004612b17565b610eb6565b34801561051a57600080fd5b506102f96105293660046128e8565b610f55565b34801561053a57600080fd5b506103686105493660046128e8565b61108d565b34801561055a57600080fd5b506103686105693660046128e8565b6110ab565b34801561057a57600080fd5b506103aa6105893660046128e8565b6110c9565b34801561059a57600080fd5b506105a361112b565b60405161031d9493929190613323565b3480156105bf57600080fd5b506102f9611150565b3480156105d457600080fd5b506105a361119b565b3480156105e957600080fd5b506103686105f83660046128e8565b6111c0565b34801561060957600080fd5b506102f9610618366004612ac9565b6111d5565b34801561062957600080fd5b506103686106383660046128e8565b611255565b34801561064957600080fd5b506103aa611273565b34801561065e57600080fd5b50610310611279565b34801561067357600080fd5b506102f96106823660046128e8565b611288565b34801561069357600080fd5b506102f96112e9565b3480156106a857600080fd5b5061033b611339565b3480156106bd57600080fd5b506102f96106cc366004612998565b611357565b3480156106dd57600080fd5b506106e661149e565b60405161031d929190613307565b34801561070057600080fd5b5061036861070f3660046129cc565b6114a7565b34801561072057600080fd5b50610310611520565b34801561073557600080fd5b506103686107443660046129cc565b61152f565b34801561075557600080fd5b506103aa611543565b34801561076a57600080fd5b506102f96107793660046129f7565b611549565b34801561078a57600080fd5b506102f9610799366004612a75565b6116f4565b3480156107aa57600080fd5b5061031061177a565b3480156107bf57600080fd5b506103aa611789565b3480156107d457600080fd5b506102f96107e3366004612998565b61178f565b3480156107f457600080fd5b506103aa611871565b34801561080957600080fd5b506103aa611877565b34801561081e57600080fd5b506103aa61187d565b34801561083357600080fd5b506103aa610842366004612920565b611883565b34801561085357600080fd5b506102f9610862366004612b17565b6118ae565b34801561087357600080fd5b506102f96108823660046128e8565b61194d565b34801561089357600080fd5b506102f96108a23660046128e8565b6119ad565b6108af611a1e565b6001600160a01b03166108c0611279565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f3565b60405180910390fd5b6108fb6009600a6133eb565b61090590826134bc565b60145550565b60125461010090046001600160a01b031681565b60408051808201909152600a8152692230b9359027b734b7b760b11b602082015290565b6000610957610950611a1e565b8484611a22565b5060015b92915050565b610969611a1e565b6001600160a01b031661097a611279565b6001600160a01b0316146109a05760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526007602052604090205460ff16156109d95760405162461bcd60e51b81526004016108e690613029565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a28908490612b53565b60405180910390a250565b60095490565b6000610a46848484611ad6565b6001600160a01b038416600090815260036020526040812081610a67611a1e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aaa5760405162461bcd60e51b81526004016108e6906130ab565b610abe85610ab6611a1e565b858403611a22565b60019150505b9392505050565b610ad3611a1e565b6001600160a01b0316610ae4611279565b6001600160a01b031614610b0a5760405162461bcd60e51b81526004016108e6906130f3565b61271081600954610b1b91906134bc565b610b259190613385565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b589161328e565b60405180910390a150565b6000600a54821115610b875760405162461bcd60e51b81526004016108e690612cfb565b6000610b91611e17565b9050610b9d8184613385565b9150505b919050565b600990565b610bb3611a1e565b6001600160a01b0316610bc4611279565b6001600160a01b031614610bea5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff16610c225760405162461bcd60e51b81526004016108e690612f86565b60005b600854811015610d7c57816001600160a01b031660088281548110610c5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d6a5760088054610c8590600190613504565b81548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7c565b80610d748161351b565b915050610c25565b5050565b6000610957610d8d611a1e565b848460036000610d9b611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcf9190613348565b611a22565b60076020526000908152604090205460ff1681565b610df1611a1e565b6001600160a01b0316610e02611279565b6001600160a01b031614610e285760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e705760405162461bcd60e51b81526004016108e690613074565b81610e8c576000610e82846001611e3a565b51915061095b9050565b6000610e99846001611e3a565b60200151915061095b9050565b601354600160a01b900460ff1681565b610ebe611a1e565b6001600160a01b0316610ecf611279565b6001600160a01b031614610ef55760405162461bcd60e51b81526004016108e6906130f3565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f318183613360565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5d611a1e565b6001600160a01b0316610f6e611279565b6001600160a01b031614610f945760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff1615610fcd5760405162461bcd60e51b81526004016108e690612ea0565b6001600160a01b03811660009081526001602052604090205415611027576001600160a01b03811660009081526001602052604090205461100d90610b63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110957506001600160a01b038116600090815260026020526040902054610ba1565b6001600160a01b03821660009081526001602052604090205461095b90610b63565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611158611a1e565b6001600160a01b0316611169611279565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016108e6906130f3565b6111996000611e78565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111dd611a1e565b6001600160a01b03166111ee611279565b6001600160a01b0316146112145760405162461bcd60e51b81526004016108e6906130f3565b6127108260095461122591906134bc565b61122f9190613385565b600b55600954612710906112449083906134bc565b61124e9190613385565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b611290611a1e565b6001600160a01b03166112a1611279565b6001600160a01b0316146112c75760405162461bcd60e51b81526004016108e6906130f3565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112f1611a1e565b6001600160a01b0316611302611279565b6001600160a01b0316146113285760405162461bcd60e51b81526004016108e6906130f3565b611199611334306110c9565b611ec8565b6040805180820190915260048152634441524b60e01b602082015290565b61135f611a1e565b6001600160a01b0316611370611279565b6001600160a01b0316146113965760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d55760405162461bcd60e51b81526004016108e690612dcd565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611462576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611459908590612b53565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b6611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115025760405162461bcd60e51b81526004016108e690613249565b61151661150d611a1e565b85858403611a22565b5060019392505050565b6010546001600160a01b031681565b600061095761153c611a1e565b8484611ad6565b600d5481565b611551611a1e565b6001600160a01b0316611562611279565b6001600160a01b0316146115885760405162461bcd60e51b81526004016108e6906130f3565b60005b828110156116ee57811515600660008686858181106115ba57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115cf91906128e8565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160c5760405162461bcd60e51b81526004016108e690612c43565b816006600086868581811061163157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164691906128e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c791906128e8565b6040516116d49190612b53565b60405180910390a2806116e68161351b565b91505061158b565b50505050565b6116fc611a1e565b6001600160a01b031661170d611279565b6001600160a01b0316146117335760405162461bcd60e51b81526004016108e6906130f3565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b58908390612ba2565b6013546001600160a01b031681565b60145481565b611797611a1e565b6001600160a01b03166117a8611279565b6001600160a01b0316146117ce5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180d5760405162461bcd60e51b81526004016108e690612ed7565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611865908590612b53565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b6611a1e565b6001600160a01b03166118c7611279565b6001600160a01b0316146118ed5760405162461bcd60e51b81526004016108e6906130f3565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff0000191662010000918416919091021790556119298183613360565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611955611a1e565b6001600160a01b0316611966611279565b6001600160a01b03161461198c5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b5611a1e565b6001600160a01b03166119c6611279565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b038116611a125760405162461bcd60e51b81526004016108e690612d45565b611a1b81611e78565b50565b3390565b6001600160a01b038316611a485760405162461bcd60e51b81526004016108e690613205565b6001600160a01b038216611a6e5760405162461bcd60e51b81526004016108e690612d8b565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611ac990859061328e565b60405180910390a3505050565b600e54158015611afe57506001600160a01b03821660009081526011602052604090205460ff165b15611b085743600e555b6001600160a01b038316611b2e5760405162461bcd60e51b81526004016108e6906131c0565b6001600160a01b038216611b545760405162461bcd60e51b81526004016108e690612c00565b6001600160a01b03831660009081526007602052604090205460ff1615611b8d5760405162461bcd60e51b81526004016108e690612ff4565b60008111611bad5760405162461bcd60e51b81526004016108e690613128565b611bb6836110c9565b811115611bd55760405162461bcd60e51b81526004016108e690612caa565b6001600160a01b03831660009081526004602052604081205460ff1680611c1457506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da4576001600160a01b03841660009081526011602052604090205460ff1615611d2f57600f54600e54611c4e9190613348565b431015611cb5576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cac908690612b53565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2a5760405162461bcd60e51b81526004016108e690612e6b565b611da4565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da45760405162461bcd60e51b81526004016108e690612e2a565b601454611db0306110c9565b10158015611dc1575060125460ff16155b8015611de657506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfb5750601354600160a01b900460ff165b15611e0b57611e0b601454611ec8565b6116ee84848484611fb2565b6000806000611e246121e4565b9092509050611e338183613385565b9250505090565b611e4261288a565b611e4c83836123a2565b9050611e61818484611e5c611e17565b61242c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef0906301000000900460ff1660026134db565b60175460ff91821692506000918391611f11916201000090910416856134bc565b611f1b9190613385565b90506000611f298285613504565b905047611f3582612497565b6000611f418247613504565b601754909150600090611f5d9062010000900460ff1687613504565b601754611f739062010000900460ff16846134bc565b611f7d9190613385565b9050611f898582612666565b601054611f9f906001600160a01b03164761273e565b50506012805460ff191690555050505050565b6000611fbe8383611e3a565b6001600160a01b03861660009081526005602052604090205490915060ff1615612010576001600160a01b0385166000908152600260205260408120805485929061200a908490613504565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120645760808101516001600160a01b0385166000908152600260205260408120805490919061205e908490613348565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061208e908490613504565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c2908490613348565b90915550508115612141576120df81604001518260a001516127df565b6120f181606001518260c00151612814565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612138919061328e565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121725750600d5461216f856110c9565b11155b61218e5760405162461bcd60e51b81526004016108e690613171565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d5919061328e565b60405180910390a35050505050565b600a546009546000918291825b60085481101561236f5782600160006008848154811061222157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229a575081600260006008848154811061227357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b157600a546009549450945050505061239e565b60016000600883815481106122d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123059084613504565b9250600260006008838154811061232c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235b9083613504565b9150806123678161351b565b9150506121f1565b50600954600a546123809190613385565b82101561239857600a5460095493509350505061239e565b90925090505b9091565b6123aa61288a565b816123bb576080810183905261095b565b6017546064906123ce9060ff16856134bc565b6123d89190613385565b60a08201526017546064906123f7906301000000900460ff16856134bc565b6124019190613385565b60c0820181905260a08201516124179085613504565b6124219190613504565b608082015292915050565b600080808061243b85886134bc565b9350856124505750829150600090508061248c565b848860a0015161246091906134bc565b9150848860c0015161247291906134bc565b90508061247f8386613504565b6124899190613504565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124da57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254857600080fd5b505afa15801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125809190612904565b816001815181106125a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125ce91309161010090910416611883565b10156125f3576012546125f390309061010090046001600160a01b0316600019611a22565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612630908590600090869030904290600401613297565b600060405180830381600087803b15801561264a57600080fd5b505af115801561265e573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268a611279565b426040518863ffffffff1660e01b81526004016126ac96959493929190612b67565b6060604051808303818588803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fe9190612aea565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612732929190613307565b60405180910390a15050565b8047101561275e5760405162461bcd60e51b81526004016108e690612fbd565b6000826001600160a01b03168260405161277790612b50565b60006040518083038185875af1925050503d80600081146127b4576040519150601f19603f3d011682016040523d82523d6000602084013e6127b9565b606091505b50509050806127da5760405162461bcd60e51b81526004016108e690612f29565b505050565b81600a60008282546127f19190613504565b90915550506018805482919060009061280b908490613348565b90915550505050565b3060009081526001602052604081208054849290612833908490613348565b90915550503060009081526005602052604090205460ff161561287557306000908152600260205260408120805483929061286f908490613348565b90915550505b806018600101600082825461280b9190613348565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610ba157600080fd5b803560ff81168114610ba157600080fd5b6000602082840312156128f9578081fd5b8135610ac48161354c565b600060208284031215612915578081fd5b8151610ac48161354c565b60008060408385031215612932578081fd5b823561293d8161354c565b9150602083013561294d8161354c565b809150509250929050565b60008060006060848603121561296c578081fd5b83356129778161354c565b925060208401356129878161354c565b929592945050506040919091013590565b600080604083850312156129aa578182fd5b82356129b58161354c565b91506129c3602084016128c7565b90509250929050565b600080604083850312156129de578182fd5b82356129e98161354c565b946020939093013593505050565b600080600060408486031215612a0b578283fd5b833567ffffffffffffffff80821115612a22578485fd5b818601915086601f830112612a35578485fd5b813581811115612a43578586fd5b8760208083028501011115612a56578586fd5b602092830195509350612a6c91860190506128c7565b90509250925092565b600060208284031215612a86578081fd5b610ac4826128c7565b600060208284031215612aa0578081fd5b5035919050565b60008060408385031215612ab9578182fd5b823591506129c3602084016128c7565b60008060408385031215612adb578182fd5b50508035926020909101359150565b600080600060608486031215612afe578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2b578283fd5b612b34846128d7565b9250612b42602085016128d7565b9150612a6c604085016128d7565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bd957858101830151858201604001528201612bbd565b81811115612bea5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e65784516001600160a01b0316835293830193918301916001016132c1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335b5761335b613536565b500190565b600060ff821660ff84168060ff0382111561337d5761337d613536565b019392505050565b6000826133a057634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b757506133e2565b8187048211156133c9576133c9613536565b808616156133d657918102915b9490941c9380026133a8565b94509492505050565b6000610ac460001960ff85168460008261340757506001610ac4565b8161341457506000610ac4565b816001811461342a576002811461343457613461565b6001915050610ac4565b60ff84111561344557613445613536565b6001841b91508482111561345b5761345b613536565b50610ac4565b5060208310610133831016604e8410600b8410161715613494575081810a8381111561348f5761348f613536565b610ac4565b6134a184848460016133a5565b8086048211156134b3576134b3613536565b02949350505050565b60008160001904831182151516156134d6576134d6613536565b500290565b600060ff821660ff84168160ff04811182151516156134fc576134fc613536565b029392505050565b60008282101561351657613516613536565b500390565b600060001982141561352f5761352f613536565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1b57600080fdfea26469706673582212207db737d2bf1d1e50c2068343f3d6f0cdbe8fbdc36002f5375939c9ca607347b564736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a8f565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b53565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612bad565b34801561035457600080fd5b506103686103633660046129cc565b610943565b60405161031d9190612ba2565b34801561038157600080fd5b506102f96103903660046128e8565b610961565b3480156103a157600080fd5b506103aa610a33565b60405161031d919061328e565b3480156103c357600080fd5b506103686103d2366004612958565b610a39565b3480156103e357600080fd5b506102f96103f2366004612a8f565b610acb565b34801561040357600080fd5b506103aa610412366004612a8f565b610b63565b34801561042357600080fd5b5061042c610ba6565b60405161031d9190613315565b34801561044557600080fd5b506102f96104543660046128e8565b610bab565b34801561046557600080fd5b506103686104743660046129cc565b610d80565b34801561048557600080fd5b506103686104943660046128e8565b610dd4565b3480156104a557600080fd5b506102f96104b43660046128e8565b610de9565b3480156104c557600080fd5b506103aa6104d4366004612aa7565b610e4c565b3480156104e557600080fd5b50610368610ea6565b3480156104fa57600080fd5b506102f9610509366004612b17565b610eb6565b34801561051a57600080fd5b506102f96105293660046128e8565b610f55565b34801561053a57600080fd5b506103686105493660046128e8565b61108d565b34801561055a57600080fd5b506103686105693660046128e8565b6110ab565b34801561057a57600080fd5b506103aa6105893660046128e8565b6110c9565b34801561059a57600080fd5b506105a361112b565b60405161031d9493929190613323565b3480156105bf57600080fd5b506102f9611150565b3480156105d457600080fd5b506105a361119b565b3480156105e957600080fd5b506103686105f83660046128e8565b6111c0565b34801561060957600080fd5b506102f9610618366004612ac9565b6111d5565b34801561062957600080fd5b506103686106383660046128e8565b611255565b34801561064957600080fd5b506103aa611273565b34801561065e57600080fd5b50610310611279565b34801561067357600080fd5b506102f96106823660046128e8565b611288565b34801561069357600080fd5b506102f96112e9565b3480156106a857600080fd5b5061033b611339565b3480156106bd57600080fd5b506102f96106cc366004612998565b611357565b3480156106dd57600080fd5b506106e661149e565b60405161031d929190613307565b34801561070057600080fd5b5061036861070f3660046129cc565b6114a7565b34801561072057600080fd5b50610310611520565b34801561073557600080fd5b506103686107443660046129cc565b61152f565b34801561075557600080fd5b506103aa611543565b34801561076a57600080fd5b506102f96107793660046129f7565b611549565b34801561078a57600080fd5b506102f9610799366004612a75565b6116f4565b3480156107aa57600080fd5b5061031061177a565b3480156107bf57600080fd5b506103aa611789565b3480156107d457600080fd5b506102f96107e3366004612998565b61178f565b3480156107f457600080fd5b506103aa611871565b34801561080957600080fd5b506103aa611877565b34801561081e57600080fd5b506103aa61187d565b34801561083357600080fd5b506103aa610842366004612920565b611883565b34801561085357600080fd5b506102f9610862366004612b17565b6118ae565b34801561087357600080fd5b506102f96108823660046128e8565b61194d565b34801561089357600080fd5b506102f96108a23660046128e8565b6119ad565b6108af611a1e565b6001600160a01b03166108c0611279565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f3565b60405180910390fd5b6108fb6009600a6133eb565b61090590826134bc565b60145550565b60125461010090046001600160a01b031681565b60408051808201909152600a8152692230b9359027b734b7b760b11b602082015290565b6000610957610950611a1e565b8484611a22565b5060015b92915050565b610969611a1e565b6001600160a01b031661097a611279565b6001600160a01b0316146109a05760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526007602052604090205460ff16156109d95760405162461bcd60e51b81526004016108e690613029565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a28908490612b53565b60405180910390a250565b60095490565b6000610a46848484611ad6565b6001600160a01b038416600090815260036020526040812081610a67611a1e565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aaa5760405162461bcd60e51b81526004016108e6906130ab565b610abe85610ab6611a1e565b858403611a22565b60019150505b9392505050565b610ad3611a1e565b6001600160a01b0316610ae4611279565b6001600160a01b031614610b0a5760405162461bcd60e51b81526004016108e6906130f3565b61271081600954610b1b91906134bc565b610b259190613385565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b589161328e565b60405180910390a150565b6000600a54821115610b875760405162461bcd60e51b81526004016108e690612cfb565b6000610b91611e17565b9050610b9d8184613385565b9150505b919050565b600990565b610bb3611a1e565b6001600160a01b0316610bc4611279565b6001600160a01b031614610bea5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff16610c225760405162461bcd60e51b81526004016108e690612f86565b60005b600854811015610d7c57816001600160a01b031660088281548110610c5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d6a5760088054610c8590600190613504565b81548110610ca357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4357634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7c565b80610d748161351b565b915050610c25565b5050565b6000610957610d8d611a1e565b848460036000610d9b611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcf9190613348565b611a22565b60076020526000908152604090205460ff1681565b610df1611a1e565b6001600160a01b0316610e02611279565b6001600160a01b031614610e285760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e705760405162461bcd60e51b81526004016108e690613074565b81610e8c576000610e82846001611e3a565b51915061095b9050565b6000610e99846001611e3a565b60200151915061095b9050565b601354600160a01b900460ff1681565b610ebe611a1e565b6001600160a01b0316610ecf611279565b6001600160a01b031614610ef55760405162461bcd60e51b81526004016108e6906130f3565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f318183613360565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5d611a1e565b6001600160a01b0316610f6e611279565b6001600160a01b031614610f945760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03811660009081526005602052604090205460ff1615610fcd5760405162461bcd60e51b81526004016108e690612ea0565b6001600160a01b03811660009081526001602052604090205415611027576001600160a01b03811660009081526001602052604090205461100d90610b63565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110957506001600160a01b038116600090815260026020526040902054610ba1565b6001600160a01b03821660009081526001602052604090205461095b90610b63565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611158611a1e565b6001600160a01b0316611169611279565b6001600160a01b03161461118f5760405162461bcd60e51b81526004016108e6906130f3565b6111996000611e78565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111dd611a1e565b6001600160a01b03166111ee611279565b6001600160a01b0316146112145760405162461bcd60e51b81526004016108e6906130f3565b6127108260095461122591906134bc565b61122f9190613385565b600b55600954612710906112449083906134bc565b61124e9190613385565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b611290611a1e565b6001600160a01b03166112a1611279565b6001600160a01b0316146112c75760405162461bcd60e51b81526004016108e6906130f3565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112f1611a1e565b6001600160a01b0316611302611279565b6001600160a01b0316146113285760405162461bcd60e51b81526004016108e6906130f3565b611199611334306110c9565b611ec8565b6040805180820190915260048152634441524b60e01b602082015290565b61135f611a1e565b6001600160a01b0316611370611279565b6001600160a01b0316146113965760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d55760405162461bcd60e51b81526004016108e690612dcd565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611462576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611459908590612b53565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b6611a1e565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115025760405162461bcd60e51b81526004016108e690613249565b61151661150d611a1e565b85858403611a22565b5060019392505050565b6010546001600160a01b031681565b600061095761153c611a1e565b8484611ad6565b600d5481565b611551611a1e565b6001600160a01b0316611562611279565b6001600160a01b0316146115885760405162461bcd60e51b81526004016108e6906130f3565b60005b828110156116ee57811515600660008686858181106115ba57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115cf91906128e8565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160c5760405162461bcd60e51b81526004016108e690612c43565b816006600086868581811061163157634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164691906128e8565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c791906128e8565b6040516116d49190612b53565b60405180910390a2806116e68161351b565b91505061158b565b50505050565b6116fc611a1e565b6001600160a01b031661170d611279565b6001600160a01b0316146117335760405162461bcd60e51b81526004016108e6906130f3565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b58908390612ba2565b6013546001600160a01b031681565b60145481565b611797611a1e565b6001600160a01b03166117a8611279565b6001600160a01b0316146117ce5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180d5760405162461bcd60e51b81526004016108e690612ed7565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611865908590612b53565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b6611a1e565b6001600160a01b03166118c7611279565b6001600160a01b0316146118ed5760405162461bcd60e51b81526004016108e6906130f3565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff0000191662010000918416919091021790556119298183613360565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611955611a1e565b6001600160a01b0316611966611279565b6001600160a01b03161461198c5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b5611a1e565b6001600160a01b03166119c6611279565b6001600160a01b0316146119ec5760405162461bcd60e51b81526004016108e6906130f3565b6001600160a01b038116611a125760405162461bcd60e51b81526004016108e690612d45565b611a1b81611e78565b50565b3390565b6001600160a01b038316611a485760405162461bcd60e51b81526004016108e690613205565b6001600160a01b038216611a6e5760405162461bcd60e51b81526004016108e690612d8b565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611ac990859061328e565b60405180910390a3505050565b600e54158015611afe57506001600160a01b03821660009081526011602052604090205460ff165b15611b085743600e555b6001600160a01b038316611b2e5760405162461bcd60e51b81526004016108e6906131c0565b6001600160a01b038216611b545760405162461bcd60e51b81526004016108e690612c00565b6001600160a01b03831660009081526007602052604090205460ff1615611b8d5760405162461bcd60e51b81526004016108e690612ff4565b60008111611bad5760405162461bcd60e51b81526004016108e690613128565b611bb6836110c9565b811115611bd55760405162461bcd60e51b81526004016108e690612caa565b6001600160a01b03831660009081526004602052604081205460ff1680611c1457506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da4576001600160a01b03841660009081526011602052604090205460ff1615611d2f57600f54600e54611c4e9190613348565b431015611cb5576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cac908690612b53565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2a5760405162461bcd60e51b81526004016108e690612e6b565b611da4565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da45760405162461bcd60e51b81526004016108e690612e2a565b601454611db0306110c9565b10158015611dc1575060125460ff16155b8015611de657506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfb5750601354600160a01b900460ff165b15611e0b57611e0b601454611ec8565b6116ee84848484611fb2565b6000806000611e246121e4565b9092509050611e338183613385565b9250505090565b611e4261288a565b611e4c83836123a2565b9050611e61818484611e5c611e17565b61242c565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef0906301000000900460ff1660026134db565b60175460ff91821692506000918391611f11916201000090910416856134bc565b611f1b9190613385565b90506000611f298285613504565b905047611f3582612497565b6000611f418247613504565b601754909150600090611f5d9062010000900460ff1687613504565b601754611f739062010000900460ff16846134bc565b611f7d9190613385565b9050611f898582612666565b601054611f9f906001600160a01b03164761273e565b50506012805460ff191690555050505050565b6000611fbe8383611e3a565b6001600160a01b03861660009081526005602052604090205490915060ff1615612010576001600160a01b0385166000908152600260205260408120805485929061200a908490613504565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120645760808101516001600160a01b0385166000908152600260205260408120805490919061205e908490613348565b90915550505b80516001600160a01b0386166000908152600160205260408120805490919061208e908490613504565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c2908490613348565b90915550508115612141576120df81604001518260a001516127df565b6120f181606001518260c00151612814565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051612138919061328e565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121725750600d5461216f856110c9565b11155b61218e5760405162461bcd60e51b81526004016108e690613171565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d5919061328e565b60405180910390a35050505050565b600a546009546000918291825b60085481101561236f5782600160006008848154811061222157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229a575081600260006008848154811061227357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b157600a546009549450945050505061239e565b60016000600883815481106122d657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123059084613504565b9250600260006008838154811061232c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235b9083613504565b9150806123678161351b565b9150506121f1565b50600954600a546123809190613385565b82101561239857600a5460095493509350505061239e565b90925090505b9091565b6123aa61288a565b816123bb576080810183905261095b565b6017546064906123ce9060ff16856134bc565b6123d89190613385565b60a08201526017546064906123f7906301000000900460ff16856134bc565b6124019190613385565b60c0820181905260a08201516124179085613504565b6124219190613504565b608082015292915050565b600080808061243b85886134bc565b9350856124505750829150600090508061248c565b848860a0015161246091906134bc565b9150848860c0015161247291906134bc565b90508061247f8386613504565b6124899190613504565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124da57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254857600080fd5b505afa15801561255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125809190612904565b816001815181106125a157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125ce91309161010090910416611883565b10156125f3576012546125f390309061010090046001600160a01b0316600019611a22565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612630908590600090869030904290600401613297565b600060405180830381600087803b15801561264a57600080fd5b505af115801561265e573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268a611279565b426040518863ffffffff1660e01b81526004016126ac96959493929190612b67565b6060604051808303818588803b1580156126c557600080fd5b505af11580156126d9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fe9190612aea565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612732929190613307565b60405180910390a15050565b8047101561275e5760405162461bcd60e51b81526004016108e690612fbd565b6000826001600160a01b03168260405161277790612b50565b60006040518083038185875af1925050503d80600081146127b4576040519150601f19603f3d011682016040523d82523d6000602084013e6127b9565b606091505b50509050806127da5760405162461bcd60e51b81526004016108e690612f29565b505050565b81600a60008282546127f19190613504565b90915550506018805482919060009061280b908490613348565b90915550505050565b3060009081526001602052604081208054849290612833908490613348565b90915550503060009081526005602052604090205460ff161561287557306000908152600260205260408120805483929061286f908490613348565b90915550505b806018600101600082825461280b9190613348565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610ba157600080fd5b803560ff81168114610ba157600080fd5b6000602082840312156128f9578081fd5b8135610ac48161354c565b600060208284031215612915578081fd5b8151610ac48161354c565b60008060408385031215612932578081fd5b823561293d8161354c565b9150602083013561294d8161354c565b809150509250929050565b60008060006060848603121561296c578081fd5b83356129778161354c565b925060208401356129878161354c565b929592945050506040919091013590565b600080604083850312156129aa578182fd5b82356129b58161354c565b91506129c3602084016128c7565b90509250929050565b600080604083850312156129de578182fd5b82356129e98161354c565b946020939093013593505050565b600080600060408486031215612a0b578283fd5b833567ffffffffffffffff80821115612a22578485fd5b818601915086601f830112612a35578485fd5b813581811115612a43578586fd5b8760208083028501011115612a56578586fd5b602092830195509350612a6c91860190506128c7565b90509250925092565b600060208284031215612a86578081fd5b610ac4826128c7565b600060208284031215612aa0578081fd5b5035919050565b60008060408385031215612ab9578182fd5b823591506129c3602084016128c7565b60008060408385031215612adb578182fd5b50508035926020909101359150565b600080600060608486031215612afe578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2b578283fd5b612b34846128d7565b9250612b42602085016128d7565b9150612a6c604085016128d7565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bd957858101830151858201604001528201612bbd565b81811115612bea5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e65784516001600160a01b0316835293830193918301916001016132c1565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335b5761335b613536565b500190565b600060ff821660ff84168060ff0382111561337d5761337d613536565b019392505050565b6000826133a057634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b757506133e2565b8187048211156133c9576133c9613536565b808616156133d657918102915b9490941c9380026133a8565b94509492505050565b6000610ac460001960ff85168460008261340757506001610ac4565b8161341457506000610ac4565b816001811461342a576002811461343457613461565b6001915050610ac4565b60ff84111561344557613445613536565b6001841b91508482111561345b5761345b613536565b50610ac4565b5060208310610133831016604e8410600b8410161715613494575081810a8381111561348f5761348f613536565b610ac4565b6134a184848460016133a5565b8086048211156134b3576134b3613536565b02949350505050565b60008160001904831182151516156134d6576134d6613536565b500290565b600060ff821660ff84168160ff04811182151516156134fc576134fc613536565b029392505050565b60008282101561351657613516613536565b500390565b600060001982141561352f5761352f613536565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1b57600080fdfea26469706673582212207db737d2bf1d1e50c2068343f3d6f0cdbe8fbdc36002f5375939c9ca607347b564736f6c63430008000033
Deployed Bytecode Sourcemap
1459:19045:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19068:156;;;;;;;;;;-1:-1:-1;19068:156:2;;;;;:::i;:::-;;:::i;:::-;;2718:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5363:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6294:161::-;;;;;;;;;;-1:-1:-1;6294:161:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19714:242::-;;;;;;;;;;-1:-1:-1;19714:242:2;;;;;:::i;:::-;;:::i;5659:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6463:450::-;;;;;;;;;;-1:-1:-1;6463:450:2;;;;;:::i;:::-;;:::i;19964:207::-;;;;;;;;;;-1:-1:-1;19964:207:2;;;;;:::i;:::-;;:::i;8157:248::-;;;;;;;;;;-1:-1:-1;8157:248:2;;;;;:::i;:::-;;:::i;5545:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8822:475::-;;;;;;;;;;-1:-1:-1;8822:475:2;;;;;:::i;:::-;;:::i;6921:213::-;;;;;;;;;;-1:-1:-1;6921:213:2;;;;;:::i;:::-;;:::i;1913:38::-;;;;;;;;;;-1:-1:-1;1913:38:2;;;;;:::i;:::-;;:::i;9305:113::-;;;;;;;;;;-1:-1:-1;9305:113:2;;;;;:::i;:::-;;:::i;7691:456::-;;;;;;;;;;-1:-1:-1;7691:456:2;;;;;:::i;:::-;;:::i;2799:40::-;;;;;;;;;;;;;:::i;18318:231::-;;;;;;;;;;-1:-1:-1;18318:231:2;;;;;:::i;:::-;;:::i;8479:335::-;;;;;;;;;;-1:-1:-1;8479:335:2;;;;;:::i;:::-;;:::i;10008:123::-;;;;;;;;;;-1:-1:-1;10008:123:2;;;;;:::i;:::-;;:::i;10137:135::-;;;;;;;;;;-1:-1:-1;10137:135:2;;;;;:::i;:::-;;:::i;5762:198::-;;;;;;;;;;-1:-1:-1;5762:198:2;;;;;:::i;:::-;;:::i;3186:143::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;1650:94:7:-;;;;;;;;;;;;;:::i;3035:142:2:-;;;;;;;;;;;;;:::i;2512:59::-;;;;;;;;;;-1:-1:-1;2512:59:2;;;;;:::i;:::-;;:::i;18801:255::-;;;;;;;;;;-1:-1:-1;18801:255:2;;;;;:::i;:::-;;:::i;7563:120::-;;;;;;;;;;-1:-1:-1;7563:120:2;;;;;:::i;:::-;;:::i;2383:34::-;;;;;;;;;;;;;:::i;999:87:7:-;;;;;;;;;;;;;:::i;19232:143:2:-;;;;;;;;;;-1:-1:-1;19232:143:2;;;;;:::i;:::-;;:::i;19383:120::-;;;;;;;;;;;;;:::i;5452:87::-;;;;;;;;;;;;;:::i;17847:463::-;;;;;;;;;;-1:-1:-1;17847:463:2;;;;;:::i;:::-;;:::i;3478:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;7142:413::-;;;;;;;;;;-1:-1:-1;7142:413:2;;;;;:::i;:::-;;:::i;2464:39::-;;;;;;;;;;;;;:::i;5968:167::-;;;;;;;;;;-1:-1:-1;5968:167:2;;;;;:::i;:::-;;:::i;2306:44::-;;;;;;;;;;;;;:::i;9430:450::-;;;;;;;;;;-1:-1:-1;9430:450:2;;;;;:::i;:::-;;:::i;10280:167::-;;;;;;;;;;-1:-1:-1;10280:167:2;;;;;:::i;:::-;;:::i;2766:26::-;;;;;;;;;;;;;:::i;2846:58::-;;;;;;;;;;;;;:::i;20179:320::-;;;;;;;;;;-1:-1:-1;20179:320:2;;;;;:::i;:::-;;:::i;2254:44::-;;;;;;;;;;;;;:::i;2203:43::-;;;;;;;;;;;;;:::i;2424:31::-;;;;;;;;;;;;;:::i;6143:143::-;;;;;;;;;;-1:-1:-1;6143:143:2;;;;;:::i;:::-;;:::i;18557:236::-;;;;;;;;;;-1:-1:-1;18557:236:2;;;;;:::i;:::-;;:::i;9888:112::-;;;;;;;;;;-1:-1:-1;9888:112:2;;;;;:::i;:::-;;:::i;1899:192:7:-;;;;;;;;;;-1:-1:-1;1899:192:7;;;;;:::i;:::-;;:::i;19068:156:2:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;;;;;;;;;19203:13:2::1;2031:1;19203:2;:13;:::i;:::-;19190:26;::::0;:12;:26:::1;:::i;:::-;19158:29;:58:::0;-1:-1:-1;19068:156:2:o;2718:41::-;;;;;;-1:-1:-1;;;;;2718:41:2;;:::o;5363:83::-;5433:5;;;;;;;;;;;;-1:-1:-1;;;5433:5:2;;;;5363:83;:::o;6294:161::-;6369:4;6386:39;6395:12;:10;:12::i;:::-;6409:7;6418:6;6386:8;:39::i;:::-;-1:-1:-1;6443:4:2;6294:161;;;;;:::o;19714:242::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19798:17:2;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;19797:18;19789:74;;;;-1:-1:-1::0;;;19789:74:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19874:17:2;::::1;19894:5;19874:17:::0;;;:5:::1;:17;::::0;;;;;:25;;-1:-1:-1;;19874:25:2::1;::::0;;19915:33;::::1;::::0;::::1;::::0;19880:10;;19915:33:::1;:::i;:::-;;;;;;;;19714:242:::0;:::o;5659:95::-;5739:7;;5659:95;:::o;6463:450::-;6561:4;6578:36;6588:6;6596:9;6607:6;6578:9;:36::i;:::-;-1:-1:-1;;;;;6654:19:2;;6627:24;6654:19;;;:11;:19;;;;;6627:24;6674:12;:10;:12::i;:::-;-1:-1:-1;;;;;6654:33:2;-1:-1:-1;;;;;6654:33:2;;;;;;;;;;;;;6627:60;;6726:6;6706:16;:26;;6698:79;;;;-1:-1:-1;;;6698:79:2;;;;;;;:::i;:::-;6813:57;6822:6;6830:12;:10;:12::i;:::-;6863:6;6844:16;:25;6813:8;:57::i;:::-;6901:4;6894:11;;;6463:450;;;;;;:::o;19964:207::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;20103:5:2::1;20080:22;20072:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;20054:15;:54:::0;;;20124:39:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;19964:207:::0;:::o;8157:248::-;8223:7;8262;;8251;:18;;8243:73;;;;-1:-1:-1;;;8243:73:2;;;;;;;:::i;:::-;8327:19;8350:10;:8;:10::i;:::-;8327:33;-1:-1:-1;8378:19:2;8327:33;8378:7;:19;:::i;:::-;8371:26;;;8157:248;;;;:::o;5545:83::-;2031:1;5545:83;:::o;8822:475::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8904:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8896:56;;;;-1:-1:-1::0;;;8896:56:2::1;;;;;;;:::i;:::-;8968:9;8963:327;8987:9;:16:::0;8983:20;::::1;8963:327;;;9045:7;-1:-1:-1::0;;;;;9029:23:2::1;:9;9039:1;9029:12;;;;;;-1:-1:-1::0;;;9029:12:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;9029:12:2::1;:23;9025:254;;;9088:9;9098:16:::0;;:20:::1;::::0;9117:1:::1;::::0;9098:20:::1;:::i;:::-;9088:31;;;;;;-1:-1:-1::0;;;9088:31:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;9073:9:::1;:12:::0;;-1:-1:-1;;;;;9088:31:2;;::::1;::::0;9083:1;;9073:12;::::1;;;-1:-1:-1::0;;;9073:12:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;9073:46:2::1;-1:-1:-1::0;;;;;9073:46:2;;::::1;;::::0;;9138:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;9177:11:::1;:20:::0;;;;:28;;-1:-1:-1;;9177:28:2::1;::::0;;9224:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;9224:15:2::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;9224:15:2;;;;;-1:-1:-1;;;;;;9224:15:2::1;::::0;;;;;9258:5:::1;;9025:254;9005:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8963:327;;;;8822:475:::0;:::o;6921:213::-;7009:4;7026:78;7035:12;:10;:12::i;:::-;7049:7;7093:10;7058:11;:25;7070:12;:10;:12::i;:::-;-1:-1:-1;;;;;7058:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;7058:25:2;;;:34;;;;;;;;;;:45;;;;:::i;:::-;7026:8;:78::i;1913:38::-;;;;;;;;;;;;;;;:::o;9305:113::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9376:27:2::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;9376:34:2::1;9406:4;9376:34;::::0;;9305:113::o;7691:456::-;7781:7;7820;;7809;:18;;7801:62;;;;-1:-1:-1;;;7801:62:2;;;;;;;:::i;:::-;7879:17;7874:266;;7913:28;7944:25;7955:7;7964:4;7944:10;:25::i;:::-;7991:9;;-1:-1:-1;7984:16:2;;-1:-1:-1;7984:16:2;7874:266;8033:28;8064:25;8075:7;8084:4;8064:10;:25::i;:::-;8111:17;;;;-1:-1:-1;8104:24:2;;-1:-1:-1;8104:24:2;2799:40;;;-1:-1:-1;;;2799:40:2;;;;;:::o;18318:231::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18413:8:2::1;:17:::0;;-1:-1:-1;;18413:17:2::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18438:29:2::1;18413:17;18438:29:::0;;::::1;;;-1:-1:-1::0;;18475:23:2::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18523:18:::1;18475:23:::0;18438:29;18523:18:::1;:::i;:::-;18506:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18506:35:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18318:231:2:o;8479:335::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8564:20:2;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8563:21;8555:61;;;;-1:-1:-1::0;;;8555:61:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8630:16:2;::::1;8649:1;8630:16:::0;;;:7:::1;:16;::::0;;;;;:20;8627:108:::1;;-1:-1:-1::0;;;;;8706:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8686:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;8667:16:2;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;8627:108:::1;-1:-1:-1::0;;;;;8745:20:2::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;8745:27:2::1;8768:4;8745:27:::0;;::::1;::::0;;;8783:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8783:23:2::1;::::0;;::::1;::::0;;8479:335::o;10008:123::-;-1:-1:-1;;;;;10096:27:2;10072:4;10096:27;;;:18;:27;;;;;;;;;10008:123::o;10137:135::-;-1:-1:-1;;;;;10231:33:2;10207:4;10231:33;;;:24;:33;;;;;;;;;10137:135::o;5762:198::-;-1:-1:-1;;;;;5852:20:2;;5828:7;5852:20;;;:11;:20;;;;;;;;5848:49;;;-1:-1:-1;;;;;;5881:16:2;;;;;;:7;:16;;;;;;5874:23;;5848:49;-1:-1:-1;;;;;5935:16:2;;;;;;:7;:16;;;;;;5915:37;;:19;:37::i;3186:143::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1650:94:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;3035:142:2:-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2512:59::-;;;;;;;;;;;;;;;:::o;18801:255::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18981:5:2::1;18959:21;18951:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;18934:14;:52:::0;19012:7:::1;::::0;19043:5:::1;::::0;19012:30:::1;::::0;19020:22;;19012:30:::1;:::i;:::-;:36;;;;:::i;:::-;18994:15;:54:::0;-1:-1:-1;;18801:255:2:o;7563:120::-;-1:-1:-1;;;;;7655:20:2;7631:4;7655:20;;;:11;:20;;;;;;;;;7563:120::o;2383:34::-;;;;:::o;999:87:7:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:7;999:87;:::o;19232:143:2:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19331:16:2::1;:36:::0;;-1:-1:-1;;;;;;19331:36:2::1;-1:-1:-1::0;;;;;19331:36:2;;;::::1;::::0;;;::::1;::::0;;19232:143::o;19383:120::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19455:40:2::1;19470:24;19488:4;19470:9;:24::i;:::-;19455:14;:40::i;5452:87::-:0;5524:7;;;;;;;;;;;;-1:-1:-1;;;5524:7:2;;;;5452:87;:::o;17847:463::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;17948:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;17940:111;;;;-1:-1:-1::0;;;17940:111:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18062:33:2;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;18062:41:2::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18114:132:::1;;-1:-1:-1::0;;;;;18144:31:2;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;:38;;-1:-1:-1;;18144:38:2::1;18178:4;18144:38;::::0;;18198:34;;::::1;;::::0;::::1;::::0;::::1;::::0;18169:5;;18198:34:::1;:::i;:::-;;;;;;;;18114:132;18261:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;18261:41:2;::::1;::::0;::::1;::::0;;;::::1;17847:463:::0;;:::o;3478:36::-;;;;;;:::o;7142:413::-;7235:4;7252:24;7279:11;:25;7291:12;:10;:12::i;:::-;-1:-1:-1;;;;;7279:25:2;;;;;;;;;;;;;;;;;-1:-1:-1;7279:25:2;;;:34;;;;;;;;;;;-1:-1:-1;7332:35:2;;;;7324:85;;;;-1:-1:-1;;;7324:85:2;;;;;;;:::i;:::-;7445:67;7454:12;:10;:12::i;:::-;7468:7;7496:15;7477:16;:34;7445:8;:67::i;:::-;-1:-1:-1;7543:4:2;;7142:413;-1:-1:-1;;;7142:413:2:o;2464:39::-;;;-1:-1:-1;;;;;2464:39:2;;:::o;5968:167::-;6046:4;6063:42;6073:12;:10;:12::i;:::-;6087:9;6098:6;6063:9;:42::i;2306:44::-;;;;:::o;9430:450::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9552:9:2::1;9548:325;9567:19:::0;;::::1;9548:325;;;9657:8;9616:49;;:24;:37;9641:8;;9650:1;9641:11;;;;;-1:-1:-1::0;;;9641:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9616:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9616:37:2;;::::1;;:49;;;;9608:127;;;;-1:-1:-1::0;;;9608:127:2::1;;;;;;;:::i;:::-;9790:8;9750:24;:37;9775:8;;9784:1;9775:11;;;;;-1:-1:-1::0;;;9775:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9750:37:2::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9750:37:2;:48;;-1:-1:-1;;9750:48:2::1;::::0;::::1;;::::0;;;::::1;::::0;;9818:43;::::1;;;9839:8:::0;;9848:1;9839:11;;::::1;;;-1:-1:-1::0;;;9839:11:2::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9818:43;;;;;;:::i;:::-;;;;;;;;9588:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9548:325;;;;9430:450:::0;;;:::o;10280:167::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;10355:21:2::1;:32:::0;;-1:-1:-1;;;;10355:32:2::1;-1:-1:-1::0;;;10355:32:2;::::1;;;;::::0;;10401:38:::1;::::0;::::1;::::0;::::1;::::0;10355:32;;10401:38:::1;:::i;2766:26::-:0;;;-1:-1:-1;;;;;2766:26:2;;:::o;2846:58::-;;;;:::o;20179:320::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;20279:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;20271:108;;;;-1:-1:-1::0;;;20271:108:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20390:33:2;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;:44;;-1:-1:-1;;20390:44:2::1;::::0;::::1;;::::0;;::::1;::::0;;;20452:39;;::::1;::::0;::::1;::::0;20390:33;;20452:39:::1;:::i;:::-;;;;;;;;20179:320:::0;;:::o;2254:44::-;;;;:::o;2203:43::-;;;;:::o;2424:31::-;;;;:::o;6143:143::-;-1:-1:-1;;;;;6251:18:2;;;6224:7;6251:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6143:143::o;18557:236::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18653:9:2::1;:18:::0;;-1:-1:-1;;18653:18:2::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18679:30:2::1;18653:18;18679:30:::0;;::::1;;;-1:-1:-1::0;;18717:24:2::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18767:18:::1;18717:24:::0;18679:30;18767:18:::1;:::i;:::-;18749:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18749:36:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18557:236:2:o;9888:112::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:27:2::1;9987:5;9957:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9957:35:2::1;::::0;;9888:112::o;1899:192:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1988:22:7;::::1;1980:73;;;;-1:-1:-1::0;;;1980:73:7::1;;;;;;;:::i;:::-;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;601:98:1:-;681:10;601:98;:::o;12910:335:2:-;-1:-1:-1;;;;;13003:19:2;;12995:68;;;;-1:-1:-1;;;12995:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13082:21:2;;13074:68;;;;-1:-1:-1;;;13074:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13153:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;13205:32;;;;;13183:6;;13205:32;:::i;:::-;;;;;;;;12910:335;;;:::o;13253:1618::-;13336:19;;:22;:56;;;;-1:-1:-1;;;;;;13362:30:2;;;;;;:26;:30;;;;;;;;13336:56;13333:118;;;13427:12;13405:19;:34;13333:118;-1:-1:-1;;;;;13471:18:2;;13463:68;;;;-1:-1:-1;;;13463:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13550:16:2;;13542:64;;;;-1:-1:-1;;;13542:64:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13626:11:2;;;;;;:5;:11;;;;;;;;13625:12;13617:57;;;;-1:-1:-1;;;13617:57:2;;;;;;;:::i;:::-;13702:1;13693:6;:10;13685:64;;;;-1:-1:-1;;;13685:64:2;;;;;;;:::i;:::-;13778:15;13788:4;13778:9;:15::i;:::-;13768:6;:25;;13760:86;;;;-1:-1:-1;;;13760:86:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;13874:24:2;;13857:12;13874:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;13902:22:2;;;;;;:18;:22;;;;;;;;13874:50;13872:53;13857:68;;13941:7;13938:612;;;-1:-1:-1;;;;;13979:32:2;;;;;;:26;:32;;;;;;;;13976:563;;;14081:12;;14061:19;;:32;;;;:::i;:::-;14048:12;:45;14045:170;;;-1:-1:-1;;;;;14131:9:2;;;;;;:5;:9;;;;;;;:16;;-1:-1:-1;;14131:16:2;14143:4;14131:16;;;;;;14171:24;;;;;;14137:2;;14171:24;:::i;:::-;;;;;;;;14045:170;14250:8;14235:23;:12;:23;;;;;;-1:-1:-1;;14235:23:2;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;-1:-1:-1;;14235:23:2;;;;;;;;;;;;;;;;;;;14293:14;;14285:22;;;14277:67;;;;-1:-1:-1;;;14277:67:2;;;;;;;:::i;:::-;13976:563;;;14426:9;14411:24;:12;:24;;;;;;-1:-1:-1;;14411:24:2;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;-1:-1:-1;;14411:24:2;;;;;;;;;;;;;;;;;;;14470:15;;14462:23;;;14454:69;;;;-1:-1:-1;;;14454:69:2;;;;;;;:::i;:::-;14594:29;;14566:24;14584:4;14566:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14629:16:2;;;;14628:17;14566:79;:116;;;;-1:-1:-1;;;;;;14650:32:2;;;;;;:26;:32;;;;;;;;14649:33;14566:116;:141;;;;-1:-1:-1;14686:21:2;;-1:-1:-1;;;14686:21:2;;;;14566:141;14562:248;;;14753:45;14768:29;;14753:14;:45::i;:::-;14822:41;14837:4;14843:2;14847:6;14855:7;14822:14;:41::i;12210:158::-;12251:7;12272:15;12289;12308:19;:17;:19::i;:::-;12271:56;;-1:-1:-1;12271:56:2;-1:-1:-1;12345:15:2;12271:56;;12345:15;:::i;:::-;12338:22;;;;12210:158;:::o;10943:345::-;11016:36;;:::i;:::-;11077:29;11089:7;11098;11077:11;:29::i;:::-;11065:41;;11201:52;11213:9;11224:7;11233;11242:10;:8;:10::i;:::-;11201:11;:52::i;:::-;11180:17;;;11117:136;11164:14;;;11117:136;11137:25;;;11117:136;;;10943:345;;;;:::o;2099:173:7:-;2155:16;2174:6;;-1:-1:-1;;;;;2191:17:7;;;-1:-1:-1;;;;;;2191:17:7;;;;;;2224:40;;2174:6;;;;;;;2224:40;;2155:16;2224:40;2099:173;;:::o;15832:876:2:-;4272:16;:23;;-1:-1:-1;;4272:23:2;4291:4;4272:23;;;15941:12:::1;:19:::0;4272:16;;15941:21:::1;::::0;:19;;::::1;4272:23:::0;15941:19:::1;15961:1;15941:21;:::i;:::-;16029:12;:19:::0;15919:43:::1;::::0;;::::1;::::0;-1:-1:-1;15973:32:2::1;::::0;15919:43;;16008:40:::1;::::0;16029:19;;;::::1;;16008:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;15973:87:::0;-1:-1:-1;16071:14:2::1;16088:45;15973:87:::0;16088:20;:45:::1;:::i;:::-;16071:62:::0;-1:-1:-1;16171:21:2::1;16237:24;16071:62:::0;16237:16:::1;:24::i;:::-;16274:20;16297:37;16320:14:::0;16297:21:::1;:37;:::i;:::-;16425:12;:19:::0;16274:60;;-1:-1:-1;16345:29:2::1;::::0;16412:32:::1;::::0;16425:19;;::::1;;;16412:11:::0;:32:::1;:::i;:::-;16390:12;:19:::0;16377:32:::1;::::0;16390:19;;::::1;;;16377:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;16345:100;;16504:61;16517:24;16543:21;16504:12;:61::i;:::-;16586:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;16586:16:2::1;16613:21;16586:26;:49::i;:::-;-1:-1:-1::0;;4318:16:2;:24;;-1:-1:-1;;4318:24:2;;;-1:-1:-1;;;;;15832:876:2:o;14952:872::-;15071:28;15102;15113:7;15122;15102:10;:28::i;:::-;-1:-1:-1;;;;;15147:19:2;;;;;;:11;:19;;;;;;15071:59;;-1:-1:-1;15147:19:2;;15143:82;;;-1:-1:-1;;;;;15187:15:2;;;;;;:7;:15;;;;;:26;;15206:7;;15187:15;:26;;15206:7;;15187:26;:::i;:::-;;;;-1:-1:-1;;15143:82:2;-1:-1:-1;;;;;15240:22:2;;;;;;:11;:22;;;;;;;;15236:98;;;15305:17;;;;-1:-1:-1;;;;;15283:18:2;;;;;;:7;:18;;;;;:39;;:18;;;:39;;15305:17;;15283:39;:::i;:::-;;;;-1:-1:-1;;15236:98:2;15365:9;;-1:-1:-1;;;;;15346:15:2;;15365:9;15346:15;;;:7;:15;;;;;:28;;:15;;15365:9;15346:28;;15365:9;;15346:28;:::i;:::-;;;;-1:-1:-1;;15407:17:2;;;;;-1:-1:-1;;;;;15385:18:2;;;;;;:7;:18;;;;;;:39;;15407:17;;15385:18;;:39;;15407:17;;15385:39;:::i;:::-;;;;-1:-1:-1;;15435:172:2;;;;15467:27;15479:1;:6;;;15487:1;:6;;;15467:11;:27::i;:::-;15505:32;15517:1;:9;;;15527:1;:9;;;15505:11;:32::i;:::-;15578:4;-1:-1:-1;;;;;15553:42:2;15562:6;-1:-1:-1;;;;;15553:42:2;;15585:1;:9;;;15553:42;;;;;;:::i;:::-;;;;;;;;15435:172;-1:-1:-1;;;;;15625:35:2;;;;;;:24;:35;;;;;;;;;:77;;;15687:15;;15664:20;15674:9;15664;:20::i;:::-;:38;;15625:77;15617:137;;;;-1:-1:-1;;;15617:137:2;;;;;;;:::i;:::-;15787:9;-1:-1:-1;;;;;15770:46:2;15779:6;-1:-1:-1;;;;;15770:46:2;;15798:1;:17;;;15770:46;;;;;;:::i;:::-;;;;;;;;14952:872;;;;;:::o;12376:524::-;12473:7;;12509;;12426;;;;;12527:263;12551:9;:16;12547:20;;12527:263;;;12617:7;12593;:21;12601:9;12611:1;12601:12;;;;;;-1:-1:-1;;;12601:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12601:12:2;12593:21;;;;;;;;;;;;;:31;;:66;;;12652:7;12628;:21;12636:9;12646:1;12636:12;;;;;;-1:-1:-1;;;12636:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12636:12:2;12628:21;;;;;;;;;;;;;:31;12593:66;12589:97;;;12669:7;;12678;;12661:25;;;;;;;;;12589:97;12711:7;:21;12719:9;12729:1;12719:12;;;;;;-1:-1:-1;;;12719:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12719:12:2;12711:21;;;;;;;;;;;;;12701:31;;;;:::i;:::-;;;12757:7;:21;12765:9;12775:1;12765:12;;;;;;-1:-1:-1;;;12765:12:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12765:12:2;12757:21;;;;;;;;;;;;;12747:31;;;;:::i;:::-;;-1:-1:-1;12569:3:2;;;;:::i;:::-;;;;12527:263;;;;12822:7;;12814;;:15;;;;:::i;:::-;12804:7;:25;12800:56;;;12839:7;;12848;;12831:25;;;;;;;;12800:56;12875:7;;-1:-1:-1;12884:7:2;-1:-1:-1;12376:524:2;;;:::o;11296:386::-;11370:28;;:::i;:::-;11417:7;11413:86;;11439:17;;;:27;;;11479:8;;11413:86;11526:12;:16;11543:3;;11518:24;;11526:16;;11518:7;:24;:::i;:::-;:28;;;;:::i;:::-;11509:6;;;:37;11577:12;:19;11597:3;;11569:27;;11577:19;;;;;11569:7;:27;:::i;:::-;:31;;;;:::i;:::-;11557:9;;;:43;;;11639:6;;;;11631:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;11611:17;;;:44;11296:386;;;;:::o;11690:512::-;11815:15;;;;11909:19;11917:11;11909:7;:19;:::i;:::-;11899:29;;11945:7;11941:66;;-1:-1:-1;11974:7:2;;-1:-1:-1;11991:1:2;;-1:-1:-1;11991:1:2;11967:28;;11941:66;12033:11;12026:1;:6;;;:18;;;;:::i;:::-;12019:25;;12075:11;12065:1;:9;;;:21;;;;:::i;:::-;12055:31;-1:-1:-1;12055:31:2;12116:12;12124:4;12116:7;:12;:::i;:::-;:20;;;;:::i;:::-;12097:39;;11690:512;;;;;;;;;;:::o;16716:688::-;16872:16;;;16886:1;16872:16;;;;;;;;16848:21;;16872:16;;;;;;;;;;-1:-1:-1;16872:16:2;16848:40;;16917:4;16899;16904:1;16899:7;;;;;;-1:-1:-1;;;16899:7:2;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;16899:23:2;;;-1:-1:-1;;;;;16899:23:2;;;;;16943:15;;;;;;;;;-1:-1:-1;;;;;16943:15:2;-1:-1:-1;;;;;16943:20:2;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16933:4;16938:1;16933:7;;;;;;-1:-1:-1;;;16933:7:2;;;;;;;;;-1:-1:-1;;;;;16933:32:2;;;:7;;;;;;;;;:32;17014:15;;17034:11;;16981:50;;16999:4;;17014:15;;;;;16981:9;:50::i;:::-;:64;16978:156;;;17092:15;;17060:62;;17077:4;;17092:15;;;-1:-1:-1;;;;;17092:15:2;-1:-1:-1;;17060:8:2;:62::i;:::-;17172:15;;:224;;-1:-1:-1;;;17172:224:2;;:15;;;;-1:-1:-1;;;;;17172:15:2;;:66;;:224;;17253:11;;17279:1;;17323:4;;17350;;17370:15;;17172:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16716:688;;:::o;17412:427::-;17525:15;;;;;-1:-1:-1;;;;;17525:15:2;:31;17564:9;17597:4;17617:11;17643:1;;17729:7;:5;:7::i;:::-;17751:15;17525:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17793:38;17808:11;17821:9;17793:38;;;;;;;:::i;:::-;;;;;;;;17412:427;;:::o;2065:317:0:-;2180:6;2155:21;:31;;2147:73;;;;-1:-1:-1;;;2147:73:0;;;;;;;:::i;:::-;2234:12;2252:9;-1:-1:-1;;;;;2252:14:0;2274:6;2252:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2233:52;;;2304:7;2296:78;;;;-1:-1:-1;;;2296:78:0;;;;;;;:::i;:::-;2065:317;;;:::o;10553:125:2:-;10632:4;10621:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;10647:11:2;:23;;10666:4;;10647:11;:15;;:23;;10666:4;;10647:23;:::i;:::-;;;;-1:-1:-1;;;;10553:125:2:o;10686:249::-;10775:4;10759:22;;;;:7;:22;;;;;:32;;10784:7;;10759:22;:32;;10784:7;;10759:32;:::i;:::-;;;;-1:-1:-1;;10825:4:2;10805:26;;;;:11;:26;;;;;;;;10802:77;;;10862:4;10846:22;;;;:7;:22;;;;;:33;;10872:7;;10846:22;:33;;10872:7;;10846:33;:::i;:::-;;;;-1:-1:-1;;10802:77:2;10910:7;10890:11;:18;;;:27;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:162:8:-;81:20;;137:13;;130:21;120:32;;110:2;;166:1;163;156:12;181:158;249:20;;309:4;298:16;;288:27;;278:2;;329:1;326;319:12;344:259;;456:2;444:9;435:7;431:23;427:32;424:2;;;477:6;469;462:22;424:2;521:9;508:23;540:33;567:5;540:33;:::i;608:263::-;;731:2;719:9;710:7;706:23;702:32;699:2;;;752:6;744;737:22;699:2;789:9;783:16;808:33;835:5;808:33;:::i;1148:402::-;;;1277:2;1265:9;1256:7;1252:23;1248:32;1245:2;;;1298:6;1290;1283:22;1245:2;1342:9;1329:23;1361:33;1388:5;1361:33;:::i;:::-;1413:5;-1:-1:-1;1470:2:8;1455:18;;1442:32;1483:35;1442:32;1483:35;:::i;:::-;1537:7;1527:17;;;1235:315;;;;;:::o;1555:470::-;;;;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1722:6;1714;1707:22;1669:2;1766:9;1753:23;1785:33;1812:5;1785:33;:::i;:::-;1837:5;-1:-1:-1;1894:2:8;1879:18;;1866:32;1907:35;1866:32;1907:35;:::i;:::-;1659:366;;1961:7;;-1:-1:-1;;;2015:2:8;2000:18;;;;1987:32;;1659:366::o;2030:329::-;;;2156:2;2144:9;2135:7;2131:23;2127:32;2124:2;;;2177:6;2169;2162:22;2124:2;2221:9;2208:23;2240:33;2267:5;2240:33;:::i;:::-;2292:5;-1:-1:-1;2316:37:8;2349:2;2334:18;;2316:37;:::i;:::-;2306:47;;2114:245;;;;;:::o;2364:327::-;;;2493:2;2481:9;2472:7;2468:23;2464:32;2461:2;;;2514:6;2506;2499:22;2461:2;2558:9;2545:23;2577:33;2604:5;2577:33;:::i;:::-;2629:5;2681:2;2666:18;;;;2653:32;;-1:-1:-1;;;2451:240:8:o;2696:744::-;;;;2857:2;2845:9;2836:7;2832:23;2828:32;2825:2;;;2878:6;2870;2863:22;2825:2;2923:9;2910:23;2952:18;2993:2;2985:6;2982:14;2979:2;;;3014:6;3006;2999:22;2979:2;3057:6;3046:9;3042:22;3032:32;;3102:7;3095:4;3091:2;3087:13;3083:27;3073:2;;3129:6;3121;3114:22;3073:2;3174;3161:16;3200:2;3192:6;3189:14;3186:2;;;3221:6;3213;3206:22;3186:2;3284:7;3277:4;3269;3261:6;3257:17;3253:2;3249:26;3245:37;3242:50;3239:2;;;3310:6;3302;3295:22;3239:2;3346:4;3338:13;;;;-1:-1:-1;3370:6:8;-1:-1:-1;3395:39:8;;3413:20;;;-1:-1:-1;3395:39:8;:::i;:::-;3385:49;;2815:625;;;;;:::o;3445:192::-;;3554:2;3542:9;3533:7;3529:23;3525:32;3522:2;;;3575:6;3567;3560:22;3522:2;3603:28;3621:9;3603:28;:::i;3642:190::-;;3754:2;3742:9;3733:7;3729:23;3725:32;3722:2;;;3775:6;3767;3760:22;3722:2;-1:-1:-1;3803:23:8;;3712:120;-1:-1:-1;3712:120:8:o;3837:260::-;;;3963:2;3951:9;3942:7;3938:23;3934:32;3931:2;;;3984:6;3976;3969:22;3931:2;4025:9;4012:23;4002:33;;4054:37;4087:2;4076:9;4072:18;4054:37;:::i;4102:258::-;;;4231:2;4219:9;4210:7;4206:23;4202:32;4199:2;;;4252:6;4244;4237:22;4199:2;-1:-1:-1;;4280:23:8;;;4350:2;4335:18;;;4322:32;;-1:-1:-1;4189:171:8:o;4365:316::-;;;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4577:9;4571:16;4561:26;;4627:2;4616:9;4612:18;4606:25;4596:35;;4671:2;4660:9;4656:18;4650:25;4640:35;;4480:201;;;;;:::o;4686:338::-;;;;4826:2;4814:9;4805:7;4801:23;4797:32;4794:2;;;4847:6;4839;4832:22;4794:2;4875:29;4894:9;4875:29;:::i;:::-;4865:39;;4923:38;4957:2;4946:9;4942:18;4923:38;:::i;:::-;4913:48;;4980:38;5014:2;5003:9;4999:18;4980:38;:::i;5029:205::-;5229:3;5220:14::o;5239:203::-;-1:-1:-1;;;;;5403:32:8;;;;5385:51;;5373:2;5358:18;;5340:102::o;5671:607::-;-1:-1:-1;;;;;6030:15:8;;;6012:34;;6077:2;6062:18;;6055:34;;;;6120:2;6105:18;;6098:34;;;;6163:2;6148:18;;6141:34;;;;6212:15;;;6206:3;6191:19;;6184:44;5992:3;6244:19;;6237:35;;;;5961:3;5946:19;;5928:350::o;6283:187::-;6448:14;;6441:22;6423:41;;6411:2;6396:18;;6378:92::o;6710:603::-;;6851:2;6880;6869:9;6862:21;6912:6;6906:13;6955:6;6950:2;6939:9;6935:18;6928:34;6980:4;6993:140;7007:6;7004:1;7001:13;6993:140;;;7102:14;;;7098:23;;7092:30;7068:17;;;7087:2;7064:26;7057:66;7022:10;;6993:140;;;7151:6;7148:1;7145:13;7142:2;;;7221:4;7216:2;7207:6;7196:9;7192:22;7188:31;7181:45;7142:2;-1:-1:-1;7297:2:8;7276:15;-1:-1:-1;;7272:29:8;7257:45;;;;7304:2;7253:54;;6831:482;-1:-1:-1;;;6831:482:8:o;7318:399::-;7520:2;7502:21;;;7559:2;7539:18;;;7532:30;7598:34;7593:2;7578:18;;7571:62;-1:-1:-1;;;7664:2:8;7649:18;;7642:33;7707:3;7692:19;;7492:225::o;7722:469::-;7924:2;7906:21;;;7963:2;7943:18;;;7936:30;8002:34;7997:2;7982:18;;7975:62;8073:34;8068:2;8053:18;;8046:62;-1:-1:-1;;;8139:3:8;8124:19;;8117:32;8181:3;8166:19;;7896:295::o;8196:413::-;8398:2;8380:21;;;8437:2;8417:18;;;8410:30;8476:34;8471:2;8456:18;;8449:62;-1:-1:-1;;;8542:2:8;8527:18;;8520:47;8599:3;8584:19;;8370:239::o;8614:406::-;8816:2;8798:21;;;8855:2;8835:18;;;8828:30;8894:34;8889:2;8874:18;;8867:62;-1:-1:-1;;;8960:2:8;8945:18;;8938:40;9010:3;8995:19;;8788:232::o;9025:402::-;9227:2;9209:21;;;9266:2;9246:18;;;9239:30;9305:34;9300:2;9285:18;;9278:62;-1:-1:-1;;;9371:2:8;9356:18;;9349:36;9417:3;9402:19;;9199:228::o;9432:398::-;9634:2;9616:21;;;9673:2;9653:18;;;9646:30;9712:34;9707:2;9692:18;;9685:62;-1:-1:-1;;;9778:2:8;9763:18;;9756:32;9820:3;9805:19;;9606:224::o;9835:420::-;10037:2;10019:21;;;10076:2;10056:18;;;10049:30;10115:34;10110:2;10095:18;;10088:62;10186:26;10181:2;10166:18;;10159:54;10245:3;10230:19;;10009:246::o;10260:397::-;10462:2;10444:21;;;10501:2;10481:18;;;10474:30;10540:34;10535:2;10520:18;;10513:62;-1:-1:-1;;;10606:2:8;10591:18;;10584:31;10647:3;10632:19;;10434:223::o;10662:356::-;10864:2;10846:21;;;10883:18;;;10876:30;10942:34;10937:2;10922:18;;10915:62;11009:2;10994:18;;10836:182::o;11023:351::-;11225:2;11207:21;;;11264:2;11244:18;;;11237:30;11303:29;11298:2;11283:18;;11276:57;11365:2;11350:18;;11197:177::o;11379:414::-;11581:2;11563:21;;;11620:2;11600:18;;;11593:30;11659:34;11654:2;11639:18;;11632:62;-1:-1:-1;;;11725:2:8;11710:18;;11703:48;11783:3;11768:19;;11553:240::o;11798:422::-;12000:2;11982:21;;;12039:2;12019:18;;;12012:30;12078:34;12073:2;12058:18;;12051:62;12149:28;12144:2;12129:18;;12122:56;12210:3;12195:19;;11972:248::o;12225:347::-;12427:2;12409:21;;;12466:2;12446:18;;;12439:30;12505:25;12500:2;12485:18;;12478:53;12563:2;12548:18;;12399:173::o;12577:353::-;12779:2;12761:21;;;12818:2;12798:18;;;12791:30;12857:31;12852:2;12837:18;;12830:59;12921:2;12906:18;;12751:179::o;12935:356::-;13137:2;13119:21;;;13156:18;;;13149:30;13215:34;13210:2;13195:18;;13188:62;13282:2;13267:18;;13109:182::o;13296:407::-;13498:2;13480:21;;;13537:2;13517:18;;;13510:30;13576:34;13571:2;13556:18;;13549:62;-1:-1:-1;;;13642:2:8;13627:18;;13620:41;13693:3;13678:19;;13470:233::o;13708:355::-;13910:2;13892:21;;;13949:2;13929:18;;;13922:30;13988:33;13983:2;13968:18;;13961:61;14054:2;14039:18;;13882:181::o;14068:404::-;14270:2;14252:21;;;14309:2;14289:18;;;14282:30;14348:34;14343:2;14328:18;;14321:62;-1:-1:-1;;;14414:2:8;14399:18;;14392:38;14462:3;14447:19;;14242:230::o;14477:356::-;14679:2;14661:21;;;14698:18;;;14691:30;14757:34;14752:2;14737:18;;14730:62;14824:2;14809:18;;14651:182::o;14838:405::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:8;15169:18;;15162:39;15233:3;15218:19;;15012:231::o;15248:411::-;15450:2;15432:21;;;15489:2;15469:18;;;15462:30;15528:34;15523:2;15508:18;;15501:62;-1:-1:-1;;;15594:2:8;15579:18;;15572:45;15649:3;15634:19;;15422:237::o;15664:401::-;15866:2;15848:21;;;15905:2;15885:18;;;15878:30;15944:34;15939:2;15924:18;;15917:62;-1:-1:-1;;;16010:2:8;15995:18;;15988:35;16055:3;16040:19;;15838:227::o;16070:400::-;16272:2;16254:21;;;16311:2;16291:18;;;16284:30;16350:34;16345:2;16330:18;;16323:62;-1:-1:-1;;;16416:2:8;16401:18;;16394:34;16460:3;16445:19;;16244:226::o;16475:401::-;16677:2;16659:21;;;16716:2;16696:18;;;16689:30;16755:34;16750:2;16735:18;;16728:62;-1:-1:-1;;;16821:2:8;16806:18;;16799:35;16866:3;16851:19;;16649:227::o;16881:177::-;17027:25;;;17015:2;17000:18;;16982:76::o;17063:983::-;;17373:3;17362:9;17358:19;17404:6;17393:9;17386:25;17430:2;17468:6;17463:2;17452:9;17448:18;17441:34;17511:3;17506:2;17495:9;17491:18;17484:31;17535:6;17570;17564:13;17601:6;17593;17586:22;17639:3;17628:9;17624:19;17617:26;;17678:2;17670:6;17666:15;17652:29;;17699:4;17712:195;17726:6;17723:1;17720:13;17712:195;;;17791:13;;-1:-1:-1;;;;;17787:39:8;17775:52;;17882:15;;;;17847:12;;;;17823:1;17741:9;17712:195;;;-1:-1:-1;;;;;;;17963:32:8;;;;17958:2;17943:18;;17936:60;-1:-1:-1;;;18027:3:8;18012:19;18005:35;17924:3;17334:712;-1:-1:-1;;;17334:712:8:o;18051:248::-;18225:25;;;18281:2;18266:18;;18259:34;18213:2;18198:18;;18180:119::o;18304:184::-;18476:4;18464:17;;;;18446:36;;18434:2;18419:18;;18401:87::o;18493:419::-;18738:4;18726:17;;;18708:36;;18780:17;;;18775:2;18760:18;;18753:45;18834:17;;;18829:2;18814:18;;18807:45;18888:17;;;18883:2;18868:18;;18861:45;18695:3;18680:19;;18662:250::o;18917:128::-;;18988:1;18984:6;18981:1;18978:13;18975:2;;;18994:18;;:::i;:::-;-1:-1:-1;19030:9:8;;18965:80::o;19050:204::-;;19124:4;19121:1;19117:12;19156:4;19153:1;19149:12;19191:3;19185:4;19181:14;19176:3;19173:23;19170:2;;;19199:18;;:::i;:::-;19235:13;;19096:158;-1:-1:-1;;;19096:158:8:o;19259:217::-;;19325:1;19315:2;;-1:-1:-1;;;19350:31:8;;19404:4;19401:1;19394:15;19432:4;19357:1;19422:15;19315:2;-1:-1:-1;19461:9:8;;19305:171::o;19481:453::-;19577:6;19600:5;19614:314;19663:1;19700:2;19690:8;19687:16;19677:2;;19707:5;;;19677:2;19748:4;19743:3;19739:14;19733:4;19730:24;19727:2;;;19757:18;;:::i;:::-;19807:2;19797:8;19793:17;19790:2;;;19822:16;;;;19790:2;19901:17;;;;;19861:15;;19614:314;;;19558:376;;;;;;;:::o;19939:148::-;;20026:55;-1:-1:-1;;20067:4:8;20053:19;;20047:4;20092:922;20176:8;20166:2;;-1:-1:-1;20217:1:8;20231:5;;20166:2;20265:4;20255:2;;-1:-1:-1;20302:1:8;20316:5;;20255:2;20347:4;20365:1;20360:59;;;;20433:1;20428:183;;;;20340:271;;20360:59;20390:1;20381:10;;20404:5;;;20428:183;20465:3;20455:8;20452:17;20449:2;;;20472:18;;:::i;:::-;20528:1;20518:8;20514:16;20505:25;;20556:3;20549:5;20546:14;20543:2;;;20563:18;;:::i;:::-;20596:5;;;20340:271;;20695:2;20685:8;20682:16;20676:3;20670:4;20667:13;20663:36;20657:2;20647:8;20644:16;20639:2;20633:4;20630:12;20626:35;20623:77;20620:2;;;-1:-1:-1;20732:19:8;;;20767:14;;;20764:2;;;20784:18;;:::i;:::-;20817:5;;20620:2;20864:42;20902:3;20892:8;20886:4;20883:1;20864:42;:::i;:::-;20939:6;20934:3;20930:16;20921:7;20918:29;20915:2;;;20950:18;;:::i;:::-;20988:20;;20156:858;-1:-1:-1;;;;20156:858:8:o;21019:168::-;;21125:1;21121;21117:6;21113:14;21110:1;21107:21;21102:1;21095:9;21088:17;21084:45;21081:2;;;21132:18;;:::i;:::-;-1:-1:-1;21172:9:8;;21071:116::o;21192:238::-;;21270:4;21267:1;21263:12;21302:4;21299:1;21295:12;21362:3;21356:4;21352:14;21347:3;21344:23;21337:3;21330:11;21323:19;21319:49;21316:2;;;21371:18;;:::i;:::-;21411:13;;21242:188;-1:-1:-1;;;21242:188:8:o;21435:125::-;;21503:1;21500;21497:8;21494:2;;;21508:18;;:::i;:::-;-1:-1:-1;21545:9:8;;21484:76::o;21565:135::-;;-1:-1:-1;;21625:17:8;;21622:2;;;21645:18;;:::i;:::-;-1:-1:-1;21692:1:8;21681:13;;21612:88::o;21705:127::-;21766:10;21761:3;21757:20;21754:1;21747:31;21797:4;21794:1;21787:15;21821:4;21818:1;21811:15;21837:133;-1:-1:-1;;;;;21914:31:8;;21904:42;;21894:2;;21960:1;21957;21950:12
Swarm Source
ipfs://7db737d2bf1d1e50c2068343f3d6f0cdbe8fbdc36002f5375939c9ca607347b5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.