Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 CI
Holders
53
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
264,602.862402618 CIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TokenCap
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-03 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) 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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/ProofFactory.sol pragma solidity ^0.8.0; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); } interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } interface IWETH is IERC20 { function deposit() external payable; } contract WETHPrinter is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IUniswapV2Router02 router; IWETH public RewardToken; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalExcluded; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 30 minutes; uint256 public minDistribution = 1 * (10 ** 17); uint256 currentIndex; bool initialized; event TransferForeignToken(address token, uint256 amount); modifier onlyToken() { require(msg.sender == _token); _; } constructor (address _router, address _reflectionToken, address token) { router = IUniswapV2Router02(_router); RewardToken = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); _token = token; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken { minPeriod = newMinPeriod; minDistribution = newMinDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function transferForeignToken(address _token) external returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(address(0x137bBfB96e984863c065D82c625408cA865D3e44), _contractBalance); emit TransferForeignToken(_token, _contractBalance); } function deposit() external payable override onlyToken { uint256 balanceBefore = RewardToken.balanceOf(address(this)); RewardToken.deposit{value: msg.value}(); uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 iterations = 0; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); RewardToken.transfer(shareholder, amount); } } function totalClaimed (address shareholder) public view returns (uint256) { return shares[shareholder].totalRealised; } function claimDividend() external { require(shouldDistribute(msg.sender), "Too soon. Need to wait!"); distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } interface ITeamFinanceLocker { function lockTokens(address _tokenAddress, address _withdrawalAddress, uint256 _amount, uint256 _unlockTime) external payable returns (uint256 _id); } interface ITokenCap { function launch() external; } library Fees { struct allFees { uint256 reflectionFee; uint256 reflectionFeeOnSell; uint256 operationsFee; uint256 operationsFeeOnSell; } } contract TokenCap is Context, IERC20, IERC20Metadata { using SafeMath for uint256; IDividendDistributor public wETHPrinter; uint256 distributorGas = 500000; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; mapping (address => bool) public isFeeExempt; mapping (address => bool) public isTxnLimitExempt; mapping (address => bool) public isDividendExempt; mapping(address => bool) public bots; mapping(address => bool) public boughtEarly; // mapping to track addresses that buy within the first 2 blocks pay a 3x tax for 24 hours to sell uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool private gasLimitActive = true; uint256 private gasPriceLimit = 500 * 1 gwei; // do not allow over 500 gwei for launch uint256 public launchedAt; uint256 public reflectionFee; uint256 public operationsFee; uint256 public reflectionFeeOnSell; uint256 public operationsFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address private factory; address public tokenOwner; address payable public comFund; bool public transferDelayEnabled = true; bool public limitsInEffect = true; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = false; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; event BoughtEarly(address indexed sniper); event RemovedSniper(address indexed notsnipersupposedly); constructor(string memory tokenName, string memory tokenSymbol, uint256 initialSupply, address owner, address reflectionToken ,address routerAddress, Fees.allFees memory fees) { _name = tokenName; _symbol = tokenSymbol; _totalSupply += initialSupply; _balances[msg.sender] += initialSupply; _maxTxAmount = initialSupply * 5 / 1000; _walletMax = initialSupply * 1 / 100; swapThreshold = initialSupply * 5 / 4000; router = IUniswapV2Router02(routerAddress); pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this)); _allowances[address(this)][address(router)] = type(uint256).max; wETHPrinter = new WETHPrinter(routerAddress, reflectionToken, address(this)); factory = msg.sender; isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isTxnLimitExempt[owner] = true; isTxnLimitExempt[pair] = true; isTxnLimitExempt[factory] = true; isTxnLimitExempt[DEAD] = true; isTxnLimitExempt[ZERO] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; reflectionFee = fees.reflectionFee; operationsFee = fees.operationsFee; reflectionFeeOnSell = fees.reflectionFeeOnSell; operationsFeeOnSell = fees.operationsFeeOnSell; totalFee = operationsFee.add(reflectionFee); totalFeeIfSelling = operationsFeeOnSell.add(reflectionFeeOnSell); require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 15, "Too high fee"); tokenOwner = owner; comFund = payable(0x137bBfB96e984863c065D82c625408cA865D3e44); } modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFactory() { require(factory == _msgSender(), "Ownable: caller is not the factory"); _; } /** * @notice Checks if the msg.sender is either the cake owner address or the operator address. */ modifier onlyOperator() { require(msg.sender == tokenOwner || msg.sender == comFund, "Not operator"); _; } function wagmi() external onlyFactory { require(launchedAt == 0, "already launched"); launchedAt = block.number; earlyBuyPenaltyEnd = block.timestamp + 9600 hours; tradingStatus = true; isFeeExempt[address(router)] = true; isTxnLimitExempt[address(router)] = true; isTxnLimitExempt[tokenOwner] = true; } //Owner functions function changeFees(uint256 initialReflectionFee, uint256 initialReflectionFeeOnSell, uint256 initialOperationsFee, uint256 initialOperationsFeeOnSell) external onlyOwner { reflectionFee = initialReflectionFee; operationsFee = initialOperationsFee; reflectionFeeOnSell = initialReflectionFeeOnSell; operationsFeeOnSell = initialOperationsFeeOnSell; totalFee = operationsFee.add(reflectionFee); totalFeeIfSelling = operationsFeeOnSell.add(reflectionFeeOnSell); require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 15, "Too high fee"); } function setTxnLimit(uint256 newLimit) external onlyOwner { _maxTxAmount = newLimit; } function setWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } function setFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setTxnLimitExempt(address holder, bool exempt) external onlyOwner { isTxnLimitExempt[holder] = exempt; } function changeDistributorGas(uint256 _distributorGas) external onlyOwner { distributorGas = _distributorGas; } function setOperationsAddress(address payable newComFund) external onlyOwner { comFund = payable(newComFund); } function setOwnerAddress(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function removeBoughtEarly(address account) external onlyOwner { boughtEarly[account] = false; emit RemovedSniper(account); } // remove limits after token is stable - 30-60 minutes function removeLimits() external returns (bool){ limitsInEffect = false; gasLimitActive = false; transferDelayEnabled = false; return true; } // disable Transfer delay function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function botsRekt(address[] memory bots_) public onlyOperator { for (uint256 i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function unbotsRekt(address notbot) public onlyOperator { bots[notbot] = false; } function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner { wETHPrinter.setDistributionCriteria(newMinPeriod, newMinDistribution); } // withdraw stuck ETH in token contract. function withdrawStuckETH() external { bool success; (success,) = address(0x137bBfB96e984863c065D82c625408cA865D3e44).call{value: address(this).balance}(""); } function getCirculatingSupply() external view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) { if(!tradingStatus){ require(isTxnLimitExempt[sender] && isTxnLimitExempt[recipient], "Trading is not active yet."); } require(!bots[sender] && !bots[recipient], "TOKEN: Your account is blacklisted!"); if(block.number <= launchedAt && sender == pair && recipient != address(router) && recipient != address(this)){ bots[recipient] = true; } if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); } if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(finalAmount); // Dividend tracker if(!isDividendExempt[sender]) { try wETHPrinter.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]) { try wETHPrinter.setShare(recipient, _balances[recipient]) {} catch {} } try wETHPrinter.process(distributorGas) {} catch {} if(limitsInEffect){ if ( sender != tokenOwner && recipient != tokenOwner && recipient != address(0) && recipient != address(0xdead) && !inSwapAndLiquify ){ if(sender != tokenOwner && recipient != pair && block.number == launchedAt){ boughtEarly[recipient] = true; emit BoughtEarly(recipient); } // only use to prevent sniper buys in the first blocks. if (gasLimitActive && sender == pair) { require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if ( recipient != address(tokenOwner) && recipient != address(router) && recipient != address(pair)){ require(_holderLastTransferTimestamp[recipient] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[recipient] = block.number; } } if(!isTxnLimitExempt[recipient]) { require(_balances[recipient].add(amount) <= _walletMax, "wallet"); } require(amount <= _maxTxAmount || isTxnLimitExempt[sender], "tx"); } } // higher tax if bought in the same block as trading active for 72 hours (sniper protect) if(boughtEarly[sender] && earlyBuyPenaltyEnd > block.timestamp){ require(!boughtEarly[sender] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over. DM a Mod."); totalFee = totalFee * 5; totalFeeIfSelling = totalFeeIfSelling * 5; } emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = amount.mul(feeApplicable).div(100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify = tokensToLiquify.mul(0).div(totalFee).div(2); uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; uint256 devBalance = amountETH.mul(operationsFee).div(totalFee); uint256 amountEthLiquidity = amountETH.mul(0).div(totalFee).div(2); uint256 amountEthReflection = amountETH.sub(devBalance).sub(amountEthLiquidity); if(amountETH > 0){ comFund.transfer(devBalance); } try wETHPrinter.deposit{value: amountEthReflection}() {} catch {} if(amountToLiquify > 0){ router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"components":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"reflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"operationsFee","type":"uint256"},{"internalType":"uint256","name":"operationsFeeOnSell","type":"uint256"}],"internalType":"struct Fees.allFees","name":"fees","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"botsRekt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"changeDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialReflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialOperationsFee","type":"uint256"},{"internalType":"uint256","name":"initialOperationsFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"comFund","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxnLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newComFund","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setTxnLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unbotsRekt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wETHPrinter","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wagmi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526207a1206001908155600e805460ff1916909117905564746a528800600f55601b805464ffff00ffff60a01b1916630100010160a01b1790553480156200004a57600080fd5b50604051620042a9380380620042a98339810160408190526200006d91620007c0565b8651620000829060059060208a0190620005e6565b50855162000098906006906020890190620005e6565b508460046000828254620000ad9190620008ce565b90915550503360009081526002602052604081208054879290620000d3908490620008ce565b909155506103e89050620000e9866005620008e9565b620000f591906200090b565b601c55606462000107866001620008e9565b6200011391906200090b565b601d55610fa062000126866005620008e9565b6200013291906200090b565b601e55601780546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200018f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b591906200092e565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d91906200092e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b091906200092e565b601880546001600160a01b0319166001600160a01b0392831617905530600081815260036020908152604080832060175490951683529390528290206000199055905183918591620003029062000675565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156200033f573d6000803e3d6000fd5b50600080546001600160a01b039283166001600160a01b0319918216178255601980549091163317815530808352600760209081526040808520805460ff19908116600190811790925585548816875282872080548216831790558b881687526008845282872080548216831790556018805489168852838820805483168417905595548816875282872080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548216831790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c780548216831790559454909616855260098252808520805485168717905591845281842080548416861790557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548416861790559280527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054909216909317905582516011819055918301516012819055838201516013556060840151601455620004d492909162001382620005d1821b17901c565b601581905550620004f8601354601454620005d160201b620013821790919060201c565b601655601554600c1015620005435760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b60448201526064015b60405180910390fd5b600f6016541115620005875760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b60448201526064016200053a565b5050601a80546001600160a01b039093166001600160a01b031993841617905550601b805490911673137bbfb96e984863c065d82c625408ca865d3e441790555062000988915050565b6000620005df8284620008ce565b9392505050565b828054620005f4906200094c565b90600052602060002090601f01602090048101928262000618576000855562000663565b82601f106200063357805160ff191683800117855562000663565b8280016001018555821562000663579182015b828111156200066357825182559160200191906001019062000646565b506200067192915062000683565b5090565b61100d806200329c83390190565b5b8082111562000671576000815560010162000684565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006d557620006d56200069a565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200070657620007066200069a565b604052919050565b600082601f8301126200072057600080fd5b81516001600160401b038111156200073c576200073c6200069a565b602062000752601f8301601f19168201620006db565b82815285828487010111156200076757600080fd5b60005b83811015620007875785810183015182820184015282016200076a565b83811115620007995760008385840101525b5095945050505050565b80516001600160a01b0381168114620007bb57600080fd5b919050565b6000806000806000806000878903610140811215620007de57600080fd5b88516001600160401b0380821115620007f657600080fd5b620008048c838d016200070e565b995060208b01519150808211156200081b57600080fd5b506200082a8b828c016200070e565b975050604089015195506200084260608a01620007a3565b94506200085260808a01620007a3565b93506200086260a08a01620007a3565b9250608060bf19820112156200087757600080fd5b5062000882620006b0565b60c0890151815260e089015160208201526101008901516040820152610120909801516060890152509497939650919490939192565b634e487b7160e01b600052601160045260246000fd5b60008219821115620008e457620008e4620008b8565b500190565b6000816000190483118215151615620009065762000906620008b8565b500290565b6000826200092957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200094157600080fd5b620005df82620007a3565b600181811c908216806200096157607f821691505b6020821081036200098257634e487b7160e01b600052602260045260246000fd5b50919050565b61290480620009986000396000f3fe6080604052600436106103395760003560e01c806370a08231116101ab578063aa5d8f80116100f7578063d753570611610095578063f1d5f5171161006f578063f1d5f517146109b7578063f5648a4f146109d7578063f74568cc146109ec578063f887ea4014610a0c57600080fd5b8063d753570614610947578063dd62ed3e1461095c578063e884f260146109a257600080fd5b8063c876d0b9116100d1578063c876d0b9146108d9578063ca987b0e146108fa578063cc6badb314610910578063d4fb9a011461092657600080fd5b8063aa5d8f8014610863578063bf56b37114610893578063bfd79284146108a957600080fd5b80638ebfc79611610164578063a457c2d71161013e578063a457c2d7146107e3578063a866050d14610803578063a8aa1b3114610823578063a9059cbb1461084357600080fd5b80638ebfc7961461078e57806395d89b41146107ae578063a3e67610146107c357600080fd5b806370a08231146106ba578063751039fc146106f05780637d1db4a51461071c578063807c2d9c1461073257806383ad79941461074857806385ecfd281461075e57600080fd5b8063313ce567116102855780634a62bb65116102235780635bb988c9116101fd5780635bb988c91461063a578063650c42261461065a578063658f8e321461067a5780636b44b5871461069a57600080fd5b80634a62bb65146105d85780634a74bb02146105f95780635b44b5dc1461061a57600080fd5b80633dab52691161025f5780633dab5269146105385780633f4218e0146105585780634355855a14610588578063499b8394146105b857600080fd5b8063313ce567146104dc578063331a6bf5146104f8578063395093511461051857600080fd5b80631df4ccfc116102f257806320be4afe116102cc57806320be4afe1461047157806323b872dd146104875780632b112e49146104a75780632d48e896146104bc57600080fd5b80631df4ccfc1461040d5780631fa360d2146104235780631fc851bd1461045b57600080fd5b80630445b6671461034557806306fdde031461036e578063090896be14610390578063095ea7b3146103a657806316d9962b146103d657806318160ddd146103f857600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b601e5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b50610383610a2c565b6040516103659190612405565b34801561039c57600080fd5b5061035b60125481565b3480156103b257600080fd5b506103c66103c1366004612482565b610abe565b6040519015158152602001610365565b3480156103e257600080fd5b506103f66103f13660046124ae565b610ad6565b005b34801561040457600080fd5b5060045461035b565b34801561041957600080fd5b5061035b60155481565b34801561042f57600080fd5b50601b54610443906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561046757600080fd5b5061035b600c5481565b34801561047d57600080fd5b5061035b60145481565b34801561049357600080fd5b506103c66104a23660046124c7565b610b0e565b3480156104b357600080fd5b5061035b610b35565b3480156104c857600080fd5b506103f66104d7366004612508565b610ba6565b3480156104e857600080fd5b5060405160098152602001610365565b34801561050457600080fd5b506103f661051336600461252a565b610c39565b34801561052457600080fd5b506103c6610533366004612482565b610c85565b34801561054457600080fd5b506103f6610553366004612557565b610cc4565b34801561056457600080fd5b506103c661057336600461252a565b60076020526000908152604090205460ff1681565b34801561059457600080fd5b506103c66105a336600461252a565b60096020526000908152604090205460ff1681565b3480156105c457600080fd5b506103f66105d336600461252a565b610d10565b3480156105e457600080fd5b50601b546103c690600160a81b900460ff1681565b34801561060557600080fd5b50601b546103c690600160b81b900460ff1681565b34801561062657600080fd5b50600054610443906001600160a01b031681565b34801561064657600080fd5b506103f661065536600461252a565b610d5c565b34801561066657600080fd5b506103f6610675366004612573565b610dcf565b34801561068657600080fd5b506103f66106953660046125bb565b610eb6565b3480156106a657600080fd5b506103f66106b536600461252a565b610f80565b3480156106c657600080fd5b5061035b6106d536600461252a565b6001600160a01b031660009081526002602052604090205490565b3480156106fc57600080fd5b50601b8054600e805460ff1916905561ffff60a01b1916905560016103c6565b34801561072857600080fd5b5061035b601c5481565b34801561073e57600080fd5b5061035b601d5481565b34801561075457600080fd5b5061035b60115481565b34801561076a57600080fd5b506103c661077936600461252a565b600b6020526000908152604090205460ff1681565b34801561079a57600080fd5b506103f66107a9366004612680565b610fff565b3480156107ba57600080fd5b50610383611054565b3480156107cf57600080fd5b50601a54610443906001600160a01b031681565b3480156107ef57600080fd5b506103c66107fe366004612482565b611063565b34801561080f57600080fd5b506103f661081e366004612680565b611100565b34801561082f57600080fd5b50601854610443906001600160a01b031681565b34801561084f57600080fd5b506103c661085e366004612482565b611155565b34801561086f57600080fd5b506103c661087e36600461252a565b60086020526000908152604090205460ff1681565b34801561089f57600080fd5b5061035b60105481565b3480156108b557600080fd5b506103c66108c436600461252a565b600a6020526000908152604090205460ff1681565b3480156108e557600080fd5b50601b546103c690600160a01b900460ff1681565b34801561090657600080fd5b5061035b60165481565b34801561091c57600080fd5b5061035b60135481565b34801561093257600080fd5b50601b546103c690600160c01b900460ff1681565b34801561095357600080fd5b506103f6611163565b34801561096857600080fd5b5061035b6109773660046126b5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109ae57600080fd5b506103c661128e565b3480156109c357600080fd5b506103f66109d23660046124ae565b6112ce565b3480156109e357600080fd5b506103f66112fd565b3480156109f857600080fd5b506103f6610a073660046124ae565b611353565b348015610a1857600080fd5b50601754610443906001600160a01b031681565b606060058054610a3b906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a67906126ee565b8015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b5050505050905090565b600033610acc81858561138e565b5060019392505050565b601a546001600160a01b03163314610b095760405162461bcd60e51b8152600401610b0090612728565b60405180910390fd5b600155565b600033610b1c8582856114b2565b610b2785858561153e565b5060019150505b9392505050565b60026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5461dead60009081527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546004549192610ba1929091610b9b9190611ecb565b90611ecb565b905090565b601a546001600160a01b03163314610bd05760405162461bcd60e51b8152600401610b0090612728565b6000546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b505050505050565b601a546001600160a01b03163314610c635760405162461bcd60e51b8152600401610b0090612728565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190610acc9082908690610cbf908790612773565b61138e565b601a546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610b0090612728565b601b8054921515600160b81b0260ff60b81b1990931692909217909155601e55565b601a546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610b0090612728565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b601a546001600160a01b03163314610df95760405162461bcd60e51b8152600401610b0090612728565b6011849055601282905560138390556014819055610e178285611382565b601555601354601454610e2991611382565b601655601554600c1015610e6e5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b00565b600f6016541115610eb05760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b00565b50505050565b601a546001600160a01b0316331480610ed95750601b546001600160a01b031633145b610f145760405162461bcd60e51b815260206004820152600c60248201526b2737ba1037b832b930ba37b960a11b6044820152606401610b00565b60005b8151811015610f7c576001600a6000848481518110610f3857610f3861278b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f74816127a1565b915050610f17565b5050565b601a546001600160a01b0316331480610fa35750601b546001600160a01b031633145b610fde5760405162461bcd60e51b815260206004820152600c60248201526b2737ba1037b832b930ba37b960a11b6044820152606401610b00565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b601a546001600160a01b031633146110295760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b606060068054610a3b906126ee565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156110e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b00565b6110f5828686840361138e565b506001949350505050565b601a546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000336110f581858561153e565b6019546001600160a01b031633146111c85760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604482015261727960f01b6064820152608401610b00565b6010541561120b5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b00565b4360105561121d4263020f5800612773565b600c55601b805460ff60c01b1916600160c01b179055601780546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601a5490931682529190208054909216179055565b601a546000906001600160a01b031633146112bb5760405162461bcd60e51b8152600401610b0090612728565b50601b805460ff60a01b19169055600190565b601a546001600160a01b031633146112f85760405162461bcd60e51b8152600401610b0090612728565b601d55565b60405160009073137bbfb96e984863c065d82c625408ca865d3e449047908381818185875af1925050503d8060008114610eb0576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b601a546001600160a01b0316331461137d5760405162461bcd60e51b8152600401610b0090612728565b601c55565b6000610b2e8284612773565b6001600160a01b0383166113f05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b00565b6001600160a01b0382166114515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b00565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600360209081526040808320938616835292905220546000198114610eb057818110156115315760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b00565b610eb0848484840361138e565b601b54600090600160c01b900460ff166115de576001600160a01b03841660009081526008602052604090205460ff16801561159257506001600160a01b03831660009081526008602052604090205460ff165b6115de5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b00565b6001600160a01b0384166000908152600a602052604090205460ff1615801561162057506001600160a01b0383166000908152600a602052604090205460ff16155b6116785760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b6064820152608401610b00565b601054431115801561169757506018546001600160a01b038581169116145b80156116b157506017546001600160a01b03848116911614155b80156116c657506001600160a01b0383163014155b156116ef576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b601b54600160b01b900460ff16156117135761170c848484611ed7565b9050610b2e565b6018546001600160a01b031633148015906117385750601b54600160b01b900460ff16155b801561174d5750601b54600160b81b900460ff165b801561176a5750601e543060009081526002602052604090205410155b1561177757611777611fbd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600290915291909120546117c99184906122fe565b6001600160a01b038516600090815260026020908152604080832093909355600790529081205460ff1615801561181957506001600160a01b03841660009081526007602052604090205460ff16155b611823578261182e565b61182e85858561232a565b6001600160a01b0385166000908152600260205260409020549091506118549082611382565b6001600160a01b0380861660009081526002602090815260408083209490945591881681526009909152205460ff166118f957600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156118e657600080fd5b505af19250505080156118f7575060015b505b6001600160a01b03841660009081526009602052604090205460ff1661198b57600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b15801561197857600080fd5b505af1925050508015611989575060015b505b6000546001546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119c39160040190815260200190565b600060405180830381600087803b1580156119dd57600080fd5b505af19250505080156119ee575060015b50601b54600160a81b900460ff1615611d6057601a546001600160a01b03868116911614801590611a2d5750601a546001600160a01b03858116911614155b8015611a4157506001600160a01b03841615155b8015611a5857506001600160a01b03841661dead14155b8015611a6e5750601b54600160b01b900460ff16155b15611d6057601a546001600160a01b03868116911614801590611a9f57506018546001600160a01b03858116911614155b8015611aac575060105443145b15611afb576001600160a01b0384166000818152600b6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b600e5460ff168015611b1a57506018546001600160a01b038681169116145b15611b7157600f543a1115611b715760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610b00565b601b54600160a01b900460ff1615611c8957601a546001600160a01b03858116911614801590611baf57506017546001600160a01b03858116911614155b8015611bc957506018546001600160a01b03858116911614155b15611c89576001600160a01b0384166000908152600d60205260409020544311611c6d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b00565b6001600160a01b0384166000908152600d602052604090204390555b6001600160a01b03841660009081526008602052604090205460ff16611d0657601d546001600160a01b038516600090815260026020526040902054611ccf9085611382565b1115611d065760405162461bcd60e51b81526020600482015260066024820152651dd85b1b195d60d21b6044820152606401610b00565b601c5483111580611d2f57506001600160a01b03851660009081526008602052604090205460ff165b611d605760405162461bcd60e51b81526020600482015260026024820152610e8f60f31b6044820152606401610b00565b6001600160a01b0385166000908152600b602052604090205460ff168015611d89575042600c54115b15611e73576001600160a01b0385166000908152600b602052604090205460ff161580611db8575042600c5411155b611e505760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610b00565b601554611e5e9060056127ba565b601555601654611e6f9060056127ba565b6016555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611eb891815260200190565b60405180910390a3506001949350505050565b6000610b2e82846127d9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600290915291822054611f289184906122fe565b6001600160a01b038086166000908152600260205260408082209390935590851681522054611f579083611382565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fab9086815260200190565b60405180910390a35060019392505050565b601b805460ff60b01b1916600160b01b179055306000908152600260208190526040822054601554909291611ffe91611ff8908186866123ed565b906123f9565b9050600061200c8383611ecb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106120465761204661278b565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c391906127f0565b816001815181106120d6576120d661278b565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac9479061211c90859060009086903090429060040161280d565b600060405180830381600087803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b5050505060004790506000612170601554611ff8601254856123ed90919063ffffffff16565b905060006121936002611ff8601554611ff86000886123ed90919063ffffffff16565b905060006121a582610b9b8686611ecb565b905083156121e957601b546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156121e7573d6000803e3d6000fd5b505b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561223757600080fd5b505af193505050508015612249575060015b5086156122e75760175460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990849060c40160606040518083038185885af11580156122be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e3919061287e565b5050505b5050601b805460ff60b01b19169055505050505050565b600081848411156123225760405162461bcd60e51b8152600401610b009190612405565b505050900390565b60185460009081906001600160a01b0385811691161461234c57601554612350565b6016545b905060006123636064611ff886856123ed565b306000908152600260205260409020549091506123809082611382565b30600081815260026020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d19085815260200190565b60405180910390a36123e38482611ecb565b9695505050505050565b6000610b2e82846127ba565b6000610b2e82846128ac565b600060208083528351808285015260005b8181101561243257858101830151858201604001528201612416565b81811115612444576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461246f57600080fd5b50565b803561247d8161245a565b919050565b6000806040838503121561249557600080fd5b82356124a08161245a565b946020939093013593505050565b6000602082840312156124c057600080fd5b5035919050565b6000806000606084860312156124dc57600080fd5b83356124e78161245a565b925060208401356124f78161245a565b929592945050506040919091013590565b6000806040838503121561251b57600080fd5b50508035926020909101359150565b60006020828403121561253c57600080fd5b8135610b2e8161245a565b8035801515811461247d57600080fd5b6000806040838503121561256a57600080fd5b6124a083612547565b6000806000806080858703121561258957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156125ce57600080fd5b823567ffffffffffffffff808211156125e657600080fd5b818501915085601f8301126125fa57600080fd5b81358181111561260c5761260c6125a5565b8060051b604051601f19603f83011681018181108582111715612631576126316125a5565b60405291825284820192508381018501918883111561264f57600080fd5b938501935b828510156126745761266585612472565b84529385019392850192612654565b98975050505050505050565b6000806040838503121561269357600080fd5b823561269e8161245a565b91506126ac60208401612547565b90509250929050565b600080604083850312156126c857600080fd5b82356126d38161245a565b915060208301356126e38161245a565b809150509250929050565b600181811c9082168061270257607f821691505b60208210810361272257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127865761278661275d565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016127b3576127b361275d565b5060010190565b60008160001904831182151516156127d4576127d461275d565b500290565b6000828210156127eb576127eb61275d565b500390565b60006020828403121561280257600080fd5b8151610b2e8161245a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561285d5784516001600160a01b031683529383019391830191600101612838565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561289357600080fd5b8351925060208401519150604084015190509250925092565b6000826128c957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220c33d4624a89fac67860154953e5d86c989686f9c9f6465c4d5583c032c960a2e64736f6c634300080d003360806040526ec097ce7bc90715b34b9f1000000000600c55610708600d5567016345785d8a0000600e5534801561003557600080fd5b5060405161100d38038061100d833981016040819052610054916100c1565b600180546001600160a01b039485166001600160a01b03199182161790915560028054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055600080549290941691161790915550610104565b80516001600160a01b03811681146100bc57600080fd5b919050565b6000806000606084860312156100d657600080fd5b6100df846100a5565b92506100ed602085016100a5565b91506100fb604085016100a5565b90509250925092565b610efa806101136000396000f3fe6080604052600436106101095760003560e01c8063d0e30db011610095578063efca2eed11610064578063efca2eed146102cf578063f0fc6bca146102e5578063f1e9f1e5146102fa578063ffb2c47914610332578063ffd49c841461035257600080fd5b8063d0e30db014610248578063dc93cf7014610250578063e2d2e21914610280578063ef5d9ae81461029657600080fd5b80632d48e896116100dc5780632d48e8961461018f5780633a98ef39146101af5780634fab0ae8146101c5578063997664d7146101db578063ce7c2ac2146101f157600080fd5b806311ce023d1461010e57806314b6ca961461013757806328fd31981461015957806329a4b31a14610179575b600080fd5b34801561011a57600080fd5b50610124600c5481565b6040519081526020015b60405180910390f35b34801561014357600080fd5b50610157610152366004610d3e565b610368565b005b34801561016557600080fd5b50610124610174366004610d68565b6104e0565b34801561018557600080fd5b5061012460095481565b34801561019b57600080fd5b506101576101aa366004610d83565b61056b565b3480156101bb57600080fd5b5061012460075481565b3480156101d157600080fd5b50610124600e5481565b3480156101e757600080fd5b5061012460085481565b3480156101fd57600080fd5b5061022d61020c366004610d68565b60066020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161012e565b61015761058d565b34801561025c57600080fd5b5061027061026b366004610d68565b610738565b604051901515815260200161012e565b34801561028c57600080fd5b50610124600b5481565b3480156102a257600080fd5b506101246102b1366004610d68565b6001600160a01b031660009081526006602052604090206002015490565b3480156102db57600080fd5b50610124600a5481565b3480156102f157600080fd5b506101576108d3565b34801561030657600080fd5b5060025461031a906001600160a01b031681565b6040516001600160a01b03909116815260200161012e565b34801561033e57600080fd5b5061015761034d366004610da5565b610933565b34801561035e57600080fd5b50610124600d5481565b6000546001600160a01b0316331461037f57600080fd5b6001600160a01b038216600090815260066020526040902054156103a6576103a682610a37565b6000811180156103cc57506001600160a01b038216600090815260066020526040902054155b1561043257600380546001600160a01b0384166000818152600460205260408120839055600183018455929092527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055610465565b8015801561045757506001600160a01b03821660009081526006602052604090205415155b156104655761046582610b6e565b6001600160a01b03821660009081526006602052604090205460075461049691839161049091610c83565b90610c96565b6007556001600160a01b03821660009081526006602052604090208190556104bd81610ca2565b6001600160a01b0390921660009081526006602052604090206001019190915550565b6001600160a01b038116600090815260066020526040812054810361050757506000919050565b6001600160a01b03821660009081526006602052604081205461052990610ca2565b6001600160a01b038416600090815260066020526040902060010154909150808211610559575060009392505050565b6105638282610c83565b949350505050565b6000546001600160a01b0316331461058257600080fd5b600d91909155600e55565b6000546001600160a01b031633146105a457600080fd5b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106119190610dbe565b9050600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561066357600080fd5b505af1158015610677573d6000803e3d6000fd5b50506002546040516370a0823160e01b8152306004820152600094506106f793508592506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610dbe565b90610c83565b6008549091506107079082610c96565b600855600754600c5461073191610728916107229085610cc5565b90610cd1565b600b5490610c96565b600b555050565b60006001600160a01b0382166107955760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190610dbe565b60405163a9059cbb60e01b815273137bbfb96e984863c065d82c625408ca865d3e446004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108889190610dd7565b604080516001600160a01b0386168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a150919050565b6108dc33610cdd565b6109285760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640161078c565b61093133610a37565b565b6000546001600160a01b0316331461094a57600080fd5b600354600081900361095a575050565b60008060005a90505b848210801561097157508383105b15610a305783600f5410610985576000600f555b6109b76003600f548154811061099d5761099d610df9565b6000918252602090912001546001600160a01b0316610cdd565b156109ee576109ee6003600f54815481106109d4576109d4610df9565b6000918252602090912001546001600160a01b0316610a37565b610a036109fc5a8390610c83565b8390610c96565b91505a600f80549192506000610a1883610e25565b91905055508280610a2890610e25565b935050610963565b5050505050565b6001600160a01b0381166000908152600660205260408120549003610a595750565b6000610a64826104e0565b90508015610b6a57600a54610a799082610c96565b600a556001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610aaf9082610c96565b6001600160a01b0383166000908152600660205260409020600281019190915554610ad990610ca2565b6001600160a01b038381166000818152600660205260409081902060010193909355600254925163a9059cbb60e01b815260048101919091526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190610dd7565b505b5050565b60038054610b7e90600190610e3e565b81548110610b8e57610b8e610df9565b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610bcc57610bcc610df9565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260049182905260408120546003805491939291610c1890600190610e3e565b81548110610c2857610c28610df9565b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610c5e57610c5e610e55565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610c8f8284610e3e565b9392505050565b6000610c8f8284610e6b565b6000610cbf600c54610722600b5485610cc590919063ffffffff16565b92915050565b6000610c8f8284610e83565b6000610c8f8284610ea2565b600d546001600160a01b03821660009081526005602052604081205490914291610d079190610e6b565b108015610cbf5750600e54610d1b836104e0565b1192915050565b80356001600160a01b0381168114610d3957600080fd5b919050565b60008060408385031215610d5157600080fd5b610d5a83610d22565b946020939093013593505050565b600060208284031215610d7a57600080fd5b610c8f82610d22565b60008060408385031215610d9657600080fd5b50508035926020909101359150565b600060208284031215610db757600080fd5b5035919050565b600060208284031215610dd057600080fd5b5051919050565b600060208284031215610de957600080fd5b81518015158114610c8f57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610e3757610e37610e0f565b5060010190565b600082821015610e5057610e50610e0f565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610e7e57610e7e610e0f565b500190565b6000816000190483118215151615610e9d57610e9d610e0f565b500290565b600082610ebf57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212201836c2d0122f2dc205ca94f1373f71a96c3877c7bec1c6b136fafdfb9706af5964736f6c634300080d003300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000ba3703383908cd381b33b988dfe22bb502a0a93b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000743617368496e6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024349000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103395760003560e01c806370a08231116101ab578063aa5d8f80116100f7578063d753570611610095578063f1d5f5171161006f578063f1d5f517146109b7578063f5648a4f146109d7578063f74568cc146109ec578063f887ea4014610a0c57600080fd5b8063d753570614610947578063dd62ed3e1461095c578063e884f260146109a257600080fd5b8063c876d0b9116100d1578063c876d0b9146108d9578063ca987b0e146108fa578063cc6badb314610910578063d4fb9a011461092657600080fd5b8063aa5d8f8014610863578063bf56b37114610893578063bfd79284146108a957600080fd5b80638ebfc79611610164578063a457c2d71161013e578063a457c2d7146107e3578063a866050d14610803578063a8aa1b3114610823578063a9059cbb1461084357600080fd5b80638ebfc7961461078e57806395d89b41146107ae578063a3e67610146107c357600080fd5b806370a08231146106ba578063751039fc146106f05780637d1db4a51461071c578063807c2d9c1461073257806383ad79941461074857806385ecfd281461075e57600080fd5b8063313ce567116102855780634a62bb65116102235780635bb988c9116101fd5780635bb988c91461063a578063650c42261461065a578063658f8e321461067a5780636b44b5871461069a57600080fd5b80634a62bb65146105d85780634a74bb02146105f95780635b44b5dc1461061a57600080fd5b80633dab52691161025f5780633dab5269146105385780633f4218e0146105585780634355855a14610588578063499b8394146105b857600080fd5b8063313ce567146104dc578063331a6bf5146104f8578063395093511461051857600080fd5b80631df4ccfc116102f257806320be4afe116102cc57806320be4afe1461047157806323b872dd146104875780632b112e49146104a75780632d48e896146104bc57600080fd5b80631df4ccfc1461040d5780631fa360d2146104235780631fc851bd1461045b57600080fd5b80630445b6671461034557806306fdde031461036e578063090896be14610390578063095ea7b3146103a657806316d9962b146103d657806318160ddd146103f857600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b601e5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b50610383610a2c565b6040516103659190612405565b34801561039c57600080fd5b5061035b60125481565b3480156103b257600080fd5b506103c66103c1366004612482565b610abe565b6040519015158152602001610365565b3480156103e257600080fd5b506103f66103f13660046124ae565b610ad6565b005b34801561040457600080fd5b5060045461035b565b34801561041957600080fd5b5061035b60155481565b34801561042f57600080fd5b50601b54610443906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561046757600080fd5b5061035b600c5481565b34801561047d57600080fd5b5061035b60145481565b34801561049357600080fd5b506103c66104a23660046124c7565b610b0e565b3480156104b357600080fd5b5061035b610b35565b3480156104c857600080fd5b506103f66104d7366004612508565b610ba6565b3480156104e857600080fd5b5060405160098152602001610365565b34801561050457600080fd5b506103f661051336600461252a565b610c39565b34801561052457600080fd5b506103c6610533366004612482565b610c85565b34801561054457600080fd5b506103f6610553366004612557565b610cc4565b34801561056457600080fd5b506103c661057336600461252a565b60076020526000908152604090205460ff1681565b34801561059457600080fd5b506103c66105a336600461252a565b60096020526000908152604090205460ff1681565b3480156105c457600080fd5b506103f66105d336600461252a565b610d10565b3480156105e457600080fd5b50601b546103c690600160a81b900460ff1681565b34801561060557600080fd5b50601b546103c690600160b81b900460ff1681565b34801561062657600080fd5b50600054610443906001600160a01b031681565b34801561064657600080fd5b506103f661065536600461252a565b610d5c565b34801561066657600080fd5b506103f6610675366004612573565b610dcf565b34801561068657600080fd5b506103f66106953660046125bb565b610eb6565b3480156106a657600080fd5b506103f66106b536600461252a565b610f80565b3480156106c657600080fd5b5061035b6106d536600461252a565b6001600160a01b031660009081526002602052604090205490565b3480156106fc57600080fd5b50601b8054600e805460ff1916905561ffff60a01b1916905560016103c6565b34801561072857600080fd5b5061035b601c5481565b34801561073e57600080fd5b5061035b601d5481565b34801561075457600080fd5b5061035b60115481565b34801561076a57600080fd5b506103c661077936600461252a565b600b6020526000908152604090205460ff1681565b34801561079a57600080fd5b506103f66107a9366004612680565b610fff565b3480156107ba57600080fd5b50610383611054565b3480156107cf57600080fd5b50601a54610443906001600160a01b031681565b3480156107ef57600080fd5b506103c66107fe366004612482565b611063565b34801561080f57600080fd5b506103f661081e366004612680565b611100565b34801561082f57600080fd5b50601854610443906001600160a01b031681565b34801561084f57600080fd5b506103c661085e366004612482565b611155565b34801561086f57600080fd5b506103c661087e36600461252a565b60086020526000908152604090205460ff1681565b34801561089f57600080fd5b5061035b60105481565b3480156108b557600080fd5b506103c66108c436600461252a565b600a6020526000908152604090205460ff1681565b3480156108e557600080fd5b50601b546103c690600160a01b900460ff1681565b34801561090657600080fd5b5061035b60165481565b34801561091c57600080fd5b5061035b60135481565b34801561093257600080fd5b50601b546103c690600160c01b900460ff1681565b34801561095357600080fd5b506103f6611163565b34801561096857600080fd5b5061035b6109773660046126b5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156109ae57600080fd5b506103c661128e565b3480156109c357600080fd5b506103f66109d23660046124ae565b6112ce565b3480156109e357600080fd5b506103f66112fd565b3480156109f857600080fd5b506103f6610a073660046124ae565b611353565b348015610a1857600080fd5b50601754610443906001600160a01b031681565b606060058054610a3b906126ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a67906126ee565b8015610ab45780601f10610a8957610100808354040283529160200191610ab4565b820191906000526020600020905b815481529060010190602001808311610a9757829003601f168201915b5050505050905090565b600033610acc81858561138e565b5060019392505050565b601a546001600160a01b03163314610b095760405162461bcd60e51b8152600401610b0090612728565b60405180910390fd5b600155565b600033610b1c8582856114b2565b610b2785858561153e565b5060019150505b9392505050565b60026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5461dead60009081527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc546004549192610ba1929091610b9b9190611ecb565b90611ecb565b905090565b601a546001600160a01b03163314610bd05760405162461bcd60e51b8152600401610b0090612728565b6000546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610c1d57600080fd5b505af1158015610c31573d6000803e3d6000fd5b505050505050565b601a546001600160a01b03163314610c635760405162461bcd60e51b8152600401610b0090612728565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190610acc9082908690610cbf908790612773565b61138e565b601a546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610b0090612728565b601b8054921515600160b81b0260ff60b81b1990931692909217909155601e55565b601a546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610b0090612728565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b03163314610d865760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b0381166000818152600b6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b601a546001600160a01b03163314610df95760405162461bcd60e51b8152600401610b0090612728565b6011849055601282905560138390556014819055610e178285611382565b601555601354601454610e2991611382565b601655601554600c1015610e6e5760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b00565b600f6016541115610eb05760405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606401610b00565b50505050565b601a546001600160a01b0316331480610ed95750601b546001600160a01b031633145b610f145760405162461bcd60e51b815260206004820152600c60248201526b2737ba1037b832b930ba37b960a11b6044820152606401610b00565b60005b8151811015610f7c576001600a6000848481518110610f3857610f3861278b565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f74816127a1565b915050610f17565b5050565b601a546001600160a01b0316331480610fa35750601b546001600160a01b031633145b610fde5760405162461bcd60e51b815260206004820152600c60248201526b2737ba1037b832b930ba37b960a11b6044820152606401610b00565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b601a546001600160a01b031633146110295760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b606060068054610a3b906126ee565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909190838110156110e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b00565b6110f5828686840361138e565b506001949350505050565b601a546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610b0090612728565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000336110f581858561153e565b6019546001600160a01b031633146111c85760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604482015261727960f01b6064820152608401610b00565b6010541561120b5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610b00565b4360105561121d4263020f5800612773565b600c55601b805460ff60c01b1916600160c01b179055601780546001600160a01b039081166000908152600760209081526040808320805460ff19908116600190811790925595548516845260089092528083208054861683179055601a5490931682529190208054909216179055565b601a546000906001600160a01b031633146112bb5760405162461bcd60e51b8152600401610b0090612728565b50601b805460ff60a01b19169055600190565b601a546001600160a01b031633146112f85760405162461bcd60e51b8152600401610b0090612728565b601d55565b60405160009073137bbfb96e984863c065d82c625408ca865d3e449047908381818185875af1925050503d8060008114610eb0576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b601a546001600160a01b0316331461137d5760405162461bcd60e51b8152600401610b0090612728565b601c55565b6000610b2e8284612773565b6001600160a01b0383166113f05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b00565b6001600160a01b0382166114515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b00565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600360209081526040808320938616835292905220546000198114610eb057818110156115315760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b00565b610eb0848484840361138e565b601b54600090600160c01b900460ff166115de576001600160a01b03841660009081526008602052604090205460ff16801561159257506001600160a01b03831660009081526008602052604090205460ff165b6115de5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b00565b6001600160a01b0384166000908152600a602052604090205460ff1615801561162057506001600160a01b0383166000908152600a602052604090205460ff16155b6116785760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b6064820152608401610b00565b601054431115801561169757506018546001600160a01b038581169116145b80156116b157506017546001600160a01b03848116911614155b80156116c657506001600160a01b0383163014155b156116ef576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b601b54600160b01b900460ff16156117135761170c848484611ed7565b9050610b2e565b6018546001600160a01b031633148015906117385750601b54600160b01b900460ff16155b801561174d5750601b54600160b81b900460ff165b801561176a5750601e543060009081526002602052604090205410155b1561177757611777611fbd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600290915291909120546117c99184906122fe565b6001600160a01b038516600090815260026020908152604080832093909355600790529081205460ff1615801561181957506001600160a01b03841660009081526007602052604090205460ff16155b611823578261182e565b61182e85858561232a565b6001600160a01b0385166000908152600260205260409020549091506118549082611382565b6001600160a01b0380861660009081526002602090815260408083209490945591881681526009909152205460ff166118f957600080546001600160a01b038781168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b1580156118e657600080fd5b505af19250505080156118f7575060015b505b6001600160a01b03841660009081526009602052604090205460ff1661198b57600080546001600160a01b038681168084526002602052604093849020549351630a5b654b60e11b81526004810191909152602481019390935216906314b6ca9690604401600060405180830381600087803b15801561197857600080fd5b505af1925050508015611989575060015b505b6000546001546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916119c39160040190815260200190565b600060405180830381600087803b1580156119dd57600080fd5b505af19250505080156119ee575060015b50601b54600160a81b900460ff1615611d6057601a546001600160a01b03868116911614801590611a2d5750601a546001600160a01b03858116911614155b8015611a4157506001600160a01b03841615155b8015611a5857506001600160a01b03841661dead14155b8015611a6e5750601b54600160b01b900460ff16155b15611d6057601a546001600160a01b03868116911614801590611a9f57506018546001600160a01b03858116911614155b8015611aac575060105443145b15611afb576001600160a01b0384166000818152600b6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b600e5460ff168015611b1a57506018546001600160a01b038681169116145b15611b7157600f543a1115611b715760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610b00565b601b54600160a01b900460ff1615611c8957601a546001600160a01b03858116911614801590611baf57506017546001600160a01b03858116911614155b8015611bc957506018546001600160a01b03858116911614155b15611c89576001600160a01b0384166000908152600d60205260409020544311611c6d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b00565b6001600160a01b0384166000908152600d602052604090204390555b6001600160a01b03841660009081526008602052604090205460ff16611d0657601d546001600160a01b038516600090815260026020526040902054611ccf9085611382565b1115611d065760405162461bcd60e51b81526020600482015260066024820152651dd85b1b195d60d21b6044820152606401610b00565b601c5483111580611d2f57506001600160a01b03851660009081526008602052604090205460ff165b611d605760405162461bcd60e51b81526020600482015260026024820152610e8f60f31b6044820152606401610b00565b6001600160a01b0385166000908152600b602052604090205460ff168015611d89575042600c54115b15611e73576001600160a01b0385166000908152600b602052604090205460ff161580611db8575042600c5411155b611e505760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610b00565b601554611e5e9060056127ba565b601555601654611e6f9060056127ba565b6016555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611eb891815260200190565b60405180910390a3506001949350505050565b6000610b2e82846127d9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600290915291822054611f289184906122fe565b6001600160a01b038086166000908152600260205260408082209390935590851681522054611f579083611382565b6001600160a01b0380851660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fab9086815260200190565b60405180910390a35060019392505050565b601b805460ff60b01b1916600160b01b179055306000908152600260208190526040822054601554909291611ffe91611ff8908186866123ed565b906123f9565b9050600061200c8383611ecb565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106120465761204661278b565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c391906127f0565b816001815181106120d6576120d661278b565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b815291169063791ac9479061211c90859060009086903090429060040161280d565b600060405180830381600087803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b5050505060004790506000612170601554611ff8601254856123ed90919063ffffffff16565b905060006121936002611ff8601554611ff86000886123ed90919063ffffffff16565b905060006121a582610b9b8686611ecb565b905083156121e957601b546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156121e7573d6000803e3d6000fd5b505b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561223757600080fd5b505af193505050508015612249575060015b5086156122e75760175460405163f305d71960e01b815230600482015260248101899052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990849060c40160606040518083038185885af11580156122be573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122e3919061287e565b5050505b5050601b805460ff60b01b19169055505050505050565b600081848411156123225760405162461bcd60e51b8152600401610b009190612405565b505050900390565b60185460009081906001600160a01b0385811691161461234c57601554612350565b6016545b905060006123636064611ff886856123ed565b306000908152600260205260409020549091506123809082611382565b30600081815260026020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d19085815260200190565b60405180910390a36123e38482611ecb565b9695505050505050565b6000610b2e82846127ba565b6000610b2e82846128ac565b600060208083528351808285015260005b8181101561243257858101830151858201604001528201612416565b81811115612444576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461246f57600080fd5b50565b803561247d8161245a565b919050565b6000806040838503121561249557600080fd5b82356124a08161245a565b946020939093013593505050565b6000602082840312156124c057600080fd5b5035919050565b6000806000606084860312156124dc57600080fd5b83356124e78161245a565b925060208401356124f78161245a565b929592945050506040919091013590565b6000806040838503121561251b57600080fd5b50508035926020909101359150565b60006020828403121561253c57600080fd5b8135610b2e8161245a565b8035801515811461247d57600080fd5b6000806040838503121561256a57600080fd5b6124a083612547565b6000806000806080858703121561258957600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156125ce57600080fd5b823567ffffffffffffffff808211156125e657600080fd5b818501915085601f8301126125fa57600080fd5b81358181111561260c5761260c6125a5565b8060051b604051601f19603f83011681018181108582111715612631576126316125a5565b60405291825284820192508381018501918883111561264f57600080fd5b938501935b828510156126745761266585612472565b84529385019392850192612654565b98975050505050505050565b6000806040838503121561269357600080fd5b823561269e8161245a565b91506126ac60208401612547565b90509250929050565b600080604083850312156126c857600080fd5b82356126d38161245a565b915060208301356126e38161245a565b809150509250929050565b600181811c9082168061270257607f821691505b60208210810361272257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127865761278661275d565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016127b3576127b361275d565b5060010190565b60008160001904831182151516156127d4576127d461275d565b500290565b6000828210156127eb576127eb61275d565b500390565b60006020828403121561280257600080fd5b8151610b2e8161245a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561285d5784516001600160a01b031683529383019391830191600101612838565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561289357600080fd5b8351925060208401519150604084015190509250925092565b6000826128c957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220c33d4624a89fac67860154953e5d86c989686f9c9f6465c4d5583c032c960a2e64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000ba3703383908cd381b33b988dfe22bb502a0a93b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000743617368496e6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024349000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : tokenName (string): CashIno
Arg [1] : tokenSymbol (string): CI
Arg [2] : initialSupply (uint256): 100000000000000000
Arg [3] : owner (address): 0xba3703383908Cd381B33b988DfE22bB502a0a93b
Arg [4] : reflectionToken (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [5] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [6] : fees (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [3] : 000000000000000000000000ba3703383908cd381b33b988dfe22bb502a0a93b
Arg [4] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [5] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [11] : 43617368496e6f00000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [13] : 4349000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
22265:21121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24240:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;24240:28:0;;;;;;;;30628:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23608:28::-;;;;;;;;;;;;;;;;32988:203;;;;;;;;;;-1:-1:-1;32988:203:0;;;;;:::i;:::-;;:::i;:::-;;;1558:14:1;;1551:22;1533:41;;1521:2;1506:18;32988:203:0;1393:187:1;28494:125:0;;;;;;;;;;-1:-1:-1;28494:125:0;;;;;:::i;:::-;;:::i;:::-;;31753:110;;;;;;;;;;-1:-1:-1;31843:12:0;;31753:110;;23729:23;;;;;;;;;;;;;;;;23927:30;;;;;;;;;;-1:-1:-1;23927:30:0;;;;-1:-1:-1;;;;;23927:30:0;;;;;;-1:-1:-1;;;;;1950:32:1;;;1932:51;;1920:2;1905:18;23927:30:0;1770:219:1;23176:33:0;;;;;;;;;;;;;;;;23686:34;;;;;;;;;;;;;;;;33781:297;;;;;;;;;;-1:-1:-1;33781:297:0;;;;;:::i;:::-;;:::i;30414:144::-;;;;;;;;;;;;;:::i;29972:198::-;;;;;;;;;;-1:-1:-1;29972:198:0;;;;;:::i;:::-;;:::i;31594:94::-;;;;;;;;;;-1:-1:-1;31594:94:0;;31679:1;2850:36:1;;2838:2;2823:18;31594:94:0;2708:184:1;28763:122:0;;;;;;;;;;-1:-1:-1;28763:122:0;;;;;:::i;:::-;;:::i;34487:242::-;;;;;;;;;;-1:-1:-1;34487:242:0;;;;;:::i;:::-;;:::i;28893:199::-;;;;;;;;;;-1:-1:-1;28893:199:0;;;;;:::i;:::-;;:::i;22819:44::-;;;;;;;;;;-1:-1:-1;22819:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22926:49;;;;;;;;;;-1:-1:-1;22926:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28630:125;;;;;;;;;;-1:-1:-1;28630:125:0;;;;;:::i;:::-;;:::i;24012:33::-;;;;;;;;;;-1:-1:-1;24012:33:0;;;;-1:-1:-1;;;24012:33:0;;;;;;24082:40;;;;;;;;;;-1:-1:-1;24082:40:0;;;;-1:-1:-1;;;24082:40:0;;;;;;22360:39;;;;;;;;;;-1:-1:-1;22360:39:0;;;;-1:-1:-1;;;;;22360:39:0;;;29110:148;;;;;;;;;;-1:-1:-1;29110:148:0;;;;;:::i;:::-;;:::i;27344:646::-;;;;;;;;;;-1:-1:-1;27344:646:0;;;;;:::i;:::-;;:::i;29689:171::-;;;;;;;;;;-1:-1:-1;29689:171:0;;;;;:::i;:::-;;:::i;29869:95::-;;;;;;;;;;-1:-1:-1;29869:95:0;;;;;:::i;:::-;;:::i;31926:127::-;;;;;;;;;;-1:-1:-1;31926:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;32027:18:0;32000:7;32027:18;;;:9;:18;;;;;;;31926:127;29326:182;;;;;;;;;;-1:-1:-1;29384:14:0;:22;;29417:14;:22;;-1:-1:-1;;29417:22:0;;;-1:-1:-1;;;;29450:28:0;;;-1:-1:-1;29326:182:0;;24174:27;;;;;;;;;;;;;;;;24208:25;;;;;;;;;;;;;;;;23573:28;;;;;;;;;;;;;;;;23027:43;;;;;;;;;;-1:-1:-1;23027:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28232:117;;;;;;;;;;-1:-1:-1;28232:117:0;;;;;:::i;:::-;;:::i;30849:106::-;;;;;;;;;;;;;:::i;23895:25::-;;;;;;;;;;-1:-1:-1;23895:25:0;;;;-1:-1:-1;;;;;23895:25:0;;;35232:440;;;;;;;;;;-1:-1:-1;35232:440:0;;;;;:::i;:::-;;:::i;28357:127::-;;;;;;;;;;-1:-1:-1;28357:127:0;;;;;:::i;:::-;;:::i;23839:19::-;;;;;;;;;;-1:-1:-1;23839:19:0;;;;-1:-1:-1;;;;;23839:19:0;;;32259:195;;;;;;;;;;-1:-1:-1;32259:195:0;;;;;:::i;:::-;;:::i;22870:49::-;;;;;;;;;;-1:-1:-1;22870:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23539:25;;;;;;;;;;;;;;;;22982:36;;;;;;;;;;-1:-1:-1;22982:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23966:39;;;;;;;;;;-1:-1:-1;23966:39:0;;;;-1:-1:-1;;;23966:39:0;;;;;;23759:32;;;;;;;;;;;;;;;;23645:34;;;;;;;;;;;;;;;;24129:33;;;;;;;;;;-1:-1:-1;24129:33:0;;;;-1:-1:-1;;;24129:33:0;;;;;;26939:371;;;;;;;;;;;;;:::i;32517:151::-;;;;;;;;;;-1:-1:-1;32517:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;32633:18:0;;;32606:7;32633:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32517:151;29547:134;;;;;;;;;;;;;:::i;28111:109::-;;;;;;;;;;-1:-1:-1;28111:109:0;;;;;:::i;:::-;;:::i;30224:182::-;;;;;;;;;;;;;:::i;28003:100::-;;;;;;;;;;-1:-1:-1;28003:100:0;;;;;:::i;:::-;;:::i;23800:32::-;;;;;;;;;;-1:-1:-1;23800:32:0;;;;-1:-1:-1;;;;;23800:32:0;;;30628:102;30684:13;30717:5;30710:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30628:102;:::o;32988:203::-;33073:4;4415:10;33129:32;4415:10;33145:7;33154:6;33129:8;:32::i;:::-;-1:-1:-1;33179:4:0;;32988:203;-1:-1:-1;;;32988:203:0:o;28494:125::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;;;;;;;;;28579:14:::1;:32:::0;28494:125::o;33781:297::-;33914:4;4415:10;33972:38;33988:4;4415:10;34003:6;33972:15;:38::i;:::-;34021:27;34031:4;34037:2;34041:6;34021:9;:27::i;:::-;;34066:4;34059:11;;;33781:297;;;;;;:::o;30414:144::-;32027:9;:18;;;;22695:42;30469:7;32027:18;;;;;30496:12;;30469:7;;30496:54;;32027:18;;30496:33;;:12;:16;:33::i;:::-;:37;;:54::i;:::-;30489:61;;30414:144;:::o;29972:198::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;30085:11:::1;::::0;:69:::1;::::0;-1:-1:-1;;;30085:69:0;;::::1;::::0;::::1;7786:25:1::0;;;7827:18;;;7820:34;;;-1:-1:-1;;;;;30085:11:0;;::::1;::::0;:35:::1;::::0;7759:18:1;;30085:69:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29972:198:::0;;:::o;28763:122::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;28850:10:::1;:27:::0;;-1:-1:-1;;;;;;28850:27:0::1;-1:-1:-1::0;;;;;28850:27:0;;;::::1;::::0;;;::::1;::::0;;28763:122::o;34487:242::-;4415:10;34577:4;34658:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;34658:27:0;;;;;;;;;;34577:4;;4415:10;34633:66;;4415:10;;34658:27;;:40;;34688:10;;34658:40;:::i;:::-;34633:8;:66::i;28893:199::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;29002:21:::1;:39:::0;;;::::1;;-1:-1:-1::0;;;29002:39:0::1;-1:-1:-1::0;;;;29002:39:0;;::::1;::::0;;;::::1;::::0;;;29052:13:::1;:32:::0;28893:199::o;28630:125::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;28718:7:::1;:29:::0;;-1:-1:-1;;;;;;28718:29:0::1;-1:-1:-1::0;;;;;28718:29:0;;;::::1;::::0;;;::::1;::::0;;28630:125::o;29110:148::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29184:20:0;::::1;29207:5;29184:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;29184:28:0::1;::::0;;29228:22;::::1;::::0;29207:5;29228:22:::1;29110:148:::0;:::o;27344:646::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;27537:13:::1;:36:::0;;;27584:13:::1;:36:::0;;;27633:19:::1;:48:::0;;;27692:19:::1;:48:::0;;;27764:32:::1;27600:20:::0;27553;27764:17:::1;:32::i;:::-;27753:8;:43:::0;27851:19:::1;::::0;27827::::1;::::0;:44:::1;::::0;:23:::1;:44::i;:::-;27807:17;:64:::0;27892:8:::1;::::0;27904:2:::1;-1:-1:-1::0;27892:14:0::1;27884:39;;;::::0;-1:-1:-1;;;27884:39:0;;8332:2:1;27884:39:0::1;::::0;::::1;8314:21:1::0;8371:2;8351:18;;;8344:30;-1:-1:-1;;;8390:18:1;;;8383:42;8442:18;;27884:39:0::1;8130:336:1::0;27884:39:0::1;27963:2;27942:17;;:23;;27934:48;;;::::0;-1:-1:-1;;;27934:48:0;;8332:2:1;27934:48:0::1;::::0;::::1;8314:21:1::0;8371:2;8351:18;;;8344:30;-1:-1:-1;;;8390:18:1;;;8383:42;8442:18;;27934:48:0::1;8130:336:1::0;27934:48:0::1;27344:646:::0;;;;:::o;29689:171::-;26859:10;;-1:-1:-1;;;;;26859:10:0;26845;:24;;:49;;-1:-1:-1;26887:7:0;;-1:-1:-1;;;;;26887:7:0;26873:10;:21;26845:49;26837:74;;;;-1:-1:-1;;;26837:74:0;;8673:2:1;26837:74:0;;;8655:21:1;8712:2;8692:18;;;8685:30;-1:-1:-1;;;8731:18:1;;;8724:42;8783:18;;26837:74:0;8471:336:1;26837:74:0;29767:9:::1;29762:91;29786:5;:12;29782:1;:16;29762:91;;;29837:4;29820;:14;29825:5;29831:1;29825:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29820:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29820:14:0;:21;;-1:-1:-1;;29820:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29800:3;::::1;::::0;::::1;:::i;:::-;;;;29762:91;;;;29689:171:::0;:::o;29869:95::-;26859:10;;-1:-1:-1;;;;;26859:10:0;26845;:24;;:49;;-1:-1:-1;26887:7:0;;-1:-1:-1;;;;;26887:7:0;26873:10;:21;26845:49;26837:74;;;;-1:-1:-1;;;26837:74:0;;8673:2:1;26837:74:0;;;8655:21:1;8712:2;8692:18;;;8685:30;-1:-1:-1;;;8731:18:1;;;8724:42;8783:18;;26837:74:0;8471:336:1;26837:74:0;-1:-1:-1;;;;;29936:12:0::1;29951:5;29936:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;29936:20:0::1;::::0;;29869:95::o;28232:117::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28313:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28313:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28232:117::o;30849:106::-;30907:13;30940:7;30933:14;;;;;:::i;35232:440::-;4415:10;35327:4;35410:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;35410:27:0;;;;;;;;;;35327:4;;4415:10;35456:35;;;;35448:85;;;;-1:-1:-1;;;35448:85:0;;9286:2:1;35448:85:0;;;9268:21:1;9325:2;9305:18;;;9298:30;9364:34;9344:18;;;9337:62;-1:-1:-1;;;9415:18:1;;;9408:35;9460:19;;35448:85:0;9084:401:1;35448:85:0;35569:60;35578:5;35585:7;35613:15;35594:16;:34;35569:8;:60::i;:::-;-1:-1:-1;35660:4:0;;35232:440;-1:-1:-1;;;;35232:440:0:o;28357:127::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28443:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28443:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28357:127::o;32259:195::-;32340:4;4415:10;32396:28;4415:10;32413:2;32417:6;32396:9;:28::i;26939:371::-;26595:7;;-1:-1:-1;;;;;26595:7:0;4415:10;26595:23;26587:70;;;;-1:-1:-1;;;26587:70:0;;9692:2:1;26587:70:0;;;9674:21:1;9731:2;9711:18;;;9704:30;9770:34;9750:18;;;9743:62;-1:-1:-1;;;9821:18:1;;;9814:32;9863:19;;26587:70:0;9490:398:1;26587:70:0;26996:10:::1;::::0;:15;26988:44:::1;;;::::0;-1:-1:-1;;;26988:44:0;;10095:2:1;26988:44:0::1;::::0;::::1;10077:21:1::0;10134:2;10114:18;;;10107:30;-1:-1:-1;;;10153:18:1;;;10146:46;10209:18;;26988:44:0::1;9893:340:1::0;26988:44:0::1;27056:12;27043:10;:25:::0;27100:28:::1;:15;27118:10;27100:28;:::i;:::-;27079:18;:49:::0;27139:13:::1;:20:::0;;-1:-1:-1;;;;27139:20:0::1;-1:-1:-1::0;;;27139:20:0::1;::::0;;27190:6:::1;::::0;;-1:-1:-1;;;;;27190:6:0;;::::1;27139:20:::0;27170:28;;;:11:::1;:28;::::0;;;;;;;:35;;-1:-1:-1;;27170:35:0;;::::1;27155:4;27170:35:::0;;::::1;::::0;;;27241:6;;;::::1;27216:33:::0;;:16:::1;:33:::0;;;;;;:40;;;::::1;::::0;::::1;::::0;;27284:10:::1;::::0;;;::::1;27267:28:::0;;;;;:35;;;;::::1;;::::0;;26939:371::o;29547:134::-;26462:10;;29607:4;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;-1:-1:-1;29623:20:0::1;:28:::0;;-1:-1:-1;;;;29623:28:0::1;::::0;;;29547:134;:::o;28111:109::-;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;28190:10:::1;:22:::0;28111:109::o;30224:182::-;30308:90;;30272:12;;30316:42;;30372:21;;30272:12;30308:90;30272:12;30308:90;30372:21;30316:42;30308:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28003:100;26462:10;;-1:-1:-1;;;;;26462:10:0;4415;26462:26;26454:71;;;;-1:-1:-1;;;26454:71:0;;;;;;;:::i;:::-;28072:12:::1;:23:::0;28003:100::o;7409:98::-;7467:7;7494:5;7498:1;7494;:5;:::i;40358:380::-;-1:-1:-1;;;;;40494:19:0;;40486:68;;;;-1:-1:-1;;;40486:68:0;;10650:2:1;40486:68:0;;;10632:21:1;10689:2;10669:18;;;10662:30;10728:34;10708:18;;;10701:62;-1:-1:-1;;;10779:18:1;;;10772:34;10823:19;;40486:68:0;10448:400:1;40486:68:0;-1:-1:-1;;;;;40573:21:0;;40565:68;;;;-1:-1:-1;;;40565:68:0;;11055:2:1;40565:68:0;;;11037:21:1;11094:2;11074:18;;;11067:30;11133:34;11113:18;;;11106:62;-1:-1:-1;;;11184:18:1;;;11177:32;11226:19;;40565:68:0;10853:398:1;40565:68:0;-1:-1:-1;;;;;40646:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;40698:32;;160:25:1;;;40698:32:0;;133:18:1;40698:32:0;;;;;;;40358:380;;;:::o;41025:453::-;-1:-1:-1;;;;;32633:18:0;;;41160:24;32633:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;41227:37:0;;41223:248;;41309:6;41289:16;:26;;41281:68;;;;-1:-1:-1;;;41281:68:0;;11458:2:1;41281:68:0;;;11440:21:1;11497:2;11477:18;;;11470:30;11536:31;11516:18;;;11509:59;11585:18;;41281:68:0;11256:353:1;41281:68:0;41393:51;41402:5;41409:7;41437:6;41418:16;:25;41393:8;:51::i;35680:3609::-;35791:13;;35768:4;;-1:-1:-1;;;35791:13:0;;;;35787:139;;-1:-1:-1;;;;;35828:24:0;;;;;;:16;:24;;;;;;;;:55;;;;-1:-1:-1;;;;;;35856:27:0;;;;;;:16;:27;;;;;;;;35828:55;35820:94;;;;-1:-1:-1;;;35820:94:0;;11816:2:1;35820:94:0;;;11798:21:1;11855:2;11835:18;;;11828:30;11894:28;11874:18;;;11867:56;11940:18;;35820:94:0;11614:350:1;35820:94:0;-1:-1:-1;;;;;35947:12:0;;;;;;:4;:12;;;;;;;;35946:13;:33;;;;-1:-1:-1;;;;;;35964:15:0;;;;;;:4;:15;;;;;;;;35963:16;35946:33;35938:81;;;;-1:-1:-1;;;35938:81:0;;12171:2:1;35938:81:0;;;12153:21:1;12210:2;12190:18;;;12183:30;12249:34;12229:18;;;12222:62;-1:-1:-1;;;12300:18:1;;;12293:33;12343:19;;35938:81:0;11969:399:1;35938:81:0;36052:10;;36036:12;:26;;:44;;;;-1:-1:-1;36076:4:0;;-1:-1:-1;;;;;36066:14:0;;;36076:4;;36066:14;36036:44;:76;;;;-1:-1:-1;36105:6:0;;-1:-1:-1;;;;;36084:28:0;;;36105:6;;36084:28;;36036:76;:106;;;;-1:-1:-1;;;;;;36116:26:0;;36137:4;36116:26;;36036:106;36033:162;;;-1:-1:-1;;;;;36161:15:0;;;;;;:4;:15;;;;;:22;;-1:-1:-1;;36161:22:0;36179:4;36161:22;;;36033:162;36210:16;;-1:-1:-1;;;36210:16:0;;;;36207:73;;;36236:41;36251:6;36259:9;36270:6;36236:14;:41::i;:::-;36229:48;;;;36207:73;36309:4;;-1:-1:-1;;;;;36309:4:0;36295:10;:18;;;;:39;;-1:-1:-1;36318:16:0;;-1:-1:-1;;;36318:16:0;;;;36317:17;36295:39;:64;;;;-1:-1:-1;36338:21:0;;-1:-1:-1;;;36338:21:0;;;;36295:64;:109;;;;-1:-1:-1;36391:13:0;;36381:4;36363:24;;;;:9;:24;;;;;;:41;;36295:109;36292:128;;;36407:10;:8;:10::i;:::-;36452:53;;;;;;;;;;;-1:-1:-1;;;36452:53:0;;;;;;;;-1:-1:-1;;;;;36452:17:0;;-1:-1:-1;36452:17:0;;;:9;:17;;;;;;;;:53;;36474:6;;36452:21;:53::i;:::-;-1:-1:-1;;;;;36432:17:0;;;;;;:9;:17;;;;;;;;:73;;;;36549:11;:19;;;;;;;;36548:20;:47;;;;-1:-1:-1;;;;;;36573:22:0;;;;;;:11;:22;;;;;;;;36572:23;36548:47;:93;;36635:6;36548:93;;;36598:34;36606:6;36614:9;36625:6;36598:7;:34::i;:::-;-1:-1:-1;;;;;36675:20:0;;;;;;:9;:20;;;;;;36526:115;;-1:-1:-1;36675:37:0;;36526:115;36675:24;:37::i;:::-;-1:-1:-1;;;;;36652:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;36758:24;;;;;:16;:24;;;;;;;36754:119;;36803:11;;;-1:-1:-1;;;;;36832:17:0;;;;;;:9;:17;;;;;;;;36803:47;;-1:-1:-1;;;36803:47:0;;;;;12547:51:1;;;;12614:18;;;12607:34;;;;36803:11:0;;:20;;12520:18:1;;36803:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36799:63;;-1:-1:-1;;;;;36889:27:0;;;;;;:16;:27;;;;;;;;36885:129;;36937:11;;;-1:-1:-1;;;;;36969:20:0;;;;;;:9;:20;;;;;;;;36937:53;;-1:-1:-1;;;36937:53:0;;;;;12547:51:1;;;;12614:18;;;12607:34;;;;36937:11:0;;:20;;12520:18:1;;36937:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36933:69;;37030:11;;;37050:14;37030:35;;-1:-1:-1;;;;;;37030:35:0;;-1:-1:-1;;;;;37030:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;37030:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37026:51;37092:14;;-1:-1:-1;;;37092:14:0;;;;37089:1653;;;37154:10;;-1:-1:-1;;;;;37144:20:0;;;37154:10;;37144:20;;;;:64;;-1:-1:-1;37198:10:0;;-1:-1:-1;;;;;37185:23:0;;;37198:10;;37185:23;;37144:64;:108;;;;-1:-1:-1;;;;;;37229:23:0;;;;37144:108;:157;;;;-1:-1:-1;;;;;;37273:28:0;;37294:6;37273:28;;37144:157;:195;;;;-1:-1:-1;37323:16:0;;-1:-1:-1;;;37323:16:0;;;;37322:17;37144:195;37122:1609;;;37404:10;;-1:-1:-1;;;;;37394:20:0;;;37404:10;;37394:20;;;;:41;;-1:-1:-1;37431:4:0;;-1:-1:-1;;;;;37418:17:0;;;37431:4;;37418:17;;37394:41;:71;;;;;37455:10;;37439:12;:26;37394:71;37391:197;;;-1:-1:-1;;;;;37489:22:0;;;;;;:11;:22;;;;;;:29;;-1:-1:-1;;37489:29:0;37514:4;37489:29;;;37546:22;;;37489;37546;37391:197;37701:14;;;;:32;;;;-1:-1:-1;37729:4:0;;-1:-1:-1;;;;;37719:14:0;;;37729:4;;37719:14;37701:32;37697:146;;;37781:13;;37766:11;:28;;37758:65;;;;-1:-1:-1;;;37758:65:0;;12854:2:1;37758:65:0;;;12836:21:1;12893:2;12873:18;;;12866:30;12932:26;12912:18;;;12905:54;12976:18;;37758:65:0;12652:348:1;37758:65:0;38017:20;;-1:-1:-1;;;38017:20:0;;;;38013:439;;;38087:10;;-1:-1:-1;;;;;38066:32:0;;;38087:10;;38066:32;;;;:64;;-1:-1:-1;38123:6:0;;-1:-1:-1;;;;;38102:28:0;;;38123:6;;38102:28;;38066:64;:94;;;;-1:-1:-1;38155:4:0;;-1:-1:-1;;;;;38134:26:0;;;38155:4;;38134:26;;38066:94;38061:372;;;-1:-1:-1;;;;;38196:39:0;;;;;;:28;:39;;;;;;38238:12;-1:-1:-1;38188:140:0;;;;-1:-1:-1;;;38188:140:0;;13207:2:1;38188:140:0;;;13189:21:1;13246:2;13226:18;;;13219:30;13285:34;13265:18;;;13258:62;13356:34;13336:18;;;13329:62;-1:-1:-1;;;13407:19:1;;;13400:40;13457:19;;38188:140:0;13005:477:1;38188:140:0;-1:-1:-1;;;;;38355:39:0;;;;;;:28;:39;;;;;38397:12;38355:54;;38061:372;-1:-1:-1;;;;;38476:27:0;;;;;;:16;:27;;;;;;;;38472:158;;38589:10;;-1:-1:-1;;;;;38553:20:0;;;;;;:9;:20;;;;;;:32;;38578:6;38553:24;:32::i;:::-;:46;;38545:65;;;;-1:-1:-1;;;38545:65:0;;13689:2:1;38545:65:0;;;13671:21:1;13728:1;13708:18;;;13701:29;-1:-1:-1;;;13746:18:1;;;13739:36;13792:18;;38545:65:0;13487:329:1;38545:65:0;38668:12;;38658:6;:22;;:50;;;-1:-1:-1;;;;;;38684:24:0;;;;;;:16;:24;;;;;;;;38658:50;38650:65;;;;-1:-1:-1;;;38650:65:0;;14023:2:1;38650:65:0;;;14005:21:1;14062:1;14042:18;;;14035:29;-1:-1:-1;;;14080:18:1;;;14073:32;14122:18;;38650:65:0;13821:325:1;38650:65:0;-1:-1:-1;;;;;38856:19:0;;;;;;:11;:19;;;;;;;;:59;;;;;38900:15;38879:18;;:36;38856:59;38853:347;;;-1:-1:-1;;;;;38940:19:0;;;;;;:11;:19;;;;;;;;38939:20;;:61;;;38985:15;38963:18;;:37;;38939:61;38931:163;;;;-1:-1:-1;;;38931:163:0;;14353:2:1;38931:163:0;;;14335:21:1;14392:2;14372:18;;;14365:30;14431:34;14411:18;;;14404:62;14502:34;14482:18;;;14475:62;14574:27;14553:19;;;14546:56;14619:19;;38931:163:0;14151:493:1;38931:163:0;39120:8;;:12;;39131:1;39120:12;:::i;:::-;39109:8;:23;39167:17;;:21;;39187:1;39167:21;:::i;:::-;39147:17;:41;38853:347;39236:9;-1:-1:-1;;;;;39219:40:0;39228:6;-1:-1:-1;;;;;39219:40:0;;39247:11;39219:40;;;;160:25:1;;148:2;133:18;;14:177;39219:40:0;;;;;;;;-1:-1:-1;39277:4:0;;35680:3609;-1:-1:-1;;;;35680:3609:0:o;7790:98::-;7848:7;7875:5;7879:1;7875;:5;:::i;39301:330::-;39431:53;;;;;;;;;;;-1:-1:-1;;;39431:53:0;;;;;;;;-1:-1:-1;;;;;39431:17:0;;39394:4;39431:17;;;:9;:17;;;;;;;:53;;39453:6;;39431:21;:53::i;:::-;-1:-1:-1;;;;;39411:17:0;;;;;;;:9;:17;;;;;;:73;;;;39518:20;;;;;;;:32;;39543:6;39518:24;:32::i;:::-;-1:-1:-1;;;;;39495:20:0;;;;;;;:9;:20;;;;;;;:55;;;;39566:35;;;;;;;;;;39594:6;160:25:1;;148:2;133:18;;14:177;39566:35:0;;;;;;;;-1:-1:-1;39619:4:0;39301:330;;;;;:::o;41933:1410::-;26336:16;:23;;-1:-1:-1;;;;26336:23:0;-1:-1:-1;;;26336:23:0;;;42039:4:::1;26336:23:::0;42021:24;;;:9:::1;:24;::::0;;;;;;;42109:8:::1;::::0;42021:24;;26336:23;42082:43:::1;::::0;:36:::1;::::0;;42021:24;26336:23;42082:19:::1;:22::i;:::-;:26:::0;::::1;:36::i;:43::-;42056:69:::0;-1:-1:-1;42136:20:0::1;42159:36;:15:::0;42056:69;42159:19:::1;:36::i;:::-;42232:16;::::0;;42246:1:::1;42232:16:::0;;;;;::::1;::::0;;42136:59;;-1:-1:-1;42208:21:0::1;::::0;42232:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;42232:16:0::1;42208:40;;42277:4;42259;42264:1;42259:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42259:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;42303:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;42303:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;42259:7;;42303:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42293:4;42298:1;42293:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42293:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;42329:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;42329:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;42401:12;;42329:6:::1;::::0;42444:4;;42471::::1;::::0;42491:15:::1;::::0;42329:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42530:17;42550:21;42530:41;;42582:18;42603:42;42636:8;;42603:28;42617:13;;42603:9;:13;;:28;;;;:::i;:42::-;42582:63;;42658:26;42687:37;42722:1;42687:30;42708:8;;42687:16;42701:1;42687:9;:13;;:16;;;;:::i;:37::-;42658:66:::0;-1:-1:-1;42735:27:0::1;42765:49;42658:66:::0;42765:25:::1;:9:::0;42779:10;42765:13:::1;:25::i;:49::-;42735:79:::0;-1:-1:-1;42832:13:0;;42829:83:::1;;42872:7;::::0;:28:::1;::::0;-1:-1:-1;;;;;42872:7:0;;::::1;::::0;:28;::::1;;;::::0;42889:10;;42872:7:::1;:28:::0;:7;:28;42889:10;42872:7;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42829:83;42936:11;::::0;::::1;;;;;;-1:-1:-1::0;;;;;42936:11:0::1;-1:-1:-1::0;;;;;42936:19:0::1;;42963;42936:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;42932:65:::0;43012:19;;43009:315:::1;;43047:6;::::0;:265:::1;::::0;-1:-1:-1;;;43047:265:0;;43123:4:::1;43047:265;::::0;::::1;16534:34:1::0;16584:18;;;16577:34;;;43047:6:0::1;16627:18:1::0;;;16620:34;;;16670:18;;;16663:34;43221:42:0::1;16713:19:1::0;;;16706:44;43282:15:0::1;16766:19:1::0;;;16759:35;-1:-1:-1;;;;;43047:6:0;;::::1;::::0;:22:::1;::::0;43077:18;;16468:19:1;;43047:265:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43009:315;-1:-1:-1::0;;26382:16:0;:24;;-1:-1:-1;;;;26382:24:0;;;-1:-1:-1;;;;;;41933:1410:0:o;9688:240::-;9808:7;9869:12;9861:6;;;;9853:29;;;;-1:-1:-1;;;9853:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;9904:5:0;;;9688:240::o;41486:439::-;41626:4;;41572:7;;;;-1:-1:-1;;;;;41626:17:0;;;:4;;:17;:48;;41666:8;;41626:48;;;41646:17;;41626:48;41602:72;-1:-1:-1;41685:17:0;41705:34;41735:3;41705:25;:6;41602:72;41705:10;:25::i;:34::-;41797:4;41779:24;;;;:9;:24;;;;;;41685:54;;-1:-1:-1;41779:39:0;;41685:54;41779:28;:39::i;:::-;41770:4;41752:24;;;;:9;:24;;;;;;;:66;;;;41834:42;;-1:-1:-1;;;;;41834:42:0;;;;;;;41866:9;160:25:1;;148:2;133:18;;14:177;41834:42:0;;;;;;;;41896:21;:6;41907:9;41896:10;:21::i;:::-;41889:28;41486:439;-1:-1:-1;;;;;;41486:439:0:o;8147:98::-;8205:7;8232:5;8236:1;8232;:5;:::i;8546:98::-;8604:7;8631:5;8635:1;8631;:5;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:1:o;1585:180::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;-1:-1:-1;1736:23:1;;1585:180;-1:-1:-1;1585:180:1:o;1994:456::-;2071:6;2079;2087;2140:2;2128:9;2119:7;2115:23;2111:32;2108:52;;;2156:1;2153;2146:12;2108:52;2195:9;2182:23;2214:31;2239:5;2214:31;:::i;:::-;2264:5;-1:-1:-1;2321:2:1;2306:18;;2293:32;2334:33;2293:32;2334:33;:::i;:::-;1994:456;;2386:7;;-1:-1:-1;;;2440:2:1;2425:18;;;;2412:32;;1994:456::o;2455:248::-;2523:6;2531;2584:2;2572:9;2563:7;2559:23;2555:32;2552:52;;;2600:1;2597;2590:12;2552:52;-1:-1:-1;;2623:23:1;;;2693:2;2678:18;;;2665:32;;-1:-1:-1;2455:248:1:o;2897:255::-;2964:6;3017:2;3005:9;2996:7;2992:23;2988:32;2985:52;;;3033:1;3030;3023:12;2985:52;3072:9;3059:23;3091:31;3116:5;3091:31;:::i;3157:160::-;3222:20;;3278:13;;3271:21;3261:32;;3251:60;;3307:1;3304;3297:12;3322:248;3387:6;3395;3448:2;3436:9;3427:7;3423:23;3419:32;3416:52;;;3464:1;3461;3454:12;3416:52;3487:26;3503:9;3487:26;:::i;4063:385::-;4149:6;4157;4165;4173;4226:3;4214:9;4205:7;4201:23;4197:33;4194:53;;;4243:1;4240;4233:12;4194:53;-1:-1:-1;;4266:23:1;;;4336:2;4321:18;;4308:32;;-1:-1:-1;4387:2:1;4372:18;;4359:32;;4438:2;4423:18;4410:32;;-1:-1:-1;4063:385:1;-1:-1:-1;4063:385:1:o;4453:127::-;4514:10;4509:3;4505:20;4502:1;4495:31;4545:4;4542:1;4535:15;4569:4;4566:1;4559:15;4585:1121;4669:6;4700:2;4743;4731:9;4722:7;4718:23;4714:32;4711:52;;;4759:1;4756;4749:12;4711:52;4799:9;4786:23;4828:18;4869:2;4861:6;4858:14;4855:34;;;4885:1;4882;4875:12;4855:34;4923:6;4912:9;4908:22;4898:32;;4968:7;4961:4;4957:2;4953:13;4949:27;4939:55;;4990:1;4987;4980:12;4939:55;5026:2;5013:16;5048:2;5044;5041:10;5038:36;;;5054:18;;:::i;:::-;5100:2;5097:1;5093:10;5132:2;5126:9;5195:2;5191:7;5186:2;5182;5178:11;5174:25;5166:6;5162:38;5250:6;5238:10;5235:22;5230:2;5218:10;5215:18;5212:46;5209:72;;;5261:18;;:::i;:::-;5297:2;5290:22;5347:18;;;5381:15;;;;-1:-1:-1;5423:11:1;;;5419:20;;;5451:19;;;5448:39;;;5483:1;5480;5473:12;5448:39;5507:11;;;;5527:148;5543:6;5538:3;5535:15;5527:148;;;5609:23;5628:3;5609:23;:::i;:::-;5597:36;;5560:12;;;;5653;;;;5527:148;;;5694:6;4585:1121;-1:-1:-1;;;;;;;;4585:1121:1:o;5711:315::-;5776:6;5784;5837:2;5825:9;5816:7;5812:23;5808:32;5805:52;;;5853:1;5850;5843:12;5805:52;5892:9;5879:23;5911:31;5936:5;5911:31;:::i;:::-;5961:5;-1:-1:-1;5985:35:1;6016:2;6001:18;;5985:35;:::i;:::-;5975:45;;5711:315;;;;;:::o;6239:388::-;6307:6;6315;6368:2;6356:9;6347:7;6343:23;6339:32;6336:52;;;6384:1;6381;6374:12;6336:52;6423:9;6410:23;6442:31;6467:5;6442:31;:::i;:::-;6492:5;-1:-1:-1;6549:2:1;6534:18;;6521:32;6562:33;6521:32;6562:33;:::i;:::-;6614:7;6604:17;;;6239:388;;;;;:::o;6866:380::-;6945:1;6941:12;;;;6988;;;7009:61;;7063:4;7055:6;7051:17;7041:27;;7009:61;7116:2;7108:6;7105:14;7085:18;7082:38;7079:161;;7162:10;7157:3;7153:20;7150:1;7143:31;7197:4;7194:1;7187:15;7225:4;7222:1;7215:15;7079:161;;6866:380;;;:::o;7251:356::-;7453:2;7435:21;;;7472:18;;;7465:30;7531:34;7526:2;7511:18;;7504:62;7598:2;7583:18;;7251:356::o;7865:127::-;7926:10;7921:3;7917:20;7914:1;7907:31;7957:4;7954:1;7947:15;7981:4;7978:1;7971:15;7997:128;8037:3;8068:1;8064:6;8061:1;8058:13;8055:39;;;8074:18;;:::i;:::-;-1:-1:-1;8110:9:1;;7997:128::o;8812:127::-;8873:10;8868:3;8864:20;8861:1;8854:31;8904:4;8901:1;8894:15;8928:4;8925:1;8918:15;8944:135;8983:3;9004:17;;;9001:43;;9024:18;;:::i;:::-;-1:-1:-1;9071:1:1;9060:13;;8944:135::o;14649:168::-;14689:7;14755:1;14751;14747:6;14743:14;14740:1;14737:21;14732:1;14725:9;14718:17;14714:45;14711:71;;;14762:18;;:::i;:::-;-1:-1:-1;14802:9:1;;14649:168::o;14822:125::-;14862:4;14890:1;14887;14884:8;14881:34;;;14895:18;;:::i;:::-;-1:-1:-1;14932:9:1;;14822:125::o;14952:251::-;15022:6;15075:2;15063:9;15054:7;15050:23;15046:32;15043:52;;;15091:1;15088;15081:12;15043:52;15123:9;15117:16;15142:31;15167:5;15142:31;:::i;15208:980::-;15470:4;15518:3;15507:9;15503:19;15549:6;15538:9;15531:25;15575:2;15613:6;15608:2;15597:9;15593:18;15586:34;15656:3;15651:2;15640:9;15636:18;15629:31;15680:6;15715;15709:13;15746:6;15738;15731:22;15784:3;15773:9;15769:19;15762:26;;15823:2;15815:6;15811:15;15797:29;;15844:1;15854:195;15868:6;15865:1;15862:13;15854:195;;;15933:13;;-1:-1:-1;;;;;15929:39:1;15917:52;;16024:15;;;;15989:12;;;;15965:1;15883:9;15854:195;;;-1:-1:-1;;;;;;;16105:32:1;;;;16100:2;16085:18;;16078:60;-1:-1:-1;;;16169:3:1;16154:19;16147:35;16066:3;15208:980;-1:-1:-1;;;15208:980:1:o;16805:306::-;16893:6;16901;16909;16962:2;16950:9;16941:7;16937:23;16933:32;16930:52;;;16978:1;16975;16968:12;16930:52;17007:9;17001:16;16991:26;;17057:2;17046:9;17042:18;17036:25;17026:35;;17101:2;17090:9;17086:18;17080:25;17070:35;;16805:306;;;;;:::o;17116:217::-;17156:1;17182;17172:132;;17226:10;17221:3;17217:20;17214:1;17207:31;17261:4;17258:1;17251:15;17289:4;17286:1;17279:15;17172:132;-1:-1:-1;17318:9:1;;17116:217::o
Swarm Source
ipfs://1836c2d0122f2dc205ca94f1373f71a96c3877c7bec1c6b136fafdfb9706af59
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.