Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
2,000,000,000 CZSEC
Holders
18
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CZSECINU
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-07 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/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 no longer needed starting with Solidity 0.8. 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: CZSECINU.sol pragma solidity ^0.8.7; /** * @dev Interfaces */ interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01{ function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); /** * @dev Moves `amount` tokens from `from` to `to` 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 from, address to, 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); } /** * @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); } contract CZSECINU is Context, IERC20, IERC20Metadata, Ownable { receive() external payable {} event SendNative(bool _wallet); using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 _totalSupply; string private _name; string private _symbol; uint8 private _decimals; // fees & addresses mapping (string => uint) txFees; mapping (address => bool) public feeExempt; mapping (address => bool) public wl; bool public tradeOpen; mapping (address => bool) public txLimitExempt; address public farmingAddress = msg.sender; address public taxAddress = msg.sender; address public nativeTokenAddress = msg.sender; // taxes for differnet levels struct TokenFee { uint forMarketing; uint forDev; uint forFarming; } struct TxLimit { uint maxWallet; uint buyLimit; uint sellLimit; uint cooldown; bool inactive; mapping(address => uint) buys; mapping(address => uint) sells; mapping(address => uint) lastTx; } TxLimit txLimits; struct SwapToken { uint swapTokensAt; uint lastSwap; uint swapDelay; uint minToSend; } SwapToken public swapTokens; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; constructor() { _name = "CZ SEC INU"; _symbol = "CZSEC"; _decimals = 18; _totalSupply = 2_000_000_000 * (10 ** decimals()); feeExempt[msg.sender] = true; txLimitExempt[msg.sender] = true; wl[msg.sender] = true; feeExempt[address(this)] = true; txLimitExempt[address(this)] = true; feeExempt[farmingAddress] = true; txLimitExempt[farmingAddress] = true; feeExempt[taxAddress] = true; txLimitExempt[taxAddress] = true; feeExempt[nativeTokenAddress] = true; txLimitExempt[nativeTokenAddress] = true; /** Set default buy/sell tx fees (no tax on transfers) - marketing, dev, liqudity, farming */ txFees["marketingBuy"] = 0; // 1% txFees["liqBuy"] = 0; txFees["farmingBuy"] = 0; txFees["marketingSell"] = 0; txFees["liqSell"] = 0; txFees["farmingSell"] = 0; /** Set default tx limits - Cooldown, buy limit, sell limit */ txLimits.cooldown = 30 seconds; txLimits.buyLimit = _totalSupply.div(100); txLimits.sellLimit = _totalSupply.div(100); txLimits.maxWallet = _totalSupply.div(100); swapTokens.swapTokensAt = _totalSupply.div(1394); // 0.1% swapTokens.minToSend = 1 ether; swapTokens.swapDelay = 1 minutes; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; _approve(address(this), address(uniswapV2Router), _totalSupply); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); approve(address(uniswapV2Router), _totalSupply); feeExempt[address(uniswapV2Router)] = true; wl[address(uniswapV2Router)] = true; wl[uniswapV2Pair] = true; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } event Fees( uint _marketingBuy, uint _liqBuy, uint _farmingBuy, uint _marketingSell, uint _liqSell, uint _farmingSell ); function setFees( uint _marketingBuy, uint _liqBuy, uint _farmingBuy, uint _marketingSell, uint _liqSell, uint _farmingSell ) external onlyOwner { require(_marketingBuy <= 1500, "Marketing fee is too high!"); require(_liqBuy <= 1500, "Dev fee is too high!"); require(_farmingBuy <= 1500, "Farming fee is too high!"); require(_marketingSell <= 1500, "Marketing fee is too high!"); require(_liqSell <= 1500, "Dev fee is too high!"); require(_farmingSell <= 1500, "Farming fee is too high!"); txFees["marketingBuy"] = _marketingBuy; txFees["liqBuy"] = _liqBuy; txFees["farmingBuy"] = _farmingBuy; txFees["marketingSell"] = _marketingSell; txFees["liqSell"] = _liqSell; txFees["farmingSell"] = _farmingSell; emit Fees( _marketingBuy, _liqBuy, _farmingBuy, _marketingSell, _liqSell, _farmingSell ); } /** Returns buy/sell transaction fees */ function getFees() public view returns( uint marketingBuy, uint liqBuy, uint farmingBuy, uint marketingSell, uint liqSell, uint farmingSell ) { return ( txFees["marketingBuy"], txFees["liqBuy"], txFees["farmingBuy"], txFees["marketingSell"], txFees["liqSell"], txFees["farmingSell"] ); } /** Sets the tax collector contracts */ function setTaxAddress(address _farmingAddress, address _taxAddress, address _nativeTokenAddress) external onlyOwner { farmingAddress = _farmingAddress; taxAddress = _taxAddress; nativeTokenAddress = _nativeTokenAddress; } /** addWL */ function addWl(address[] memory _wl) external onlyOwner { for(uint i; i < _wl.length; i++) { wl[_wl[i]] = true; } } /** openTrade */ function openTrade() external onlyOwner { tradeOpen = true; } /** Sets the tax free trading for the specific address */ function setFeeExempt(address _address, bool _value) external onlyOwner { feeExempt[_address] = _value; } /** Sets the limit free trading for the specific address */ function setTxLimitExempt(address _address, bool _value) external onlyOwner { txLimitExempt[_address] = _value; } /** Sets the sell/buy limits & cooldown period */ function setTxLimits(uint _buyLimit, uint _sellLimit, uint _cooldown, bool _inactive, uint _maxWallet) external onlyOwner { require(_buyLimit >= _totalSupply.div(200), "Buy transaction limit is too low!"); // 0.5% require(_sellLimit >= _totalSupply.div(400), "Sell transaction limit is too low!"); // 0.25% require(_cooldown <= 30 minutes, "Cooldown should be 30 minutes or less!"); require(_maxWallet > _totalSupply.div(1000), "Max wallet low"); txLimits.buyLimit = _buyLimit; txLimits.sellLimit = _sellLimit; txLimits.cooldown = _cooldown; txLimits.inactive = _inactive; txLimits.maxWallet = _maxWallet; } /** Sell tokens at */ function setSwapTokens(uint _swapTokensAt, uint _lastSwap, uint _delay, uint _minToSend) external onlyOwner { swapTokens.swapTokensAt = _swapTokensAt; swapTokens.lastSwap = _lastSwap; swapTokens.swapDelay = _delay; swapTokens.minToSend = _minToSend; } /** Returns the sell/buy limits & cooldown period */ function getTxLimits() public view returns(uint buyLimit, uint sellLimit, uint cooldown, bool inactive) { return (txLimits.buyLimit, txLimits.sellLimit, txLimits.cooldown, txLimits.inactive); } /** Checks the BUY transaction limits for the specific user with the sent amount */ function checkBuyTxLimit(address _sender, uint256 _amount) internal view { require( (txLimits.inactive == true || txLimitExempt[_sender] == true) || txLimits.maxWallet > IERC20(address(this)).balanceOf(_sender) + _amount && (txLimits.buys[_sender].add(_amount) < txLimits.buyLimit || (txLimits.buys[_sender].add(_amount) > txLimits.buyLimit && txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp)), "Buy transaction limit reached!" ); } /** Checks the SELL transaction limits for the specific user with the sent amount */ function checkSellTxLimit(address _sender, uint256 _amount) internal view { require( txLimits.inactive == true || txLimitExempt[_sender] == true || txLimits.sells[_sender].add(_amount) < txLimits.sellLimit || (txLimits.sells[_sender].add(_amount) > txLimits.sellLimit && txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp), "Sell transaction limit reached!" ); } /** Saves the recent buy/sell transactions The function used by _transfer() when the cooldown/tx limit is active */ function setRecentTx(bool _isSell, address _sender, uint _amount) internal { if(txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp) { _isSell ? txLimits.sells[_sender] = _amount : txLimits.buys[_sender] = _amount; } else { _isSell ? txLimits.sells[_sender] += _amount : txLimits.buys[_sender] += _amount; } txLimits.lastTx[_sender] = block.timestamp; } /** Returns the recent buys, sells and the last transaction for the specific wallet */ function getRecentTx(address _address) public view returns(uint buys, uint sells, uint lastTx) { return (txLimits.buys[_address], txLimits.sells[_address], txLimits.lastTx[_address]); } /** Automatic swap */ function swapTokensForNative(uint256 _amount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), _amount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( _amount, 0, path, address(this), block.timestamp ); } function manualSwapTokensForNative(uint256 _amount) external onlyOwner { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), _amount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( _amount, 0, path, address(this), block.timestamp ); } function manualSendNative() external onlyOwner { uint256 contractNativeBalance = address(this).balance; sendNativeTokens(contractNativeBalance); } function sendNativeTokens(uint256 _amount) private { (bool success, ) = payable(nativeTokenAddress).call{value: _amount.div(3)}(""); (bool success2, ) = payable(farmingAddress).call{value: _amount.div(3)}(""); (bool success3, ) = payable(taxAddress).call{value: _amount.div(3)}(""); emit SendNative(success); emit SendNative(success2); emit SendNative(success3); } function withdrawAnyToken(address payable _to, IERC20 _token) public onlyOwner { _token.transfer(_to, _token.balanceOf(address(this))); } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } 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) public 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) public 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 ) public 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) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(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) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); uint marketingFee; uint devFee; uint farmingFee; bool hasFees = true; // BUY if(from == uniswapV2Pair) { require(tradeOpen || wl[to], "Trade is not open!"); // Add bots to blacklist before launch on buy checkBuyTxLimit(to, amount); setRecentTx(false, to, amount); marketingFee = txFees["marketingBuy"]; devFee = txFees["liqBuy"]; farmingFee = txFees["farmingBuy"]; } // SELL else if(to == uniswapV2Pair) { checkSellTxLimit(from, amount); setRecentTx(true, from, amount); marketingFee = txFees["marketingSell"]; devFee = txFees["liqSell"]; farmingFee = txFees["farmingSell"]; } unchecked { _balances[from] = fromBalance - amount; } if(feeExempt[to] || feeExempt[from]) { hasFees = false; } if(hasFees && (to == uniswapV2Pair || from == uniswapV2Pair)) { TokenFee memory TokenFees; TokenFees.forMarketing = amount.mul(marketingFee).div(10000); TokenFees.forDev = amount.mul(devFee).div(10000); TokenFees.forFarming = amount.mul(farmingFee).div(10000); uint totalFees = TokenFees.forMarketing .add(TokenFees.forDev) .add(TokenFees.forFarming); amount = amount.sub(totalFees); _balances[address(this)] += totalFees; // dev, lp, marketing fees emit Transfer(from, address(this), totalFees); // If active we do swap uint256 contractTokenBalance = _balances[address(this)]; if ( contractTokenBalance > swapTokens.swapTokensAt && block.timestamp > swapTokens.lastSwap + swapTokens.swapDelay && to == uniswapV2Pair ) { // Balance can be 10% more if(contractTokenBalance > swapTokens.swapTokensAt.mul(1100).div(1000)) { swapTokensForNative(swapTokens.swapTokensAt); } else { swapTokensForNative(contractTokenBalance); } swapTokens.lastSwap = block.timestamp; uint256 contractNativeBalance = address(this).balance; if(contractNativeBalance > swapTokens.minToSend) { sendNativeTokens(contractNativeBalance); } } } _balances[to] += amount; emit Transfer(from, to, amount); } /** * @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 Updates `owner` s allowance for `spender` based on spent `amount`. * * 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); } } } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liqSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"Fees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_wallet","type":"bool"}],"name":"SendNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_wl","type":"address[]"}],"name":"addWl","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liqBuy","type":"uint256"},{"internalType":"uint256","name":"farmingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liqSell","type":"uint256"},{"internalType":"uint256","name":"farmingSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRecentTx","outputs":[{"internalType":"uint256","name":"buys","type":"uint256"},{"internalType":"uint256","name":"sells","type":"uint256"},{"internalType":"uint256","name":"lastTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTxLimits","outputs":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"uint256","name":"cooldown","type":"uint256"},{"internalType":"bool","name":"inactive","type":"bool"}],"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":[],"name":"manualSendNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualSwapTokensForNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"},{"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"_lastSwap","type":"uint256"},{"internalType":"uint256","name":"_delay","type":"uint256"},{"internalType":"uint256","name":"_minToSend","type":"uint256"}],"name":"setSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_farmingAddress","type":"address"},{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"address","name":"_nativeTokenAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLimit","type":"uint256"},{"internalType":"uint256","name":"_sellLimit","type":"uint256"},{"internalType":"uint256","name":"_cooldown","type":"uint256"},{"internalType":"bool","name":"_inactive","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokens","outputs":[{"internalType":"uint256","name":"swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"lastSwap","type":"uint256"},{"internalType":"uint256","name":"swapDelay","type":"uint256"},{"internalType":"uint256","name":"minToSend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeOpen","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":[{"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"txLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"withdrawAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790553480156200003d57600080fd5b50620000493362000627565b60408051808201909152600a815269435a2053454320494e5560b01b602082015260049062000079908262000879565b5060408051808201909152600580825264435a53454360d81b602083015290620000a4908262000879565b506006805460ff19166012908117909155620000c290600a62000a58565b620000d290637735940062000a69565b6003553360009081526008602081815260408084208054600160ff199182168117909255600b808552838720805483168417905560098552838720805483168417905530875285855283872080548316841790558085528387208054831684179055600c80546001600160a01b03908116895287875285892080548516861790558154811689528287528589208054851686179055600d805482168a52888852868a20805486168717905554811689528287528589208054851686179055600e805482168a52978752858920805485168617905596549096168752909352818520805490931617909155516b6d61726b6574696e6742757960a01b81526007910190815260405190819003602001812091909155656c697142757960d01b815260009060079060060190815260405190819003602001812091909155696661726d696e6742757960b01b8152600090600790600a01908152604051908190036020018120919091556c1b585c9ad95d1a5b99d4d95b1b609a1b8152600090600790600d0190815260405190819003602001812091909155661b1a5c54d95b1b60ca1b81526000906007908101908152604051908190036020018120919091556a19985c9b5a5b99d4d95b1b60aa1b8152600090600790600b019081526040516020918190038201902091909155601e601255600354620002de9160649062000677811b620013eb17901c565b601055600354620002fd90606462000677602090811b620013eb17901c565b6011556003546200031c90606462000677602090811b620013eb17901c565b600f556003546200033c9061057262000677602090811b620013eb17901c565b601755670de0b6b3a7640000601a55603c601955601b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556003546200038b90309083906200068e565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062000a83565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000a83565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d8919062000a83565b601c80546001600160a01b0319166001600160a01b03928316908117909155601b5460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000540573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000566919062000ab5565b50601b5460035462000582916001600160a01b031690620007ba565b50601b80546001600160a01b0390811660009081526008602090815260408083208054600160ff199182168117909255955485168452600983528184208054871682179055601c54909416835280832080549095168417909455600354338084529382528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000afc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600062000685828462000ad9565b90505b92915050565b6001600160a01b038316620006f65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006ed565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600033620007ca8185856200068e565b5060019392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ff57607f821691505b6020821081036200082057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200087457600081815260208120601f850160051c810160208610156200084f5750805b601f850160051c820191505b8181101562000870578281556001016200085b565b5050505b505050565b81516001600160401b03811115620008955762000895620007d4565b620008ad81620008a68454620007ea565b8462000826565b602080601f831160018114620008e55760008415620008cc5750858301515b600019600386901b1c1916600185901b17855562000870565b600085815260208120601f198616915b828110156200091657888601518255948401946001909101908401620008f5565b5085821015620009355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200099c57816000190482111562000980576200098062000945565b808516156200098e57918102915b93841c939080029062000960565b509250929050565b600082620009b55750600162000688565b81620009c45750600062000688565b8160018114620009dd5760028114620009e85762000a08565b600191505062000688565b60ff841115620009fc57620009fc62000945565b50506001821b62000688565b5060208310610133831016604e8410600b841016171562000a2d575081810a62000688565b62000a3983836200095b565b806000190482111562000a505762000a5062000945565b029392505050565b60006200068560ff841683620009a4565b808202811582820484141762000688576200068862000945565b60006020828403121562000a9657600080fd5b81516001600160a01b038116811462000aae57600080fd5b9392505050565b60006020828403121562000ac857600080fd5b8151801515811462000aae57600080fd5b60008262000af757634e487b7160e01b600052601260045260246000fd5b500490565b6127f38062000b0c6000396000f3fe6080604052600436106102335760003560e01c80634d0047ee1161012e5780638da5cb5b116100ab578063b7bda68f1161006f578063b7bda68f14610757578063db8d55f114610777578063dd62ed3e146107b9578063f2fde38b146107d9578063fb201b1d146107f957600080fd5b80638da5cb5b146106c45780638ebfc796146106e257806395d89b4114610702578063a457c2d714610717578063a9059cbb1461073757600080fd5b8063715018a6116100f2578063715018a61461060c57806373d002241461062157806386f6c3c1146106645780638a2ade58146106845780638d7a8ba7146106a457600080fd5b80634d0047ee14610556578063526731e61461057657806361b97324146105965780636519aa24146105b657806370a08231146105d657600080fd5b80632d486248116101bc578063398daa8511610180578063398daa85146104b15780634195932b146104e157806342966c681461050157806349bd5a5e1461052157806349d3c1351461054157600080fd5b80632d486248146103ef5780632fee9e7e1461040f578063313ce5671461043f578063361f4fb414610461578063395093511461049157600080fd5b80631694505e116102035780631694505e1461033c57806317f5904c1461037457806318160ddd1461039657806323b872dd146103b557806325fa0b98146103d557600080fd5b806220a4031461023f57806303f3d310146102ac57806306fdde03146102ea578063095ea7b31461030c57600080fd5b3661023a57005b600080fd5b34801561024b57600080fd5b5061028c61025a3660046122d1565b6001600160a01b0316600090815260146020908152604080832054601583528184205460169093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b3480156102b857600080fd5b5060105460115460125460135460ff1660408051948552602085019390935291830152151560608201526080016102a3565b3480156102f657600080fd5b506102ff61080e565b6040516102a391906122ee565b34801561031857600080fd5b5061032c61032736600461233c565b6108a0565b60405190151581526020016102a3565b34801561034857600080fd5b50601b5461035c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561038057600080fd5b5061039461038f36600461237e565b6108ba565b005b3480156103a257600080fd5b506003545b6040519081526020016102a3565b3480156103c157600080fd5b5061032c6103d0366004612443565b61092e565b3480156103e157600080fd5b50600a5461032c9060ff1681565b3480156103fb57600080fd5b5061039461040a366004612484565b610952565b34801561041b57600080fd5b5061032c61042a3660046122d1565b60096020526000908152604090205460ff1681565b34801561044b57600080fd5b5060065460405160ff90911681526020016102a3565b34801561046d57600080fd5b5061032c61047c3660046122d1565b600b6020526000908152604090205460ff1681565b34801561049d57600080fd5b5061032c6104ac36600461233c565b610999565b3480156104bd57600080fd5b5061032c6104cc3660046122d1565b60086020526000908152604090205460ff1681565b3480156104ed57600080fd5b506103946104fc3660046124dd565b6109bb565b34801561050d57600080fd5b5061039461051c366004612526565b610b6c565b34801561052d57600080fd5b50601c5461035c906001600160a01b031681565b34801561054d57600080fd5b50610394610b79565b34801561056257600080fd5b50600e5461035c906001600160a01b031681565b34801561058257600080fd5b5061039461059136600461253f565b610b8b565b3480156105a257600080fd5b506103946105b1366004612578565b610c79565b3480156105c257600080fd5b506103946105d1366004612526565b610c95565b3480156105e257600080fd5b506103a76105f13660046122d1565b6001600160a01b031660009081526001602052604090205490565b34801561061857600080fd5b50610394610df7565b34801561062d57600080fd5b50601754601854601954601a546106449392919084565b6040805194855260208501939093529183015260608201526080016102a3565b34801561067057600080fd5b5061039461067f3660046125aa565b610e0b565b34801561069057600080fd5b50600c5461035c906001600160a01b031681565b3480156106b057600080fd5b506103946106bf3660046125ed565b611129565b3480156106d057600080fd5b506000546001600160a01b031661035c565b3480156106ee57600080fd5b506103946106fd3660046125ed565b61115c565b34801561070e57600080fd5b506102ff61118f565b34801561072357600080fd5b5061032c61073236600461233c565b61119e565b34801561074357600080fd5b5061032c61075236600461233c565b611219565b34801561076357600080fd5b50600d5461035c906001600160a01b031681565b34801561078357600080fd5b5061078c611227565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102a3565b3480156107c557600080fd5b506103a76107d436600461253f565b611333565b3480156107e557600080fd5b506103946107f43660046122d1565b61135e565b34801561080557600080fd5b506103946113d4565b60606004805461081d9061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546108499061261b565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae8185856113fe565b60019150505b92915050565b6108c2611523565b60005b815181101561092a576001600960008484815181106108e6576108e6612655565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061092281612681565b9150506108c5565b5050565b60003361093c85828561157d565b6109478585856115f7565b506001949350505050565b61095a611523565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6000336108ae8185856109ac8383611333565b6109b6919061269a565b6113fe565b6109c3611523565b6003546109d19060c86113eb565b851015610a2f5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610a3e906101906113eb565b841015610a985760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610a26565b610708831115610af95760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610a26565b600354610b08906103e86113eb565b8111610b475760405162461bcd60e51b815260206004820152600e60248201526d4d61782077616c6c6574206c6f7760901b6044820152606401610a26565b6010949094556011929092556012556013805460ff1916911515919091179055600f55565b610b763382611bb0565b50565b610b81611523565b47610b7681611cdc565b610b93611523565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906126ad565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7491906126c6565b505050565b610c81611523565b601793909355601891909155601955601a55565b610c9d611523565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610cd257610cd2612655565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f91906126e3565b81600181518110610d6257610d62612655565b6001600160a01b039283166020918202929092010152601b54610d8891309116846113fe565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790610dc1908590600090869030904290600401612700565b600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050505050565b610dff611523565b610e096000611ea6565b565b610e13611523565b6105dc861115610e655760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610a26565b6105dc851115610eae5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610a26565b6105dc841115610efb5760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610a26565b6105dc831115610f4d5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610a26565b6105dc821115610f965760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610a26565b6105dc811115610fe35760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610a26565b856007604051611005906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b611131611523565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b611164611523565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60606005805461081d9061261b565b600033816111ac8286611333565b90508381101561120c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a26565b61094782868684036113fe565b6000336108ae8185856115f7565b6000806000806000806007604051611251906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b611366611523565b6001600160a01b0381166113cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a26565b610b7681611ea6565b6113dc611523565b600a805460ff19166001179055565b60006113f78284612771565b9392505050565b6001600160a01b0383166114605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a26565b6001600160a01b0382166114c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a26565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610e095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a26565b60006115898484611333565b905060001981146115f157818110156115e45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a26565b6115f184848484036113fe565b50505050565b6001600160a01b03831661165b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a26565b6001600160a01b0382166116bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a26565b6001600160a01b038316600090815260016020526040902054818110156117355760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a26565b601c54600090819081906001906001600160a01b039081169089160361185257600a5460ff168061177e57506001600160a01b03871660009081526009602052604090205460ff165b6117bf5760405162461bcd60e51b81526020600482015260126024820152715472616465206973206e6f74206f70656e2160701b6044820152606401610a26565b6117c98787611ef6565b6117d56000888861207f565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506118f9565b601c546001600160a01b03908116908816036118f957611872888761217d565b61187e6001898861207f565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061194b57506001600160a01b03881660009081526008602052604090205460ff165b15611954575060005b8080156119855750601c546001600160a01b03888116911614806119855750601c546001600160a01b038981169116145b15611b2a576119ae60405180606001604052806000815260200160008152602001600081525090565b6119c46127106119be8988612288565b906113eb565b81526119d66127106119be8987612288565b60208201526119eb6127106119be8986612288565b6040820181905260208201518251600092611a11929091611a0b91612294565b90612294565b9050611a1d88826122a0565b3060009081526001602052604081208054929a508392909190611a4190849061269a565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526001602052604090205460175481118015611ab55750601954601854611ab2919061269a565b42115b8015611ace5750601c546001600160a01b038b81169116145b15611b2657601754611aea906103e8906119be9061044c612288565b811115611b0257601754611afd90610c9d565b611b0b565b611b0b81610c9d565b42601855601a544790811115611b2457611b2481611cdc565b505b5050505b6001600160a01b03871660009081526001602052604081208054889290611b5290849061269a565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051611b9e91815260200190565b60405180910390a35050505050505050565b6001600160a01b038216611c105760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a26565b6001600160a01b03821660009081526001602052604090205481811015611c845760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a26565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611516565b600e546000906001600160a01b0316611cf68360036113eb565b604051600081818185875af1925050503d8060008114611d32576040519150601f19603f3d011682016040523d82523d6000602084013e611d37565b606091505b5050600c549091506000906001600160a01b0316611d568460036113eb565b604051600081818185875af1925050503d8060008114611d92576040519150601f19603f3d011682016040523d82523d6000602084013e611d97565b606091505b5050600d549091506000906001600160a01b0316611db68560036113eb565b604051600081818185875af1925050503d8060008114611df2576040519150601f19603f3d011682016040523d82523d6000602084013e611df7565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611e2e911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60135460ff16151560011480611f2957506001600160a01b0382166000908152600b602052604090205460ff1615156001145b8061203357506040516370a0823160e01b81526001600160a01b0383166004820152819030906370a0823190602401602060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9991906126ad565b611fa3919061269a565b600f5411801561203357506010546001600160a01b038316600090815260146020526040902054611fd49083612294565b108061203357506010546001600160a01b0383166000908152601460205260409020546120019083612294565b11801561203357506012546001600160a01b03831660009081526016602052604090205442916120319190612294565b105b61092a5760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610a26565b6012546001600160a01b03831660009081526016602052604090205442916120a79190612294565b10156120f657826120d3576001600160a01b0382166000908152601460205260409020819055806120f0565b6001600160a01b0382166000908152601560205260409020819055805b5061215f565b8261212e576001600160a01b0382166000908152601460205260408120805483929061212390849061269a565b92505081905561215d565b6001600160a01b0382166000908152601560205260408120805483929061215690849061269a565b9250508190555b505b506001600160a01b0316600090815260166020526040902042905550565b60135460ff161515600114806121b057506001600160a01b0382166000908152600b602052604090205460ff1615156001145b806121de57506011546001600160a01b0383166000908152601560205260409020546121dc9083612294565b105b8061223c57506011546001600160a01b03831660009081526015602052604090205461220a9083612294565b11801561223c57506012546001600160a01b038316600090815260166020526040902054429161223a9190612294565b105b61092a5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610a26565b60006113f78284612793565b60006113f7828461269a565b60006113f782846127aa565b6001600160a01b0381168114610b7657600080fd5b80356122cc816122ac565b919050565b6000602082840312156122e357600080fd5b81356113f7816122ac565b600060208083528351808285015260005b8181101561231b578581018301518582016040015282016122ff565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561234f57600080fd5b823561235a816122ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561239157600080fd5b823567ffffffffffffffff808211156123a957600080fd5b818501915085601f8301126123bd57600080fd5b8135818111156123cf576123cf612368565b8060051b604051601f19603f830116810181811085821117156123f4576123f4612368565b60405291825284820192508381018501918883111561241257600080fd5b938501935b8285101561243757612428856122c1565b84529385019392850192612417565b98975050505050505050565b60008060006060848603121561245857600080fd5b8335612463816122ac565b92506020840135612473816122ac565b929592945050506040919091013590565b60008060006060848603121561249957600080fd5b83356124a4816122ac565b925060208401356124b4816122ac565b915060408401356124c4816122ac565b809150509250925092565b8015158114610b7657600080fd5b600080600080600060a086880312156124f557600080fd5b8535945060208601359350604086013592506060860135612515816124cf565b949793965091946080013592915050565b60006020828403121561253857600080fd5b5035919050565b6000806040838503121561255257600080fd5b823561255d816122ac565b9150602083013561256d816122ac565b809150509250929050565b6000806000806080858703121561258e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060c087890312156125c357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561260057600080fd5b823561260b816122ac565b9150602083013561256d816124cf565b600181811c9082168061262f57607f821691505b60208210810361264f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126935761269361266b565b5060010190565b808201808211156108b4576108b461266b565b6000602082840312156126bf57600080fd5b5051919050565b6000602082840312156126d857600080fd5b81516113f7816124cf565b6000602082840312156126f557600080fd5b81516113f7816122ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127505784516001600160a01b03168352938301939183019160010161272b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261278e57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b461266b565b818103818111156108b4576108b461266b56fea2646970667358221220d980b706fd2ee55d17545f264ff1c08192a1cd0c5f8f15f4b6b27c5c6f63d69e64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102335760003560e01c80634d0047ee1161012e5780638da5cb5b116100ab578063b7bda68f1161006f578063b7bda68f14610757578063db8d55f114610777578063dd62ed3e146107b9578063f2fde38b146107d9578063fb201b1d146107f957600080fd5b80638da5cb5b146106c45780638ebfc796146106e257806395d89b4114610702578063a457c2d714610717578063a9059cbb1461073757600080fd5b8063715018a6116100f2578063715018a61461060c57806373d002241461062157806386f6c3c1146106645780638a2ade58146106845780638d7a8ba7146106a457600080fd5b80634d0047ee14610556578063526731e61461057657806361b97324146105965780636519aa24146105b657806370a08231146105d657600080fd5b80632d486248116101bc578063398daa8511610180578063398daa85146104b15780634195932b146104e157806342966c681461050157806349bd5a5e1461052157806349d3c1351461054157600080fd5b80632d486248146103ef5780632fee9e7e1461040f578063313ce5671461043f578063361f4fb414610461578063395093511461049157600080fd5b80631694505e116102035780631694505e1461033c57806317f5904c1461037457806318160ddd1461039657806323b872dd146103b557806325fa0b98146103d557600080fd5b806220a4031461023f57806303f3d310146102ac57806306fdde03146102ea578063095ea7b31461030c57600080fd5b3661023a57005b600080fd5b34801561024b57600080fd5b5061028c61025a3660046122d1565b6001600160a01b0316600090815260146020908152604080832054601583528184205460169093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b3480156102b857600080fd5b5060105460115460125460135460ff1660408051948552602085019390935291830152151560608201526080016102a3565b3480156102f657600080fd5b506102ff61080e565b6040516102a391906122ee565b34801561031857600080fd5b5061032c61032736600461233c565b6108a0565b60405190151581526020016102a3565b34801561034857600080fd5b50601b5461035c906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561038057600080fd5b5061039461038f36600461237e565b6108ba565b005b3480156103a257600080fd5b506003545b6040519081526020016102a3565b3480156103c157600080fd5b5061032c6103d0366004612443565b61092e565b3480156103e157600080fd5b50600a5461032c9060ff1681565b3480156103fb57600080fd5b5061039461040a366004612484565b610952565b34801561041b57600080fd5b5061032c61042a3660046122d1565b60096020526000908152604090205460ff1681565b34801561044b57600080fd5b5060065460405160ff90911681526020016102a3565b34801561046d57600080fd5b5061032c61047c3660046122d1565b600b6020526000908152604090205460ff1681565b34801561049d57600080fd5b5061032c6104ac36600461233c565b610999565b3480156104bd57600080fd5b5061032c6104cc3660046122d1565b60086020526000908152604090205460ff1681565b3480156104ed57600080fd5b506103946104fc3660046124dd565b6109bb565b34801561050d57600080fd5b5061039461051c366004612526565b610b6c565b34801561052d57600080fd5b50601c5461035c906001600160a01b031681565b34801561054d57600080fd5b50610394610b79565b34801561056257600080fd5b50600e5461035c906001600160a01b031681565b34801561058257600080fd5b5061039461059136600461253f565b610b8b565b3480156105a257600080fd5b506103946105b1366004612578565b610c79565b3480156105c257600080fd5b506103946105d1366004612526565b610c95565b3480156105e257600080fd5b506103a76105f13660046122d1565b6001600160a01b031660009081526001602052604090205490565b34801561061857600080fd5b50610394610df7565b34801561062d57600080fd5b50601754601854601954601a546106449392919084565b6040805194855260208501939093529183015260608201526080016102a3565b34801561067057600080fd5b5061039461067f3660046125aa565b610e0b565b34801561069057600080fd5b50600c5461035c906001600160a01b031681565b3480156106b057600080fd5b506103946106bf3660046125ed565b611129565b3480156106d057600080fd5b506000546001600160a01b031661035c565b3480156106ee57600080fd5b506103946106fd3660046125ed565b61115c565b34801561070e57600080fd5b506102ff61118f565b34801561072357600080fd5b5061032c61073236600461233c565b61119e565b34801561074357600080fd5b5061032c61075236600461233c565b611219565b34801561076357600080fd5b50600d5461035c906001600160a01b031681565b34801561078357600080fd5b5061078c611227565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102a3565b3480156107c557600080fd5b506103a76107d436600461253f565b611333565b3480156107e557600080fd5b506103946107f43660046122d1565b61135e565b34801561080557600080fd5b506103946113d4565b60606004805461081d9061261b565b80601f01602080910402602001604051908101604052809291908181526020018280546108499061261b565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae8185856113fe565b60019150505b92915050565b6108c2611523565b60005b815181101561092a576001600960008484815181106108e6576108e6612655565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061092281612681565b9150506108c5565b5050565b60003361093c85828561157d565b6109478585856115f7565b506001949350505050565b61095a611523565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6000336108ae8185856109ac8383611333565b6109b6919061269a565b6113fe565b6109c3611523565b6003546109d19060c86113eb565b851015610a2f5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610a3e906101906113eb565b841015610a985760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610a26565b610708831115610af95760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610a26565b600354610b08906103e86113eb565b8111610b475760405162461bcd60e51b815260206004820152600e60248201526d4d61782077616c6c6574206c6f7760901b6044820152606401610a26565b6010949094556011929092556012556013805460ff1916911515919091179055600f55565b610b763382611bb0565b50565b610b81611523565b47610b7681611cdc565b610b93611523565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a0823190602401602060405180830381865afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0591906126ad565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7491906126c6565b505050565b610c81611523565b601793909355601891909155601955601a55565b610c9d611523565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610cd257610cd2612655565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f91906126e3565b81600181518110610d6257610d62612655565b6001600160a01b039283166020918202929092010152601b54610d8891309116846113fe565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790610dc1908590600090869030904290600401612700565b600060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050505050565b610dff611523565b610e096000611ea6565b565b610e13611523565b6105dc861115610e655760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610a26565b6105dc851115610eae5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610a26565b6105dc841115610efb5760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610a26565b6105dc831115610f4d5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610a26565b6105dc821115610f965760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610a26565b6105dc811115610fe35760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610a26565b856007604051611005906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b611131611523565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b611164611523565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b60606005805461081d9061261b565b600033816111ac8286611333565b90508381101561120c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a26565b61094782868684036113fe565b6000336108ae8185856115f7565b6000806000806000806007604051611251906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b611366611523565b6001600160a01b0381166113cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a26565b610b7681611ea6565b6113dc611523565b600a805460ff19166001179055565b60006113f78284612771565b9392505050565b6001600160a01b0383166114605760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a26565b6001600160a01b0382166114c15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a26565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610e095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a26565b60006115898484611333565b905060001981146115f157818110156115e45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a26565b6115f184848484036113fe565b50505050565b6001600160a01b03831661165b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a26565b6001600160a01b0382166116bd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a26565b6001600160a01b038316600090815260016020526040902054818110156117355760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a26565b601c54600090819081906001906001600160a01b039081169089160361185257600a5460ff168061177e57506001600160a01b03871660009081526009602052604090205460ff165b6117bf5760405162461bcd60e51b81526020600482015260126024820152715472616465206973206e6f74206f70656e2160701b6044820152606401610a26565b6117c98787611ef6565b6117d56000888861207f565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506118f9565b601c546001600160a01b03908116908816036118f957611872888761217d565b61187e6001898861207f565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061194b57506001600160a01b03881660009081526008602052604090205460ff165b15611954575060005b8080156119855750601c546001600160a01b03888116911614806119855750601c546001600160a01b038981169116145b15611b2a576119ae60405180606001604052806000815260200160008152602001600081525090565b6119c46127106119be8988612288565b906113eb565b81526119d66127106119be8987612288565b60208201526119eb6127106119be8986612288565b6040820181905260208201518251600092611a11929091611a0b91612294565b90612294565b9050611a1d88826122a0565b3060009081526001602052604081208054929a508392909190611a4190849061269a565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526001602052604090205460175481118015611ab55750601954601854611ab2919061269a565b42115b8015611ace5750601c546001600160a01b038b81169116145b15611b2657601754611aea906103e8906119be9061044c612288565b811115611b0257601754611afd90610c9d565b611b0b565b611b0b81610c9d565b42601855601a544790811115611b2457611b2481611cdc565b505b5050505b6001600160a01b03871660009081526001602052604081208054889290611b5290849061269a565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051611b9e91815260200190565b60405180910390a35050505050505050565b6001600160a01b038216611c105760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a26565b6001600160a01b03821660009081526001602052604090205481811015611c845760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a26565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611516565b600e546000906001600160a01b0316611cf68360036113eb565b604051600081818185875af1925050503d8060008114611d32576040519150601f19603f3d011682016040523d82523d6000602084013e611d37565b606091505b5050600c549091506000906001600160a01b0316611d568460036113eb565b604051600081818185875af1925050503d8060008114611d92576040519150601f19603f3d011682016040523d82523d6000602084013e611d97565b606091505b5050600d549091506000906001600160a01b0316611db68560036113eb565b604051600081818185875af1925050503d8060008114611df2576040519150601f19603f3d011682016040523d82523d6000602084013e611df7565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611e2e911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60135460ff16151560011480611f2957506001600160a01b0382166000908152600b602052604090205460ff1615156001145b8061203357506040516370a0823160e01b81526001600160a01b0383166004820152819030906370a0823190602401602060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9991906126ad565b611fa3919061269a565b600f5411801561203357506010546001600160a01b038316600090815260146020526040902054611fd49083612294565b108061203357506010546001600160a01b0383166000908152601460205260409020546120019083612294565b11801561203357506012546001600160a01b03831660009081526016602052604090205442916120319190612294565b105b61092a5760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610a26565b6012546001600160a01b03831660009081526016602052604090205442916120a79190612294565b10156120f657826120d3576001600160a01b0382166000908152601460205260409020819055806120f0565b6001600160a01b0382166000908152601560205260409020819055805b5061215f565b8261212e576001600160a01b0382166000908152601460205260408120805483929061212390849061269a565b92505081905561215d565b6001600160a01b0382166000908152601560205260408120805483929061215690849061269a565b9250508190555b505b506001600160a01b0316600090815260166020526040902042905550565b60135460ff161515600114806121b057506001600160a01b0382166000908152600b602052604090205460ff1615156001145b806121de57506011546001600160a01b0383166000908152601560205260409020546121dc9083612294565b105b8061223c57506011546001600160a01b03831660009081526015602052604090205461220a9083612294565b11801561223c57506012546001600160a01b038316600090815260166020526040902054429161223a9190612294565b105b61092a5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610a26565b60006113f78284612793565b60006113f7828461269a565b60006113f782846127aa565b6001600160a01b0381168114610b7657600080fd5b80356122cc816122ac565b919050565b6000602082840312156122e357600080fd5b81356113f7816122ac565b600060208083528351808285015260005b8181101561231b578581018301518582016040015282016122ff565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561234f57600080fd5b823561235a816122ac565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561239157600080fd5b823567ffffffffffffffff808211156123a957600080fd5b818501915085601f8301126123bd57600080fd5b8135818111156123cf576123cf612368565b8060051b604051601f19603f830116810181811085821117156123f4576123f4612368565b60405291825284820192508381018501918883111561241257600080fd5b938501935b8285101561243757612428856122c1565b84529385019392850192612417565b98975050505050505050565b60008060006060848603121561245857600080fd5b8335612463816122ac565b92506020840135612473816122ac565b929592945050506040919091013590565b60008060006060848603121561249957600080fd5b83356124a4816122ac565b925060208401356124b4816122ac565b915060408401356124c4816122ac565b809150509250925092565b8015158114610b7657600080fd5b600080600080600060a086880312156124f557600080fd5b8535945060208601359350604086013592506060860135612515816124cf565b949793965091946080013592915050565b60006020828403121561253857600080fd5b5035919050565b6000806040838503121561255257600080fd5b823561255d816122ac565b9150602083013561256d816122ac565b809150509250929050565b6000806000806080858703121561258e57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060008060c087890312156125c357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561260057600080fd5b823561260b816122ac565b9150602083013561256d816124cf565b600181811c9082168061262f57607f821691505b60208210810361264f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126935761269361266b565b5060010190565b808201808211156108b4576108b461266b565b6000602082840312156126bf57600080fd5b5051919050565b6000602082840312156126d857600080fd5b81516113f7816124cf565b6000602082840312156126f557600080fd5b81516113f7816122ac565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127505784516001600160a01b03168352938301939183019160010161272b565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261278e57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b461266b565b818103818111156108b4576108b461266b56fea2646970667358221220d980b706fd2ee55d17545f264ff1c08192a1cd0c5f8f15f4b6b27c5c6f63d69e64736f6c63430008110033
Deployed Bytecode Sourcemap
17952:22565:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27893:199;;;;;;;;;;-1:-1:-1;27893:199:0;;;;;:::i;:::-;-1:-1:-1;;;;;28007:23:0;27952:9;28007:23;;;:13;:23;;;;;;;;;28032:14;:24;;;;;;28058:15;:25;;;;;;28007:23;;28032:24;;28058:25;27893:199;;;;;743:25:1;;;799:2;784:18;;777:34;;;;827:18;;;820:34;731:2;716:18;27893:199:0;;;;;;;;25727:207;;;;;;;;;;-1:-1:-1;25850:17:0;;25869:18;;25889:17;;25908;;;;25727:207;;;1090:25:1;;;1146:2;1131:18;;1124:34;;;;1174:18;;;1167:34;1244:14;1237:22;1232:2;1217:18;;1210:50;1077:3;1062:19;25727:207:0;865:401:1;29943:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31565:201::-;;;;;;;;;;-1:-1:-1;31565:201:0;;;;;:::i;:::-;;:::i;:::-;;;2309:14:1;;2302:22;2284:41;;2272:2;2257:18;31565:201:0;2144:187:1;19397:41:0;;;;;;;;;;-1:-1:-1;19397:41:0;;;;-1:-1:-1;;;;;19397:41:0;;;;;;-1:-1:-1;;;;;2526:32:1;;;2508:51;;2496:2;2481:18;19397:41:0;2336:229:1;23839:151:0;;;;;;;;;;-1:-1:-1;23839:151:0;;;;;:::i;:::-;;:::i;:::-;;30385:108;;;;;;;;;;-1:-1:-1;30473:12:0;;30385:108;;;3974:25:1;;;3962:2;3947:18;30385:108:0;3828:177:1;32347:295:0;;;;;;;;;;-1:-1:-1;32347:295:0;;;;;:::i;:::-;;:::i;18540:21::-;;;;;;;;;;-1:-1:-1;18540:21:0;;;;;;;;23544:254;;;;;;;;;;-1:-1:-1;23544:254:0;;;;;:::i;:::-;;:::i;18498:35::-;;;;;;;;;;-1:-1:-1;18498:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30276:100;;;;;;;;;;-1:-1:-1;30359:9:0;;30276:100;;30359:9;;;;5147:36:1;;5135:2;5120:18;30276:100:0;5005:184:1;18568:46:0;;;;;;;;;;-1:-1:-1;18568:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33052:238;;;;;;;;;;-1:-1:-1;33052:238:0;;;;;:::i;:::-;;:::i;18449:42::-;;;;;;;;;;-1:-1:-1;18449:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24608:696;;;;;;;;;;-1:-1:-1;24608:696:0;;;;;:::i;:::-;;:::i;40423:91::-;;;;;;;;;;-1:-1:-1;40423:91:0;;;;;:::i;:::-;;:::i;19445:28::-;;;;;;;;;;-1:-1:-1;19445:28:0;;;;-1:-1:-1;;;;;19445:28:0;;;29105:169;;;;;;;;;;;;;:::i;18718:46::-;;;;;;;;;;-1:-1:-1;18718:46:0;;;;-1:-1:-1;;;;;18718:46:0;;;29721:151;;;;;;;;;;-1:-1:-1;29721:151:0;;;;;:::i;:::-;;:::i;25354:292::-;;;;;;;;;;-1:-1:-1;25354:292:0;;;;;:::i;:::-;;:::i;28617:479::-;;;;;;;;;;-1:-1:-1;28617:479:0;;;;;:::i;:::-;;:::i;30502:127::-;;;;;;;;;;-1:-1:-1;30502:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;30603:18:0;30576:7;30603:18;;;:9;:18;;;;;;;30502:127;10086:103;;;;;;;;;;;;;:::i;19360:27::-;;;;;;;;;;-1:-1:-1;19360:27:0;;;;;;;;;;;;;;;;;;;7266:25:1;;;7322:2;7307:18;;7300:34;;;;7350:18;;;7343:34;7408:2;7393:18;;7386:34;7253:3;7238:19;19360:27:0;7035:391:1;21888:1072:0;;;;;;;;;;-1:-1:-1;21888:1072:0;;;;;:::i;:::-;;:::i;18624:42::-;;;;;;;;;;-1:-1:-1;18624:42:0;;;;-1:-1:-1;;;;;18624:42:0;;;24403:127;;;;;;;;;;-1:-1:-1;24403:127:0;;;;;:::i;:::-;;:::i;9436:87::-;;;;;;;;;;-1:-1:-1;9482:7:0;9509:6;-1:-1:-1;;;;;9509:6:0;9436:87;;24196:119;;;;;;;;;;-1:-1:-1;24196:119:0;;;;;:::i;:::-;;:::i;30163:104::-;;;;;;;;;;;;;:::i;33794:437::-;;;;;;;;;;-1:-1:-1;33794:437:0;;;;;:::i;:::-;;:::i;30836:193::-;;;;;;;;;;-1:-1:-1;30836:193:0;;;;;:::i;:::-;;:::i;18673:38::-;;;;;;;;;;-1:-1:-1;18673:38:0;;;;-1:-1:-1;;;;;18673:38:0;;;23029:447;;;;;;;;;;;;;:::i;:::-;;;;8633:25:1;;;8689:2;8674:18;;8667:34;;;;8717:18;;;8710:34;;;;8775:2;8760:18;;8753:34;8818:3;8803:19;;8796:35;8862:3;8847:19;;8840:35;8620:3;8605:19;23029:447:0;8346:535:1;31093:151:0;;;;;;;;;;-1:-1:-1;31093:151:0;;;;;:::i;:::-;;:::i;10345:201::-;;;;;;;;;;-1:-1:-1;10345:201:0;;;;;:::i;:::-;;:::i;24035:75::-;;;;;;;;;;;;;:::i;29943:100::-;29997:13;30030:5;30023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29943:100;:::o;31565:201::-;31648:4;8003:10;31704:32;8003:10;31720:7;31729:6;31704:8;:32::i;:::-;31754:4;31747:11;;;31565:201;;;;;:::o;23839:151::-;9321:13;:11;:13::i;:::-;23910:6:::1;23906:77;23922:3;:10;23918:1;:14;23906:77;;;23967:4;23954:2;:10;23957:3;23961:1;23957:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;23954:10:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;23954:10:0;:17;;-1:-1:-1;;23954:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23934:3;::::1;::::0;::::1;:::i;:::-;;;;23906:77;;;;23839:151:::0;:::o;32347:295::-;32478:4;8003:10;32536:38;32552:4;8003:10;32567:6;32536:15;:38::i;:::-;32585:27;32595:4;32601:2;32605:6;32585:9;:27::i;:::-;-1:-1:-1;32630:4:0;;32347:295;-1:-1:-1;;;;32347:295:0:o;23544:254::-;9321:13;:11;:13::i;:::-;23672:14:::1;:32:::0;;-1:-1:-1;;;;;23672:32:0;;::::1;-1:-1:-1::0;;;;;;23672:32:0;;::::1;;::::0;;;23715:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;23750:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;23544:254::o;33052:238::-;33140:4;8003:10;33196:64;8003:10;33212:7;33249:10;33221:25;8003:10;33212:7;33221:9;:25::i;:::-;:38;;;;:::i;:::-;33196:8;:64::i;24608:696::-;9321:13;:11;:13::i;:::-;24762:12:::1;::::0;:21:::1;::::0;24779:3:::1;24762:16;:21::i;:::-;24749:9;:34;;24741:80;;;::::0;-1:-1:-1;;;24741:80:0;;10400:2:1;24741:80:0::1;::::0;::::1;10382:21:1::0;10439:2;10419:18;;;10412:30;10478:34;10458:18;;;10451:62;-1:-1:-1;;;10529:18:1;;;10522:31;10570:19;;24741:80:0::1;;;;;;;;;24862:12;::::0;:21:::1;::::0;24879:3:::1;24862:16;:21::i;:::-;24848:10;:35;;24840:82;;;::::0;-1:-1:-1;;;24840:82:0;;10802:2:1;24840:82:0::1;::::0;::::1;10784:21:1::0;10841:2;10821:18;;;10814:30;10880:34;10860:18;;;10853:62;-1:-1:-1;;;10931:18:1;;;10924:32;10973:19;;24840:82:0::1;10600:398:1::0;24840:82:0::1;24963:10;24950:9;:23;;24942:74;;;::::0;-1:-1:-1;;;24942:74:0;;11205:2:1;24942:74:0::1;::::0;::::1;11187:21:1::0;11244:2;11224:18;;;11217:30;11283:34;11263:18;;;11256:62;-1:-1:-1;;;11334:18:1;;;11327:36;11380:19;;24942:74:0::1;11003:402:1::0;24942:74:0::1;25048:12;::::0;:22:::1;::::0;25065:4:::1;25048:16;:22::i;:::-;25035:10;:35;25027:62;;;::::0;-1:-1:-1;;;25027:62:0;;11612:2:1;25027:62:0::1;::::0;::::1;11594:21:1::0;11651:2;11631:18;;;11624:30;-1:-1:-1;;;11670:18:1;;;11663:44;11724:18;;25027:62:0::1;11410:338:1::0;25027:62:0::1;25103:17:::0;:29;;;;25143:18;:31;;;;25185:17;:29;25225:17;:29;;-1:-1:-1;;25225:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25103:8:::1;25265:31:::0;24608:696::o;40423:91::-;40479:27;8003:10;40499:6;40479:5;:27::i;:::-;40423:91;:::o;29105:169::-;9321:13;:11;:13::i;:::-;29195:21:::1;29227:39;29195:21:::0;29227:16:::1;:39::i;29721:151::-:0;9321:13;:11;:13::i;:::-;29832:31:::1;::::0;-1:-1:-1;;;29832:31:0;;29857:4:::1;29832:31;::::0;::::1;2508:51:1::0;-1:-1:-1;;;;;29811:15:0;::::1;::::0;::::1;::::0;29827:3;;29811:15;;29832:16:::1;::::0;2481:18:1;;29832:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29811:53;::::0;-1:-1:-1;;;;;;29811:53:0::1;::::0;;;;;;-1:-1:-1;;;;;12142:32:1;;;29811:53:0::1;::::0;::::1;12124:51:1::0;12191:18;;;12184:34;12097:18;;29811:53:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29721:151:::0;;:::o;25354:292::-;9321:13;:11;:13::i;:::-;25473:10:::1;:39:::0;;;;25523:19;:31;;;;25565:20;:29;25605:20;:33;25354:292::o;28617:479::-;9321:13;:11;:13::i;:::-;28723:16:::1;::::0;;28737:1:::1;28723:16:::0;;;;;::::1;::::0;;28699:21:::1;::::0;28723:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28723:16:0::1;28699:40;;28768:4;28750;28755:1;28750:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28750:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28794:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;28794:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;28750:7;;28794:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28784:4;28789:1;28784:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28784:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;28859:15:::1;::::0;28827:58:::1;::::0;28844:4:::1;::::0;28859:15:::1;28877:7:::0;28827:8:::1;:58::i;:::-;28896:15;::::0;:192:::1;::::0;-1:-1:-1;;;28896:192:0;;-1:-1:-1;;;;;28896:15:0;;::::1;::::0;:66:::1;::::0;:192:::1;::::0;28977:7;;28896:15:::1;::::0;29015:4;;29042::::1;::::0;29062:15:::1;::::0;28896:192:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28688:408;28617:479:::0;:::o;10086:103::-;9321:13;:11;:13::i;:::-;10151:30:::1;10178:1;10151:18;:30::i;:::-;10086:103::o:0;21888:1072::-;9321:13;:11;:13::i;:::-;22128:4:::1;22111:13;:21;;22103:60;;;::::0;-1:-1:-1;;;22103:60:0;;13922:2:1;22103:60:0::1;::::0;::::1;13904:21:1::0;13961:2;13941:18;;;13934:30;14000:28;13980:18;;;13973:56;14046:18;;22103:60:0::1;13720:350:1::0;22103:60:0::1;22193:4;22182:7;:15;;22174:48;;;::::0;-1:-1:-1;;;22174:48:0;;14277:2:1;22174:48:0::1;::::0;::::1;14259:21:1::0;14316:2;14296:18;;;14289:30;-1:-1:-1;;;14335:18:1;;;14328:50;14395:18;;22174:48:0::1;14075:344:1::0;22174:48:0::1;22256:4;22241:11;:19;;22233:56;;;::::0;-1:-1:-1;;;22233:56:0;;14626:2:1;22233:56:0::1;::::0;::::1;14608:21:1::0;14665:2;14645:18;;;14638:30;-1:-1:-1;;;14684:18:1;;;14677:54;14748:18;;22233:56:0::1;14424:348:1::0;22233:56:0::1;22326:4;22308:14;:22;;22300:61;;;::::0;-1:-1:-1;;;22300:61:0;;13922:2:1;22300:61:0::1;::::0;::::1;13904:21:1::0;13961:2;13941:18;;;13934:30;14000:28;13980:18;;;13973:56;14046:18;;22300:61:0::1;13720:350:1::0;22300:61:0::1;22392:4;22380:8;:16;;22372:49;;;::::0;-1:-1:-1;;;22372:49:0;;14277:2:1;22372:49:0::1;::::0;::::1;14259:21:1::0;14316:2;14296:18;;;14289:30;-1:-1:-1;;;14335:18:1;;;14328:50;14395:18;;22372:49:0::1;14075:344:1::0;22372:49:0::1;22456:4;22440:12;:20;;22432:57;;;::::0;-1:-1:-1;;;22432:57:0;;14626:2:1;22432:57:0::1;::::0;::::1;14608:21:1::0;14665:2;14645:18;;;14638:30;-1:-1:-1;;;14684:18:1;;;14677:54;14748:18;;22432:57:0::1;14424:348:1::0;22432:57:0::1;22528:13;22503:6;:22;;;;-1:-1:-1::0;;;14979:27:1;;15031:2;15022:12;;14777:263;22503:22:0::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:38;;;;-1:-1:-1;;;15247:21:1;;22552:6:0::1;15293:1:1::0;15284:11;;22552:16:0;;;;;;;;;;;;;:26;;;-1:-1:-1;;;15508:25:1;;15558:2;15549:12;;22589:20:0;;;;;;;;;;;;;:34;;;-1:-1:-1;;;15774:28:1;;15827:2;15818:12;;22637:23:0;;;;;;;;;;;;;:40;;;-1:-1:-1;;;16043:22:1;;16081:11;;;22688:17:0;;;;;;;;;;;;;:28;;;-1:-1:-1;;;16305:26:1;;16356:2;16347:12;;22727:21:0;;;;;;;;;;;:36;;;8633:25:1;;;8674:18;;;8667:34;;;8717:18;;;8710:34;;;8775:2;8760:18;;8753:34;;;8818:3;8803:19;;8796:35;;;8862:3;8847:19;;8840:35;;;22782:170:0;;::::1;::::0;8620:3:1;22782:170:0;;;;;;::::1;21888:1072:::0;;;;;;:::o;24403:127::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;24490:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;24490:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24403:127::o;24196:119::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;24279:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;24279:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24196:119::o;30163:104::-;30219:13;30252:7;30245:14;;;;;:::i;33794:437::-;33887:4;8003:10;33887:4;33970:25;8003:10;33987:7;33970:9;:25::i;:::-;33943:52;;34034:15;34014:16;:35;;34006:85;;;;-1:-1:-1;;;34006:85:0;;16572:2:1;34006:85:0;;;16554:21:1;16611:2;16591:18;;;16584:30;16650:34;16630:18;;;16623:62;-1:-1:-1;;;16701:18:1;;;16694:35;16746:19;;34006:85:0;16370:401:1;34006:85:0;34127:60;34136:5;34143:7;34171:15;34152:16;:34;34127:8;:60::i;30836:193::-;30915:4;8003:10;30971:28;8003:10;30988:2;30992:6;30971:9;:28::i;23029:447::-;23078:17;23106:11;23128:15;23154:18;23183:12;23206:16;23263:6;:22;;;;-1:-1:-1;;;14979:27:1;;15031:2;15022:12;;14777:263;23263:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;15247:21:1;;23263:22:0;23300:6;;15293:1:1;15284:11;23300:16:0;;;;;;;;;;;;;;-1:-1:-1;;;15508:25:1;;23300:16:0;23331:6;;15558:2:1;15549:12;23331:20:0;;;;;;;;;;;;;;-1:-1:-1;;;15774:28:1;;23331:20:0;23366:6;;15827:2:1;15818:12;23366:23:0;;;;;;;;;;;;;;-1:-1:-1;;;16043:22:1;;23366:23:0;23404:6;;16081:11:1;;23404:17:0;;;;;;;;;;;;;;-1:-1:-1;;;16305:26:1;;23404:17:0;23436:6;;16356:2:1;16347:12;23436:21:0;;;;;;;;;;;;;23241:227;;;;;;;;;;;;23029:447;;;;;;:::o;31093:151::-;-1:-1:-1;;;;;31209:18:0;;;31182:7;31209:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31093:151::o;10345:201::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;10434:22:0;::::1;10426:73;;;::::0;-1:-1:-1;;;10426:73:0;;16978:2:1;10426:73:0::1;::::0;::::1;16960:21:1::0;17017:2;16997:18;;;16990:30;17056:34;17036:18;;;17029:62;-1:-1:-1;;;17107:18:1;;;17100:36;17153:19;;10426:73:0::1;16776:402:1::0;10426:73:0::1;10510:28;10529:8;10510:18;:28::i;24035:75::-:0;9321:13;:11;:13::i;:::-;24086:9:::1;:16:::0;;-1:-1:-1;;24086:16:0::1;24098:4;24086:16;::::0;;24035:75::o;4029:98::-;4087:7;4114:5;4118:1;4114;:5;:::i;:::-;4107:12;4029:98;-1:-1:-1;;;4029:98:0:o;38292:381::-;-1:-1:-1;;;;;38428:19:0;;38420:68;;;;-1:-1:-1;;;38420:68:0;;17607:2:1;38420:68:0;;;17589:21:1;17646:2;17626:18;;;17619:30;17685:34;17665:18;;;17658:62;-1:-1:-1;;;17736:18:1;;;17729:34;17780:19;;38420:68:0;17405:400:1;38420:68:0;-1:-1:-1;;;;;38507:21:0;;38499:68;;;;-1:-1:-1;;;38499:68:0;;18012:2:1;38499:68:0;;;17994:21:1;18051:2;18031:18;;;18024:30;18090:34;18070:18;;;18063:62;-1:-1:-1;;;18141:18:1;;;18134:32;18183:19;;38499:68:0;17810:398:1;38499:68:0;-1:-1:-1;;;;;38581:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38633:32;;3974:25:1;;;38633:32:0;;3947:18:1;38633:32:0;;;;;;;;38292:381;;;:::o;9602:132::-;9482:7;9509:6;-1:-1:-1;;;;;9509:6:0;8003:10;9666:23;9658:68;;;;-1:-1:-1;;;9658:68:0;;18415:2:1;9658:68:0;;;18397:21:1;;;18434:18;;;18427:30;18493:34;18473:18;;;18466:62;18545:18;;9658:68:0;18213:356:1;38965:453:0;39100:24;39127:25;39137:5;39144:7;39127:9;:25::i;:::-;39100:52;;-1:-1:-1;;39167:16:0;:37;39163:248;;39249:6;39229:16;:26;;39221:68;;;;-1:-1:-1;;;39221:68:0;;18776:2:1;39221:68:0;;;18758:21:1;18815:2;18795:18;;;18788:30;18854:31;18834:18;;;18827:59;18903:18;;39221:68:0;18574:353:1;39221:68:0;39333:51;39342:5;39349:7;39377:6;39358:16;:25;39333:8;:51::i;:::-;39089:329;38965:453;;;:::o;34711:3142::-;-1:-1:-1;;;;;34842:18:0;;34834:68;;;;-1:-1:-1;;;34834:68:0;;19134:2:1;34834:68:0;;;19116:21:1;19173:2;19153:18;;;19146:30;19212:34;19192:18;;;19185:62;-1:-1:-1;;;19263:18:1;;;19256:35;19308:19;;34834:68:0;18932:401:1;34834:68:0;-1:-1:-1;;;;;34921:16:0;;34913:64;;;;-1:-1:-1;;;34913:64:0;;19540:2:1;34913:64:0;;;19522:21:1;19579:2;19559:18;;;19552:30;19618:34;19598:18;;;19591:62;-1:-1:-1;;;19669:18:1;;;19662:33;19712:19;;34913:64:0;19338:399:1;34913:64:0;-1:-1:-1;;;;;35013:15:0;;34991:19;35013:15;;;:9;:15;;;;;;35047:21;;;;35039:72;;;;-1:-1:-1;;;35039:72:0;;19944:2:1;35039:72:0;;;19926:21:1;19983:2;19963:18;;;19956:30;20022:34;20002:18;;;19995:62;-1:-1:-1;;;20073:18:1;;;20066:36;20119:19;;35039:72:0;19742:402:1;35039:72:0;35264:13;;35125:17;;;;;;35219:4;;-1:-1:-1;;;;;35264:13:0;;;35256:21;;;;35253:706;;35302:9;;;;;:19;;-1:-1:-1;;;;;;35315:6:0;;;;;;:2;:6;;;;;;;;35302:19;35294:50;;;;-1:-1:-1;;;35294:50:0;;20351:2:1;35294:50:0;;;20333:21:1;20390:2;20370:18;;;20363:30;-1:-1:-1;;;20409:18:1;;;20402:48;20467:18;;35294:50:0;20149:342:1;35294:50:0;35421:27;35437:2;35441:6;35421:15;:27::i;:::-;35466:30;35478:5;35485:2;35489:6;35466:11;:30::i;:::-;35529:22;;-1:-1:-1;;;14979:27:1;;35529:6:0;;15031:2:1;15022:12;35529:22:0;;;;;;;;;;;;;;-1:-1:-1;;;15247:21:1;;35529:22:0;-1:-1:-1;35575:6:0;;15293:1:1;15284:11;35575:16:0;;;;;;;;;;;;;;-1:-1:-1;;;15508:25:1;;35575:16:0;-1:-1:-1;35619:6:0;;15558:2:1;15549:12;35619:20:0;;;;;;;;;;;;;35606:33;;35253:706;;;35692:13;;-1:-1:-1;;;;;35692:13:0;;;35686:19;;;;35683:276;;35722:30;35739:4;35745:6;35722:16;:30::i;:::-;35770:31;35782:4;35788;35794:6;35770:11;:31::i;:::-;35834:23;;-1:-1:-1;;;15774:28:1;;35834:6:0;;15827:2:1;15818:12;35834:23:0;;;;;;;;;;;;;;-1:-1:-1;;;16043:22:1;;35834:23:0;-1:-1:-1;35881:6:0;;16081:11:1;;35881:17:0;;;;;;;;;;;;;;-1:-1:-1;;;16305:26:1;;35881:17:0;-1:-1:-1;35926:6:0;;16356:2:1;16347:12;35926:21:0;;;;;;;;;;;;;35913:34;;35683:276;-1:-1:-1;;;;;35997:15:0;;;;;;;:9;:15;;;;;;;;36015:20;;;35997:38;;36063:13;;;;;:9;:13;;;;;;;:32;;-1:-1:-1;;;;;;36080:15:0;;;;;;:9;:15;;;;;;;;36063:32;36060:79;;;-1:-1:-1;36122:5:0;36060:79;36155:7;:57;;;;-1:-1:-1;36173:13:0;;-1:-1:-1;;;;;36167:19:0;;;36173:13;;36167:19;;:44;;-1:-1:-1;36198:13:0;;-1:-1:-1;;;;;36190:21:0;;;36198:13;;36190:21;36167:44;36152:1615;;;36229:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;36229:25:0;36294:35;36323:5;36294:24;:6;36305:12;36294:10;:24::i;:::-;:28;;:35::i;:::-;36269:60;;36363:29;36386:5;36363:18;:6;36374;36363:10;:18::i;:29::-;36344:16;;;:48;36430:33;36457:5;36430:22;:6;36441:10;36430;:22::i;:33::-;36407:20;;;:56;;;36560:16;;;;36515:22;;36481:14;;36515:106;;36407:56;;36515:62;;:44;:62::i;:::-;:84;;:106::i;:::-;36481:140;-1:-1:-1;36648:21:0;:6;36481:140;36648:10;:21::i;:::-;36705:4;36687:24;;;;:9;:24;;;;;:37;;36639:30;;-1:-1:-1;36715:9:0;;36687:24;;;:37;;36715:9;;36687:37;:::i;:::-;;;;-1:-1:-1;;36771:40:0;;3974:25:1;;;36794:4:0;;-1:-1:-1;;;;;36771:40:0;;;;;3962:2:1;3947:18;36771:40:0;;;;;;;36915:4;36866:28;36897:24;;;:9;:24;;;;;;36984:10;:23;36961:46;;:127;;;;-1:-1:-1;37068:20:0;;37046:19;;:42;;37068:20;37046:42;:::i;:::-;37028:15;:60;36961:127;:167;;;;-1:-1:-1;37115:13:0;;-1:-1:-1;;;;;37109:19:0;;;37115:13;;37109:19;36961:167;36939:817;;;37233:10;:23;:43;;37271:4;;37233:33;;37261:4;37233:27;:33::i;:43::-;37210:20;:66;37207:248;;;37321:10;:23;37301:44;;:19;:44::i;:::-;37207:248;;;37394:41;37414:20;37394:19;:41::i;:::-;37498:15;37476:19;:37;37637:20;;37567:21;;37613:44;;37610:131;;;37682:39;37699:21;37682:16;:39::i;:::-;37144:612;36939:817;36214:1553;;;36152:1615;-1:-1:-1;;;;;37780:13:0;;;;;;:9;:13;;;;;:23;;37797:6;;37780:13;:23;;37797:6;;37780:23;:::i;:::-;;;;;;;;37834:2;-1:-1:-1;;;;;37819:26:0;37828:4;-1:-1:-1;;;;;37819:26:0;;37838:6;37819:26;;;;3974:25:1;;3962:2;3947:18;;3828:177;37819:26:0;;;;;;;;34823:3030;;;;;34711:3142;;;:::o;39752:554::-;-1:-1:-1;;;;;39836:21:0;;39828:67;;;;-1:-1:-1;;;39828:67:0;;20698:2:1;39828:67:0;;;20680:21:1;20737:2;20717:18;;;20710:30;20776:34;20756:18;;;20749:62;-1:-1:-1;;;20827:18:1;;;20820:31;20868:19;;39828:67:0;20496:397:1;39828:67:0;-1:-1:-1;;;;;39934:18:0;;39909:22;39934:18;;;:9;:18;;;;;;39971:24;;;;39963:71;;;;-1:-1:-1;;;39963:71:0;;21100:2:1;39963:71:0;;;21082:21:1;21139:2;21119:18;;;21112:30;21178:34;21158:18;;;21151:62;-1:-1:-1;;;21229:18:1;;;21222:32;21271:19;;39963:71:0;20898:398:1;39963:71:0;-1:-1:-1;;;;;40070:18:0;;;;;;:9;:18;;;;;;;;40091:23;;;40070:44;;40209:12;:22;;;;;;;40261:37;3974:25:1;;;40070:18:0;;;40261:37;;3947:18:1;40261:37:0;3828:177:1;29283:429:0;29375:18;;29349:12;;-1:-1:-1;;;;;29375:18:0;29407:14;:7;29419:1;29407:11;:14::i;:::-;29367:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29465:14:0;;29348:78;;-1:-1:-1;29438:13:0;;-1:-1:-1;;;;;29465:14:0;29493;:7;29505:1;29493:11;:14::i;:::-;29457:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29551:10:0;;29437:75;;-1:-1:-1;29524:13:0;;-1:-1:-1;;;;;29551:10:0;29575:14;:7;29587:1;29575:11;:14::i;:::-;29543:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29523:71;;;29613:19;29624:7;29613:19;;;;2309:14:1;2302:22;2284:41;;2272:2;2257:18;;2144:187;29613:19:0;;;;;;;;29648:20;;2309:14:1;;2302:22;2284:41;;29648:20:0;;2272:2:1;2257:18;29648:20:0;;;;;;;29684;;2309:14:1;;2302:22;2284:41;;29684:20:0;;2272:2:1;2257:18;29684:20:0;;;;;;;29334:378;;;29283:429;:::o;10707:191::-;10781:16;10800:6;;-1:-1:-1;;;;;10817:17:0;;;-1:-1:-1;;;;;;10817:17:0;;;;;;10850:40;;10800:6;;;;;;;10850:40;;10781:16;10850:40;10770:128;10707:191;:::o;26046:551::-;26153:17;;;;:25;;:17;:25;;:59;;-1:-1:-1;;;;;;26182:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;26153:59;26152:379;;;-1:-1:-1;26251:40:0;;-1:-1:-1;;;26251:40:0;;-1:-1:-1;;;;;2526:32:1;;26251:40:0;;;2508:51:1;26294:7:0;;26266:4;;26251:31;;2481:18:1;;26251:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;26230:8;:18;:71;:301;;;;-1:-1:-1;26357:17:0;;-1:-1:-1;;;;;26319:22:0;;;;;;:13;:22;;;;;;:35;;26346:7;26319:26;:35::i;:::-;:55;:211;;;-1:-1:-1;26430:17:0;;-1:-1:-1;;;;;26392:22:0;;;;;;:13;:22;;;;;;:35;;26419:7;26392:26;:35::i;:::-;:55;:137;;;;-1:-1:-1;26493:17:0;;-1:-1:-1;;;;;26464:24:0;;;;;;:15;:24;;;;;;26514:15;;26464:47;;:24;:28;:47::i;:::-;:65;26392:137;26130:459;;;;-1:-1:-1;;;26130:459:0;;21713:2:1;26130:459:0;;;21695:21:1;21752:2;21732:18;;;21725:30;21791:32;21771:18;;;21764:60;21841:18;;26130:459:0;21511:354:1;27341:437:0;27459:17;;-1:-1:-1;;;;;27430:24:0;;;;;;:15;:24;;;;;;27480:15;;27430:47;;:24;:28;:47::i;:::-;:65;27427:288;;;27512:7;:78;;-1:-1:-1;;;;;27558:22:0;;;;;;:13;:22;;;;;:32;;;27583:7;27512:78;;;-1:-1:-1;;;;;27522:23:0;;;;;;:14;:23;;;;;:33;;;27548:7;27512:78;;27427:288;;;27623:7;:80;;-1:-1:-1;;;;;27670:22:0;;;;;;:13;:22;;;;;:33;;27696:7;;27670:22;:33;;27696:7;;27670:33;:::i;:::-;;;;;;;27623:80;;;-1:-1:-1;;;;;27633:23:0;;;;;;:14;:23;;;;;:34;;27660:7;;27633:23;:34;;27660:7;;27633:34;:::i;:::-;;;;;;;27623:80;;27427:288;-1:-1:-1;;;;;;27728:24:0;;;;;:15;:24;;;;;27755:15;27728:42;;-1:-1:-1;27341:437:0:o;26710:478::-;26817:17;;;;:25;;:17;:25;;:72;;-1:-1:-1;;;;;;26859:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;26817:72;:146;;;-1:-1:-1;26945:18:0;;-1:-1:-1;;;;;26906:23:0;;;;;;:14;:23;;;;;;:36;;26934:7;26906:27;:36::i;:::-;:57;26817:146;:304;;;-1:-1:-1;27020:18:0;;-1:-1:-1;;;;;26981:23:0;;;;;;:14;:23;;;;;;:36;;27009:7;26981:27;:36::i;:::-;:57;:139;;;;-1:-1:-1;27084:17:0;;-1:-1:-1;;;;;27055:24:0;;;;;;:15;:24;;;;;;27105:15;;27055:47;;:24;:28;:47::i;:::-;:65;26981:139;26795:385;;;;-1:-1:-1;;;26795:385:0;;22072:2:1;26795:385:0;;;22054:21:1;22111:2;22091:18;;;22084:30;22150:33;22130:18;;;22123:61;22201:18;;26795:385:0;21870:355:1;3629:98:0;3687:7;3714:5;3718:1;3714;:5;:::i;2889:98::-;2947:7;2974:5;2978:1;2974;:5;:::i;3271:98::-;3329:7;3356:5;3360:1;3356;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;1271:548::-;1383:4;1412:2;1441;1430:9;1423:21;1473:6;1467:13;1516:6;1511:2;1500:9;1496:18;1489:34;1541:1;1551:140;1565:6;1562:1;1559:13;1551:140;;;1660:14;;;1656:23;;1650:30;1626:17;;;1645:2;1622:26;1615:66;1580:10;;1551:140;;;1555:3;1740:1;1735:2;1726:6;1715:9;1711:22;1707:31;1700:42;1810:2;1803;1799:7;1794:2;1786:6;1782:15;1778:29;1767:9;1763:45;1759:54;1751:62;;;;1271:548;;;;:::o;1824:315::-;1892:6;1900;1953:2;1941:9;1932:7;1928:23;1924:32;1921:52;;;1969:1;1966;1959:12;1921:52;2008:9;1995:23;2027:31;2052:5;2027:31;:::i;:::-;2077:5;2129:2;2114:18;;;;2101:32;;-1:-1:-1;;;1824:315:1:o;2570:127::-;2631:10;2626:3;2622:20;2619:1;2612:31;2662:4;2659:1;2652:15;2686:4;2683:1;2676:15;2702:1121;2786:6;2817:2;2860;2848:9;2839:7;2835:23;2831:32;2828:52;;;2876:1;2873;2866:12;2828:52;2916:9;2903:23;2945:18;2986:2;2978:6;2975:14;2972:34;;;3002:1;2999;2992:12;2972:34;3040:6;3029:9;3025:22;3015:32;;3085:7;3078:4;3074:2;3070:13;3066:27;3056:55;;3107:1;3104;3097:12;3056:55;3143:2;3130:16;3165:2;3161;3158:10;3155:36;;;3171:18;;:::i;:::-;3217:2;3214:1;3210:10;3249:2;3243:9;3312:2;3308:7;3303:2;3299;3295:11;3291:25;3283:6;3279:38;3367:6;3355:10;3352:22;3347:2;3335:10;3332:18;3329:46;3326:72;;;3378:18;;:::i;:::-;3414:2;3407:22;3464:18;;;3498:15;;;;-1:-1:-1;3540:11:1;;;3536:20;;;3568:19;;;3565:39;;;3600:1;3597;3590:12;3565:39;3624:11;;;;3644:148;3660:6;3655:3;3652:15;3644:148;;;3726:23;3745:3;3726:23;:::i;:::-;3714:36;;3677:12;;;;3770;;;;3644:148;;;3811:6;2702:1121;-1:-1:-1;;;;;;;;2702:1121:1:o;4010:456::-;4087:6;4095;4103;4156:2;4144:9;4135:7;4131:23;4127:32;4124:52;;;4172:1;4169;4162:12;4124:52;4211:9;4198:23;4230:31;4255:5;4230:31;:::i;:::-;4280:5;-1:-1:-1;4337:2:1;4322:18;;4309:32;4350:33;4309:32;4350:33;:::i;:::-;4010:456;;4402:7;;-1:-1:-1;;;4456:2:1;4441:18;;;;4428:32;;4010:456::o;4471:529::-;4548:6;4556;4564;4617:2;4605:9;4596:7;4592:23;4588:32;4585:52;;;4633:1;4630;4623:12;4585:52;4672:9;4659:23;4691:31;4716:5;4691:31;:::i;:::-;4741:5;-1:-1:-1;4798:2:1;4783:18;;4770:32;4811:33;4770:32;4811:33;:::i;:::-;4863:7;-1:-1:-1;4922:2:1;4907:18;;4894:32;4935:33;4894:32;4935:33;:::i;:::-;4987:7;4977:17;;;4471:529;;;;;:::o;5194:118::-;5280:5;5273:13;5266:21;5259:5;5256:32;5246:60;;5302:1;5299;5292:12;5317:515;5409:6;5417;5425;5433;5441;5494:3;5482:9;5473:7;5469:23;5465:33;5462:53;;;5511:1;5508;5501:12;5462:53;5547:9;5534:23;5524:33;;5604:2;5593:9;5589:18;5576:32;5566:42;;5655:2;5644:9;5640:18;5627:32;5617:42;;5709:2;5698:9;5694:18;5681:32;5722:28;5744:5;5722:28;:::i;:::-;5317:515;;;;-1:-1:-1;5317:515:1;;5821:3;5806:19;5793:33;;5317:515;-1:-1:-1;;5317:515:1:o;5837:180::-;5896:6;5949:2;5937:9;5928:7;5924:23;5920:32;5917:52;;;5965:1;5962;5955:12;5917:52;-1:-1:-1;5988:23:1;;5837:180;-1:-1:-1;5837:180:1:o;6230:410::-;6320:6;6328;6381:2;6369:9;6360:7;6356:23;6352:32;6349:52;;;6397:1;6394;6387:12;6349:52;6436:9;6423:23;6455:31;6480:5;6455:31;:::i;:::-;6505:5;-1:-1:-1;6562:2:1;6547:18;;6534:32;6575:33;6534:32;6575:33;:::i;:::-;6627:7;6617:17;;;6230:410;;;;;:::o;6645:385::-;6731:6;6739;6747;6755;6808:3;6796:9;6787:7;6783:23;6779:33;6776:53;;;6825:1;6822;6815:12;6776:53;-1:-1:-1;;6848:23:1;;;6918:2;6903:18;;6890:32;;-1:-1:-1;6969:2:1;6954:18;;6941:32;;7020:2;7005:18;6992:32;;-1:-1:-1;6645:385:1;-1:-1:-1;6645:385:1:o;7431:523::-;7535:6;7543;7551;7559;7567;7575;7628:3;7616:9;7607:7;7603:23;7599:33;7596:53;;;7645:1;7642;7635:12;7596:53;-1:-1:-1;;7668:23:1;;;7738:2;7723:18;;7710:32;;-1:-1:-1;7789:2:1;7774:18;;7761:32;;7840:2;7825:18;;7812:32;;-1:-1:-1;7891:3:1;7876:19;;7863:33;;-1:-1:-1;7943:3:1;7928:19;7915:33;;-1:-1:-1;7431:523:1;-1:-1:-1;7431:523:1:o;7959:382::-;8024:6;8032;8085:2;8073:9;8064:7;8060:23;8056:32;8053:52;;;8101:1;8098;8091:12;8053:52;8140:9;8127:23;8159:31;8184:5;8159:31;:::i;:::-;8209:5;-1:-1:-1;8266:2:1;8251:18;;8238:32;8279:30;8238:32;8279:30;:::i;9279:380::-;9358:1;9354:12;;;;9401;;;9422:61;;9476:4;9468:6;9464:17;9454:27;;9422:61;9529:2;9521:6;9518:14;9498:18;9495:38;9492:161;;9575:10;9570:3;9566:20;9563:1;9556:31;9610:4;9607:1;9600:15;9638:4;9635:1;9628:15;9492:161;;9279:380;;;:::o;9664:127::-;9725:10;9720:3;9716:20;9713:1;9706:31;9756:4;9753:1;9746:15;9780:4;9777:1;9770:15;9796:127;9857:10;9852:3;9848:20;9845:1;9838:31;9888:4;9885:1;9878:15;9912:4;9909:1;9902:15;9928:135;9967:3;9988:17;;;9985:43;;10008:18;;:::i;:::-;-1:-1:-1;10055:1:1;10044:13;;9928:135::o;10068:125::-;10133:9;;;10154:10;;;10151:36;;;10167:18;;:::i;11753:184::-;11823:6;11876:2;11864:9;11855:7;11851:23;11847:32;11844:52;;;11892:1;11889;11882:12;11844:52;-1:-1:-1;11915:16:1;;11753:184;-1:-1:-1;11753:184:1:o;12229:245::-;12296:6;12349:2;12337:9;12328:7;12324:23;12320:32;12317:52;;;12365:1;12362;12355:12;12317:52;12397:9;12391:16;12416:28;12438:5;12416:28;:::i;12479:251::-;12549:6;12602:2;12590:9;12581:7;12577:23;12573:32;12570:52;;;12618:1;12615;12608:12;12570:52;12650:9;12644:16;12669:31;12694:5;12669:31;:::i;12735:980::-;12997:4;13045:3;13034:9;13030:19;13076:6;13065:9;13058:25;13102:2;13140:6;13135:2;13124:9;13120:18;13113:34;13183:3;13178:2;13167:9;13163:18;13156:31;13207:6;13242;13236:13;13273:6;13265;13258:22;13311:3;13300:9;13296:19;13289:26;;13350:2;13342:6;13338:15;13324:29;;13371:1;13381:195;13395:6;13392:1;13389:13;13381:195;;;13460:13;;-1:-1:-1;;;;;13456:39:1;13444:52;;13551:15;;;;13516:12;;;;13492:1;13410:9;13381:195;;;-1:-1:-1;;;;;;;13632:32:1;;;;13627:2;13612:18;;13605:60;-1:-1:-1;;;13696:3:1;13681:19;13674:35;13593:3;12735:980;-1:-1:-1;;;12735:980:1:o;17183:217::-;17223:1;17249;17239:132;;17293:10;17288:3;17284:20;17281:1;17274:31;17328:4;17325:1;17318:15;17356:4;17353:1;17346:15;17239:132;-1:-1:-1;17385:9:1;;17183:217::o;22230:168::-;22303:9;;;22334;;22351:15;;;22345:22;;22331:37;22321:71;;22372:18;;:::i;22403:128::-;22470:9;;;22491:11;;;22488:37;;;22505:18;;:::i
Swarm Source
ipfs://d980b706fd2ee55d17545f264ff1c08192a1cd0c5f8f15f4b6b27c5c6f63d69e
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.