ERC-20
Overview
Max Total Supply
100,000,000 PBL
Holders
101
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1.283571691668130635 PBLValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PBLToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-31 */ // 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: poms.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 PBLToken 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 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 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 = "POM Blend"; _symbol = "PBL"; _decimals = 18; _totalSupply = 100_000_000 * (10 ** decimals()); feeExempt[msg.sender] = true; txLimitExempt[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"] = 100; // 1% txFees["liqBuy"] = 250; txFees["farmingBuy"] = 100; txFees["marketingSell"] = 200; txFees["liqSell"] = 500; txFees["farmingSell"] = 200; /** Set default tx limits - Cooldown, buy limit, sell limit */ txLimits.cooldown = 30 seconds; txLimits.buyLimit = _totalSupply.div(100); txLimits.sellLimit = _totalSupply.div(100); swapTokens.swapTokensAt = _totalSupply.div(1394); // 0.1% swapTokens.minToSend = 10_000 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; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } /** Sets buy/sell transaction fees */ 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 <= 800, "Marketing fee is too high!"); require(_liqBuy <= 800, "Dev fee is too high!"); require(_farmingBuy <= 800, "Farming fee is too high!"); require(_marketingSell <= 800, "Marketing fee is too high!"); require(_liqSell <= 800, "Dev fee is too high!"); require(_farmingSell <= 800, "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; } /** 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) 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!"); txLimits.buyLimit = _buyLimit; txLimits.sellLimit = _sellLimit; txLimits.cooldown = _cooldown; txLimits.inactive = _inactive; } /** Sell tokens at */ function setSwapTokens(uint _swapTokensAt, uint _lastSwap, uint _delay) external onlyOwner { swapTokens.swapTokensAt = _swapTokensAt; swapTokens.lastSwap = _lastSwap; swapTokens.swapDelay = _delay; } /** 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.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) { // 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":"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":"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"}],"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"}],"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":[{"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a8054336001600160a01b03199182168117909255600b8054821683179055600c805490911690911790553480156200003d57600080fd5b50620000493362000614565b604080518082019091526009808252681413d348109b195b9960ba1b60209092019182526200007b91600491620007c1565b506040805180820190915260038082526214109360ea1b6020909201918252620000a891600591620007c1565b506006805460ff19166012908117909155620000c690600a62000929565b620000d6906305f5e100620009e8565b6003553360009081526008602081815260408084208054600160ff1991821681179092556009808552838720805483168417905530875285855283872080548316841790558085528387208054831684179055600a80546001600160a01b03908116895287875285892080548516861790559054811688528186528488208054841685179055600b805482168952878752858920805485168617905554811688528186528488208054841685179055600c80548216895296865284882080548416851790558654168752909352938190208054909216909317905590516b6d61726b6574696e6742757960a01b81526064916007910190815260405190819003602001812091909155656c697142757960d01b815260fa9060079060060190815260405190819003602001812091909155696661726d696e6742757960b01b8152606490600790600a01908152604051908190036020018120919091556c1b585c9ad95d1a5b99d4d95b1b609a1b815260c890600790600d0190815260405190819003602001812091909155661b1a5c54d95b1b60ca1b81526101f4906007908101908152604051908190036020018120919091556a19985c9b5a5b99d4d95b1b60aa1b815260c890600790600b019081526040516020918190038201902091909155601e600f55600354620002d89160649062000664811b6200128917901c565b600d55600354620002f790606462000664602090811b6200128917901c565b600e55600354620003179061057262000664602090811b6200128917901c565b60145569021e19e0c9bab2400000601755603c601655601880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556003546200036890309083906200067b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a257600080fd5b505afa158015620003b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dd919062000867565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042657600080fd5b505afa1580156200043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000461919062000867565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004aa57600080fd5b505af1158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e5919062000867565b601980546001600160a01b0319166001600160a01b0392831690811790915560185460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200054857600080fd5b505af11580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000583919062000899565b506018546003546200059f916001600160a01b031690620007a7565b506018546001600160a01b03166000908152600860209081526040808320805460ff1916600190811790915560035433808652918452828520819055915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000a5d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620006728284620008bd565b90505b92915050565b6001600160a01b038316620006e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006da565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600033620007b78185856200067b565b5060019392505050565b828054620007cf9062000a0a565b90600052602060002090601f016020900481019282620007f357600085556200083e565b82601f106200080e57805160ff19168380011785556200083e565b828001600101855582156200083e579182015b828111156200083e57825182559160200191906001019062000821565b506200084c92915062000850565b5090565b5b808211156200084c576000815560010162000851565b6000602082840312156200087a57600080fd5b81516001600160a01b03811681146200089257600080fd5b9392505050565b600060208284031215620008ac57600080fd5b815180151581146200089257600080fd5b600082620008db57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200092157816000190482111562000905576200090562000a47565b808516156200091357918102915b93841c9390800290620008e5565b509250929050565b60006200067260ff841683600082620009455750600162000675565b81620009545750600062000675565b81600181146200096d5760028114620009785762000998565b600191505062000675565b60ff8411156200098c576200098c62000a47565b50506001821b62000675565b5060208310610133831016604e8410600b8410161715620009bd575081810a62000675565b620009c98383620008e0565b8060001904821115620009e057620009e062000a47565b029392505050565b600081600019048311821515161562000a055762000a0562000a47565b500290565b600181811c9082168062000a1f57607f821691505b6020821081141562000a4157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6124b48062000a6d6000396000f3fe6080604052600436106102075760003560e01c80636519aa24116101185780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146106a1578063b7bda68f146106c1578063db8d55f1146106e1578063dd62ed3e14610723578063f2fde38b1461074357600080fd5b80638da5cb5b1461062e5780638ebfc7961461064c57806395d89b411461066c578063a457c2d71461068157600080fd5b8063715018a6116100e7578063715018a61461057657806373d002241461058b57806386f6c3c1146105ce5780638a2ade58146105ee5780638d7a8ba71461060e57600080fd5b80636519aa24146104e05780636745297e146105005780636d61c49d1461052057806370a082311461054057600080fd5b8063313ce5671161019b57806342966c681161016a57806342966c681461044b57806349bd5a5e1461046b57806349d3c1351461048b5780634d0047ee146104a0578063526731e6146104c057600080fd5b8063313ce567146103a9578063361f4fb4146103cb57806339509351146103fb578063398daa851461041b57600080fd5b80631694505e116101d75780631694505e1461031057806318160ddd1461034857806323b872dd146103675780632d4862481461038757600080fd5b806220a4031461021357806303f3d3101461028057806306fdde03146102be578063095ea7b3146102e057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061026061022e366004612066565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b34801561028c57600080fd5b50600d54600e54600f5460105460ff166040805194855260208501939093529183015215156060820152608001610277565b3480156102ca57600080fd5b506102d3610763565b60405161027791906122be565b3480156102ec57600080fd5b506103006102fb366004612193565b6107f5565b6040519015158152602001610277565b34801561031c57600080fd5b50601854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561035457600080fd5b506003545b604051908152602001610277565b34801561037357600080fd5b50610300610382366004612124565b61080d565b34801561039357600080fd5b506103a76103a23660046120d9565b610831565b005b3480156103b557600080fd5b5060065460405160ff9091168152602001610277565b3480156103d757600080fd5b506103006103e6366004612066565b60096020526000908152604090205460ff1681565b34801561040757600080fd5b50610300610416366004612193565b610878565b34801561042757600080fd5b50610300610436366004612066565b60086020526000908152604090205460ff1681565b34801561045757600080fd5b506103a76104663660046121dc565b61089a565b34801561047757600080fd5b50601954610330906001600160a01b031681565b34801561049757600080fd5b506103a76108a7565b3480156104ac57600080fd5b50600c54610330906001600160a01b031681565b3480156104cc57600080fd5b506103a76104db3660046120a0565b6108b9565b3480156104ec57600080fd5b506103a76104fb3660046121dc565b6109c5565b34801561050c57600080fd5b506103a761051b36600461223a565b610b36565b34801561052c57600080fd5b506103a761053b36600461220e565b610c96565b34801561054c57600080fd5b5061035961055b366004612066565b6001600160a01b031660009081526001602052604090205490565b34801561058257600080fd5b506103a7610cac565b34801561059757600080fd5b506014546015546016546017546105ae9392919084565b604080519485526020850193909352918301526060820152608001610277565b3480156105da57600080fd5b506103a76105e936600461227b565b610cc0565b3480156105fa57600080fd5b50600a54610330906001600160a01b031681565b34801561061a57600080fd5b506103a7610629366004612165565b610fde565b34801561063a57600080fd5b506000546001600160a01b0316610330565b34801561065857600080fd5b506103a7610667366004612165565b611011565b34801561067857600080fd5b506102d3611044565b34801561068d57600080fd5b5061030061069c366004612193565b611053565b3480156106ad57600080fd5b506103006106bc366004612193565b6110ce565b3480156106cd57600080fd5b50600b54610330906001600160a01b031681565b3480156106ed57600080fd5b506106f66110dc565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610277565b34801561072f57600080fd5b5061035961073e3660046120a0565b6111e8565b34801561074f57600080fd5b506103a761075e366004612066565b611213565b606060048054610772906123f4565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906123f4565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b60003361080381858561129c565b5060019392505050565b60003361081b8582856113c1565b61082685858561143b565b506001949350505050565b61083961198a565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b60003361080381858561088b83836111e8565b6108959190612384565b61129c565b6108a433826119e4565b50565b6108af61198a565b476108a481611b10565b6108c161198a565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a082319060240160206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906121f5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c091906121bf565b505050565b6109cd61198a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610a0257610a02612445565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612083565b81600181518110610aa157610aa1612445565b6001600160a01b039283166020918202929092010152601854610ac7913091168461129c565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790610b00908590600090869030904290600401612313565b600060405180830381600087803b158015610b1a57600080fd5b505af1158015610b2e573d6000803e3d6000fd5b505050505050565b610b3e61198a565b600354610b4c9060c8611289565b841015610baa5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610bb990610190611289565b831015610c135760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610ba1565b610708821115610c745760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610ba1565b600d93909355600e91909155600f556010805460ff1916911515919091179055565b610c9e61198a565b601492909255601555601655565b610cb461198a565b610cbe6000611cda565b565b610cc861198a565b610320861115610d1a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320851115610d635760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320841115610db05760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b610320831115610e025760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320821115610e4b5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320811115610e985760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b856007604051610eba906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b610fe661198a565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61101961198a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b606060058054610772906123f4565b6000338161106182866111e8565b9050838110156110c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba1565b610826828686840361129c565b60003361080381858561143b565b6000806000806000806007604051611106906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61121b61198a565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba1565b6108a481611cda565b6000611295828461239c565b9392505050565b6001600160a01b0383166112fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba1565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006113cd84846111e8565b9050600019811461143557818110156114285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ba1565b611435848484840361129c565b50505050565b6001600160a01b03831661149f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba1565b6001600160a01b0382166115015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba1565b6001600160a01b038316600090815260016020526040902054818110156115795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba1565b601954600090819081906001906001600160a01b038981169116141561162c576115a38787611d2a565b6115af60008888611e39565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506116d3565b6019546001600160a01b03888116911614156116d35761164c8887611f37565b61165860018988611e39565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061172557506001600160a01b03881660009081526008602052604090205460ff165b1561172e575060005b80801561175f57506019546001600160a01b038881169116148061175f57506019546001600160a01b038981169116145b156119045761178860405180606001604052806000815260200160008152602001600081525090565b61179e6127106117988988612042565b90611289565b81526117b06127106117988987612042565b60208201526117c56127106117988986612042565b60408201819052602082015182516000926117eb9290916117e59161204e565b9061204e565b90506117f7888261205a565b3060009081526001602052604081208054929a50839290919061181b908490612384565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3306000908152600160205260409020546014548111801561188f575060165460155461188c9190612384565b42115b80156118a857506019546001600160a01b038b81169116145b15611900576014546118c4906103e8906117989061044c612042565b8111156118dc576014546118d7906109cd565b6118e5565b6118e5816109cd565b4260155560175447908111156118fe576118fe81611b10565b505b5050505b6001600160a01b0387166000908152600160205260408120805488929061192c908490612384565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161197891815260200190565b60405180910390a35050505050505050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba1565b6001600160a01b038216611a445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ba1565b6001600160a01b03821660009081526001602052604090205481811015611ab85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ba1565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113b4565b600c546000906001600160a01b0316611b2a836003611289565b604051600081818185875af1925050503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b5050600a549091506000906001600160a01b0316611b8a846003611289565b604051600081818185875af1925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b5050600b549091506000906001600160a01b0316611bea856003611289565b604051600081818185875af1925050503d8060008114611c26576040519150601f19603f3d011682016040523d82523d6000602084013e611c2b565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611c62911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460ff16151560011480611d5d57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611d8b5750600d546001600160a01b038316600090815260116020526040902054611d89908361204e565b105b80611de95750600d546001600160a01b038316600090815260116020526040902054611db7908361204e565b118015611de95750600f546001600160a01b0383166000908152601360205260409020544291611de7919061204e565b105b611e355760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610ba1565b5050565b600f546001600160a01b0383166000908152601360205260409020544291611e61919061204e565b1015611eb05782611e8d576001600160a01b038216600090815260116020526040902081905580611eaa565b6001600160a01b0382166000908152601260205260409020819055805b50611f19565b82611ee8576001600160a01b03821660009081526011602052604081208054839290611edd908490612384565b925050819055611f17565b6001600160a01b03821660009081526012602052604081208054839290611f10908490612384565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b60105460ff16151560011480611f6a57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611f985750600e546001600160a01b038316600090815260126020526040902054611f96908361204e565b105b80611ff65750600e546001600160a01b038316600090815260126020526040902054611fc4908361204e565b118015611ff65750600f546001600160a01b0383166000908152601360205260409020544291611ff4919061204e565b105b611e355760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610ba1565b600061129582846123be565b60006112958284612384565b600061129582846123dd565b60006020828403121561207857600080fd5b81356112958161245b565b60006020828403121561209557600080fd5b81516112958161245b565b600080604083850312156120b357600080fd5b82356120be8161245b565b915060208301356120ce8161245b565b809150509250929050565b6000806000606084860312156120ee57600080fd5b83356120f98161245b565b925060208401356121098161245b565b915060408401356121198161245b565b809150509250925092565b60008060006060848603121561213957600080fd5b83356121448161245b565b925060208401356121548161245b565b929592945050506040919091013590565b6000806040838503121561217857600080fd5b82356121838161245b565b915060208301356120ce81612470565b600080604083850312156121a657600080fd5b82356121b18161245b565b946020939093013593505050565b6000602082840312156121d157600080fd5b815161129581612470565b6000602082840312156121ee57600080fd5b5035919050565b60006020828403121561220757600080fd5b5051919050565b60008060006060848603121561222357600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561225057600080fd5b843593506020850135925060408501359150606085013561227081612470565b939692955090935050565b60008060008060008060c0878903121561229457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156122eb578581018301518582016040015282016122cf565b818111156122fd576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123635784516001600160a01b03168352938301939183019160010161233e565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156123975761239761242f565b500190565b6000826123b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123d8576123d861242f565b500290565b6000828210156123ef576123ef61242f565b500390565b600181811c9082168061240857607f821691505b6020821081141561242957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108a457600080fd5b80151581146108a457600080fdfea26469706673582212209ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc2364736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102075760003560e01c80636519aa24116101185780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146106a1578063b7bda68f146106c1578063db8d55f1146106e1578063dd62ed3e14610723578063f2fde38b1461074357600080fd5b80638da5cb5b1461062e5780638ebfc7961461064c57806395d89b411461066c578063a457c2d71461068157600080fd5b8063715018a6116100e7578063715018a61461057657806373d002241461058b57806386f6c3c1146105ce5780638a2ade58146105ee5780638d7a8ba71461060e57600080fd5b80636519aa24146104e05780636745297e146105005780636d61c49d1461052057806370a082311461054057600080fd5b8063313ce5671161019b57806342966c681161016a57806342966c681461044b57806349bd5a5e1461046b57806349d3c1351461048b5780634d0047ee146104a0578063526731e6146104c057600080fd5b8063313ce567146103a9578063361f4fb4146103cb57806339509351146103fb578063398daa851461041b57600080fd5b80631694505e116101d75780631694505e1461031057806318160ddd1461034857806323b872dd146103675780632d4862481461038757600080fd5b806220a4031461021357806303f3d3101461028057806306fdde03146102be578063095ea7b3146102e057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061026061022e366004612066565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b34801561028c57600080fd5b50600d54600e54600f5460105460ff166040805194855260208501939093529183015215156060820152608001610277565b3480156102ca57600080fd5b506102d3610763565b60405161027791906122be565b3480156102ec57600080fd5b506103006102fb366004612193565b6107f5565b6040519015158152602001610277565b34801561031c57600080fd5b50601854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561035457600080fd5b506003545b604051908152602001610277565b34801561037357600080fd5b50610300610382366004612124565b61080d565b34801561039357600080fd5b506103a76103a23660046120d9565b610831565b005b3480156103b557600080fd5b5060065460405160ff9091168152602001610277565b3480156103d757600080fd5b506103006103e6366004612066565b60096020526000908152604090205460ff1681565b34801561040757600080fd5b50610300610416366004612193565b610878565b34801561042757600080fd5b50610300610436366004612066565b60086020526000908152604090205460ff1681565b34801561045757600080fd5b506103a76104663660046121dc565b61089a565b34801561047757600080fd5b50601954610330906001600160a01b031681565b34801561049757600080fd5b506103a76108a7565b3480156104ac57600080fd5b50600c54610330906001600160a01b031681565b3480156104cc57600080fd5b506103a76104db3660046120a0565b6108b9565b3480156104ec57600080fd5b506103a76104fb3660046121dc565b6109c5565b34801561050c57600080fd5b506103a761051b36600461223a565b610b36565b34801561052c57600080fd5b506103a761053b36600461220e565b610c96565b34801561054c57600080fd5b5061035961055b366004612066565b6001600160a01b031660009081526001602052604090205490565b34801561058257600080fd5b506103a7610cac565b34801561059757600080fd5b506014546015546016546017546105ae9392919084565b604080519485526020850193909352918301526060820152608001610277565b3480156105da57600080fd5b506103a76105e936600461227b565b610cc0565b3480156105fa57600080fd5b50600a54610330906001600160a01b031681565b34801561061a57600080fd5b506103a7610629366004612165565b610fde565b34801561063a57600080fd5b506000546001600160a01b0316610330565b34801561065857600080fd5b506103a7610667366004612165565b611011565b34801561067857600080fd5b506102d3611044565b34801561068d57600080fd5b5061030061069c366004612193565b611053565b3480156106ad57600080fd5b506103006106bc366004612193565b6110ce565b3480156106cd57600080fd5b50600b54610330906001600160a01b031681565b3480156106ed57600080fd5b506106f66110dc565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610277565b34801561072f57600080fd5b5061035961073e3660046120a0565b6111e8565b34801561074f57600080fd5b506103a761075e366004612066565b611213565b606060048054610772906123f4565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906123f4565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b60003361080381858561129c565b5060019392505050565b60003361081b8582856113c1565b61082685858561143b565b506001949350505050565b61083961198a565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b60003361080381858561088b83836111e8565b6108959190612384565b61129c565b6108a433826119e4565b50565b6108af61198a565b476108a481611b10565b6108c161198a565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a082319060240160206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906121f5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c091906121bf565b505050565b6109cd61198a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610a0257610a02612445565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612083565b81600181518110610aa157610aa1612445565b6001600160a01b039283166020918202929092010152601854610ac7913091168461129c565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790610b00908590600090869030904290600401612313565b600060405180830381600087803b158015610b1a57600080fd5b505af1158015610b2e573d6000803e3d6000fd5b505050505050565b610b3e61198a565b600354610b4c9060c8611289565b841015610baa5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610bb990610190611289565b831015610c135760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610ba1565b610708821115610c745760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610ba1565b600d93909355600e91909155600f556010805460ff1916911515919091179055565b610c9e61198a565b601492909255601555601655565b610cb461198a565b610cbe6000611cda565b565b610cc861198a565b610320861115610d1a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320851115610d635760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320841115610db05760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b610320831115610e025760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320821115610e4b5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320811115610e985760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b856007604051610eba906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b610fe661198a565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61101961198a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b606060058054610772906123f4565b6000338161106182866111e8565b9050838110156110c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba1565b610826828686840361129c565b60003361080381858561143b565b6000806000806000806007604051611106906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61121b61198a565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba1565b6108a481611cda565b6000611295828461239c565b9392505050565b6001600160a01b0383166112fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba1565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006113cd84846111e8565b9050600019811461143557818110156114285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ba1565b611435848484840361129c565b50505050565b6001600160a01b03831661149f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba1565b6001600160a01b0382166115015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba1565b6001600160a01b038316600090815260016020526040902054818110156115795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba1565b601954600090819081906001906001600160a01b038981169116141561162c576115a38787611d2a565b6115af60008888611e39565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506116d3565b6019546001600160a01b03888116911614156116d35761164c8887611f37565b61165860018988611e39565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061172557506001600160a01b03881660009081526008602052604090205460ff165b1561172e575060005b80801561175f57506019546001600160a01b038881169116148061175f57506019546001600160a01b038981169116145b156119045761178860405180606001604052806000815260200160008152602001600081525090565b61179e6127106117988988612042565b90611289565b81526117b06127106117988987612042565b60208201526117c56127106117988986612042565b60408201819052602082015182516000926117eb9290916117e59161204e565b9061204e565b90506117f7888261205a565b3060009081526001602052604081208054929a50839290919061181b908490612384565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3306000908152600160205260409020546014548111801561188f575060165460155461188c9190612384565b42115b80156118a857506019546001600160a01b038b81169116145b15611900576014546118c4906103e8906117989061044c612042565b8111156118dc576014546118d7906109cd565b6118e5565b6118e5816109cd565b4260155560175447908111156118fe576118fe81611b10565b505b5050505b6001600160a01b0387166000908152600160205260408120805488929061192c908490612384565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161197891815260200190565b60405180910390a35050505050505050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba1565b6001600160a01b038216611a445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ba1565b6001600160a01b03821660009081526001602052604090205481811015611ab85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ba1565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113b4565b600c546000906001600160a01b0316611b2a836003611289565b604051600081818185875af1925050503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b5050600a549091506000906001600160a01b0316611b8a846003611289565b604051600081818185875af1925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b5050600b549091506000906001600160a01b0316611bea856003611289565b604051600081818185875af1925050503d8060008114611c26576040519150601f19603f3d011682016040523d82523d6000602084013e611c2b565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611c62911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460ff16151560011480611d5d57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611d8b5750600d546001600160a01b038316600090815260116020526040902054611d89908361204e565b105b80611de95750600d546001600160a01b038316600090815260116020526040902054611db7908361204e565b118015611de95750600f546001600160a01b0383166000908152601360205260409020544291611de7919061204e565b105b611e355760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610ba1565b5050565b600f546001600160a01b0383166000908152601360205260409020544291611e61919061204e565b1015611eb05782611e8d576001600160a01b038216600090815260116020526040902081905580611eaa565b6001600160a01b0382166000908152601260205260409020819055805b50611f19565b82611ee8576001600160a01b03821660009081526011602052604081208054839290611edd908490612384565b925050819055611f17565b6001600160a01b03821660009081526012602052604081208054839290611f10908490612384565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b60105460ff16151560011480611f6a57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611f985750600e546001600160a01b038316600090815260126020526040902054611f96908361204e565b105b80611ff65750600e546001600160a01b038316600090815260126020526040902054611fc4908361204e565b118015611ff65750600f546001600160a01b0383166000908152601360205260409020544291611ff4919061204e565b105b611e355760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610ba1565b600061129582846123be565b60006112958284612384565b600061129582846123dd565b60006020828403121561207857600080fd5b81356112958161245b565b60006020828403121561209557600080fd5b81516112958161245b565b600080604083850312156120b357600080fd5b82356120be8161245b565b915060208301356120ce8161245b565b809150509250929050565b6000806000606084860312156120ee57600080fd5b83356120f98161245b565b925060208401356121098161245b565b915060408401356121198161245b565b809150509250925092565b60008060006060848603121561213957600080fd5b83356121448161245b565b925060208401356121548161245b565b929592945050506040919091013590565b6000806040838503121561217857600080fd5b82356121838161245b565b915060208301356120ce81612470565b600080604083850312156121a657600080fd5b82356121b18161245b565b946020939093013593505050565b6000602082840312156121d157600080fd5b815161129581612470565b6000602082840312156121ee57600080fd5b5035919050565b60006020828403121561220757600080fd5b5051919050565b60008060006060848603121561222357600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561225057600080fd5b843593506020850135925060408501359150606085013561227081612470565b939692955090935050565b60008060008060008060c0878903121561229457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156122eb578581018301518582016040015282016122cf565b818111156122fd576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123635784516001600160a01b03168352938301939183019160010161233e565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156123975761239761242f565b500190565b6000826123b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123d8576123d861242f565b500290565b6000828210156123ef576123ef61242f565b500390565b600181811c9082168061240857607f821691505b6020821081141561242957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108a457600080fd5b80151581146108a457600080fdfea26469706673582212209ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc2364736f6c63430008070033
Deployed Bytecode Sourcemap
17948:21718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27107:199;;;;;;;;;;-1:-1:-1;27107:199:0;;;;;:::i;:::-;-1:-1:-1;;;;;27221:23:0;27166:9;27221:23;;;:13;:23;;;;;;;;;27246:14;:24;;;;;;27272:15;:25;;;;;;27221:23;;27246:24;;27272:25;27107:199;;;;;17001:25:1;;;17057:2;17042:18;;17035:34;;;;17085:18;;;17078:34;16989:2;16974:18;27107:199:0;;;;;;;;25020:207;;;;;;;;;;-1:-1:-1;25143:8:0;:17;25162:18;;25182:17;;25201;;;;25020:207;;;17348:25:1;;;17404:2;17389:18;;17382:34;;;;17432:18;;;17425:34;17502:14;17495:22;17490:2;17475:18;;17468:50;17335:3;17320:19;25020:207:0;17123:401:1;29157:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30779:201::-;;;;;;;;;;-1:-1:-1;30779:201:0;;;;;:::i;:::-;;:::i;:::-;;;7419:14:1;;7412:22;7394:41;;7382:2;7367:18;30779:201:0;7254:187:1;19298:41:0;;;;;;;;;;-1:-1:-1;19298:41:0;;;;-1:-1:-1;;;;;19298:41:0;;;;;;-1:-1:-1;;;;;6923:32:1;;;6905:51;;6893:2;6878:18;19298:41:0;6759:203:1;29599:108:0;;;;;;;;;;-1:-1:-1;29687:12:0;;29599:108;;;15778:25:1;;;15766:2;15751:18;29599:108:0;15632:177:1;31561:295:0;;;;;;;;;;-1:-1:-1;31561:295:0;;;;;:::i;:::-;;:::i;23342:254::-;;;;;;;;;;-1:-1:-1;23342:254:0;;;;;:::i;:::-;;:::i;:::-;;29490:100;;;;;;;;;;-1:-1:-1;29573:9:0;;29490:100;;29573:9;;;;18607:36:1;;18595:2;18580:18;29490:100:0;18465:184:1;18494:46:0;;;;;;;;;;-1:-1:-1;18494:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32266:238;;;;;;;;;;-1:-1:-1;32266:238:0;;;;;:::i;:::-;;:::i;18445:42::-;;;;;;;;;;-1:-1:-1;18445:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39572:91;;;;;;;;;;-1:-1:-1;39572:91:0;;;;;:::i;:::-;;:::i;19346:28::-;;;;;;;;;;-1:-1:-1;19346:28:0;;;;-1:-1:-1;;;;;19346:28:0;;;28319:169;;;;;;;;;;;;;:::i;18644:46::-;;;;;;;;;;-1:-1:-1;18644:46:0;;;;-1:-1:-1;;;;;18644:46:0;;;28935:151;;;;;;;;;;-1:-1:-1;28935:151:0;;;;;:::i;:::-;;:::i;27831:479::-;;;;;;;;;;-1:-1:-1;27831:479:0;;;;;:::i;:::-;;:::i;24094:564::-;;;;;;;;;;-1:-1:-1;24094:564:0;;;;;:::i;:::-;;:::i;24708:231::-;;;;;;;;;;-1:-1:-1;24708:231:0;;;;;:::i;:::-;;:::i;29716:127::-;;;;;;;;;;-1:-1:-1;29716:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;29817:18:0;29790:7;29817:18;;;:9;:18;;;;;;;29716:127;10086:103;;;;;;;;;;;;;:::i;19261:27::-;;;;;;;;;;-1:-1:-1;19261:27:0;;;;;;;;;;;;;;;;;;;17760:25:1;;;17816:2;17801:18;;17794:34;;;;17844:18;;;17837:34;17902:2;17887:18;;17880:34;17747:3;17732:19;19261:27:0;17529:391:1;21692:1066:0;;;;;;;;;;-1:-1:-1;21692:1066:0;;;;;:::i;:::-;;:::i;18550:42::-;;;;;;;;;;-1:-1:-1;18550:42:0;;;;-1:-1:-1;;;;;18550:42:0;;;23889:127;;;;;;;;;;-1:-1:-1;23889:127:0;;;;;:::i;:::-;;:::i;9436:87::-;;;;;;;;;;-1:-1:-1;9482:7:0;9509:6;-1:-1:-1;;;;;9509:6:0;9436:87;;23682:119;;;;;;;;;;-1:-1:-1;23682:119:0;;;;;:::i;:::-;;:::i;29377:104::-;;;;;;;;;;;;;:::i;33008:437::-;;;;;;;;;;-1:-1:-1;33008:437:0;;;;;:::i;:::-;;:::i;30050:193::-;;;;;;;;;;-1:-1:-1;30050:193:0;;;;;:::i;:::-;;:::i;18599:38::-;;;;;;;;;;-1:-1:-1;18599:38:0;;;;-1:-1:-1;;;;;18599:38:0;;;22827:447;;;;;;;;;;;;;:::i;:::-;;;;18212:25:1;;;18268:2;18253:18;;18246:34;;;;18296:18;;;18289:34;;;;18354:2;18339:18;;18332:34;18397:3;18382:19;;18375:35;18441:3;18426:19;;18419:35;18199:3;18184:19;22827:447:0;17925:535:1;30307:151:0;;;;;;;;;;-1:-1:-1;30307:151:0;;;;;:::i;:::-;;:::i;10345:201::-;;;;;;;;;;-1:-1:-1;10345:201:0;;;;;:::i;:::-;;:::i;29157:100::-;29211:13;29244:5;29237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29157:100;:::o;30779:201::-;30862:4;8003:10;30918:32;8003:10;30934:7;30943:6;30918:8;:32::i;:::-;-1:-1:-1;30968:4:0;;30779:201;-1:-1:-1;;;30779:201:0:o;31561:295::-;31692:4;8003:10;31750:38;31766:4;8003:10;31781:6;31750:15;:38::i;:::-;31799:27;31809:4;31815:2;31819:6;31799:9;:27::i;:::-;-1:-1:-1;31844:4:0;;31561:295;-1:-1:-1;;;;31561:295:0:o;23342:254::-;9321:13;:11;:13::i;:::-;23470:14:::1;:32:::0;;-1:-1:-1;;;;;23470:32:0;;::::1;-1:-1:-1::0;;;;;;23470:32:0;;::::1;;::::0;;;23513:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;23548:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;23342:254::o;32266:238::-;32354:4;8003:10;32410:64;8003:10;32426:7;32463:10;32435:25;8003:10;32426:7;32435:9;:25::i;:::-;:38;;;;:::i;:::-;32410:8;:64::i;39572:91::-;39628:27;8003:10;39648:6;39628:5;:27::i;:::-;39572:91;:::o;28319:169::-;9321:13;:11;:13::i;:::-;28409:21:::1;28441:39;28409:21:::0;28441:16:::1;:39::i;28935:151::-:0;9321:13;:11;:13::i;:::-;29046:31:::1;::::0;-1:-1:-1;;;29046:31:0;;29071:4:::1;29046:31;::::0;::::1;6905:51:1::0;-1:-1:-1;;;;;29025:15:0;::::1;::::0;::::1;::::0;29041:3;;29025:15;;29046:16:::1;::::0;6878:18:1;;29046:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29025:53;::::0;-1:-1:-1;;;;;;29025:53:0::1;::::0;;;;;;-1:-1:-1;;;;;7167:32:1;;;29025:53:0::1;::::0;::::1;7149:51:1::0;7216:18;;;7209:34;7122:18;;29025:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28935:151:::0;;:::o;27831:479::-;9321:13;:11;:13::i;:::-;27937:16:::1;::::0;;27951:1:::1;27937:16:::0;;;;;::::1;::::0;;27913:21:::1;::::0;27937:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27937:16:0::1;27913:40;;27982:4;27964;27969:1;27964:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27964:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28008:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;28008:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;27964:7;;28008:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27998:4;28003:1;27998:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27998:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;28073:15:::1;::::0;28041:58:::1;::::0;28058:4:::1;::::0;28073:15:::1;28091:7:::0;28041:8:::1;:58::i;:::-;28110:15;::::0;:192:::1;::::0;-1:-1:-1;;;28110:192:0;;-1:-1:-1;;;;;28110:15:0;;::::1;::::0;:66:::1;::::0;:192:::1;::::0;28191:7;;28110:15:::1;::::0;28229:4;;28256::::1;::::0;28276:15:::1;::::0;28110:192:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27902:408;27831:479:::0;:::o;24094:564::-;9321:13;:11;:13::i;:::-;24231:12:::1;::::0;:21:::1;::::0;24248:3:::1;24231:16;:21::i;:::-;24218:9;:34;;24210:80;;;::::0;-1:-1:-1;;;24210:80:0;;12289:2:1;24210:80:0::1;::::0;::::1;12271:21:1::0;12328:2;12308:18;;;12301:30;12367:34;12347:18;;;12340:62;-1:-1:-1;;;12418:18:1;;;12411:31;12459:19;;24210:80:0::1;;;;;;;;;24331:12;::::0;:21:::1;::::0;24348:3:::1;24331:16;:21::i;:::-;24317:10;:35;;24309:82;;;::::0;-1:-1:-1;;;24309:82:0;;13098:2:1;24309:82:0::1;::::0;::::1;13080:21:1::0;13137:2;13117:18;;;13110:30;13176:34;13156:18;;;13149:62;-1:-1:-1;;;13227:18:1;;;13220:32;13269:19;;24309:82:0::1;12896:398:1::0;24309:82:0::1;24432:10;24419:9;:23;;24411:74;;;::::0;-1:-1:-1;;;24411:74:0;;12691:2:1;24411:74:0::1;::::0;::::1;12673:21:1::0;12730:2;12710:18;;;12703:30;12769:34;12749:18;;;12742:62;-1:-1:-1;;;12820:18:1;;;12813:36;12866:19;;24411:74:0::1;12489:402:1::0;24411:74:0::1;24499:8;:29:::0;;;;24539:18;:31;;;;24581:17;:29;24621:17;:29;;-1:-1:-1;;24621:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24094:564::o;24708:231::-;9321:13;:11;:13::i;:::-;24810:10:::1;:39:::0;;;;24860:19;:31;24902:20;:29;24708:231::o;10086:103::-;9321:13;:11;:13::i;:::-;10151:30:::1;10178:1;10151:18;:30::i;:::-;10086:103::o:0;21692:1066::-;9321:13;:11;:13::i;:::-;21932:3:::1;21915:13;:20;;21907:59;;;::::0;-1:-1:-1;;;21907:59:0;;11585:2:1;21907:59:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:28;11643:18;;;11636:56;11709:18;;21907:59:0::1;11383:350:1::0;21907:59:0::1;21996:3;21985:7;:14;;21977:47;;;::::0;-1:-1:-1;;;21977:47:0;;11940:2:1;21977:47:0::1;::::0;::::1;11922:21:1::0;11979:2;11959:18;;;11952:30;-1:-1:-1;;;11998:18:1;;;11991:50;12058:18;;21977:47:0::1;11738:344:1::0;21977:47:0::1;22058:3;22043:11;:18;;22035:55;;;::::0;-1:-1:-1;;;22035:55:0;;13862:2:1;22035:55:0::1;::::0;::::1;13844:21:1::0;13901:2;13881:18;;;13874:30;-1:-1:-1;;;13920:18:1;;;13913:54;13984:18;;22035:55:0::1;13660:348:1::0;22035:55:0::1;22127:3;22109:14;:21;;22101:60;;;::::0;-1:-1:-1;;;22101:60:0;;11585:2:1;22101:60:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:28;11643:18;;;11636:56;11709:18;;22101:60:0::1;11383:350:1::0;22101:60:0::1;22192:3;22180:8;:15;;22172:48;;;::::0;-1:-1:-1;;;22172:48:0;;11940:2:1;22172:48:0::1;::::0;::::1;11922:21:1::0;11979:2;11959:18;;;11952:30;-1:-1:-1;;;11998:18:1;;;11991:50;12058:18;;22172:48:0::1;11738:344:1::0;22172:48:0::1;22255:3;22239:12;:19;;22231:56;;;::::0;-1:-1:-1;;;22231:56:0;;13862:2:1;22231:56:0::1;::::0;::::1;13844:21:1::0;13901:2;13881:18;;;13874:30;-1:-1:-1;;;13920:18:1;;;13913:54;13984:18;;22231:56:0::1;13660:348:1::0;22231:56:0::1;22326:13;22301:6;:22;;;;-1:-1:-1::0;;;5955:27:1;;6007:2;5998:12;;5753:263;22301:22:0::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:38;;;;-1:-1:-1;;;6433:21:1;;22350:6:0::1;6479:1:1::0;6470:11;;22350:16:0;;;;;;;;;;;;;:26;;;-1:-1:-1;;;5689:25:1;;5739:2;5730:12;;22387:20:0;;;;;;;;;;;;;:34;;;-1:-1:-1;;;5420:28:1;;5473:2;5464:12;;22435:23:0;;;;;;;;;;;;;:40;;;-1:-1:-1;;;5158:22:1;;5196:11;;;22486:17:0;;;;;;;;;;;;;:28;;;-1:-1:-1;;;6694:26:1;;6745:2;6736:12;;22525:21:0;;;;;;;;;;;:36;;;18212:25:1;;;18253:18;;;18246:34;;;18296:18;;;18289:34;;;18354:2;18339:18;;18332:34;;;18397:3;18382:19;;18375:35;;;18441:3;18426:19;;18419:35;;;22580:170:0;;::::1;::::0;18199:3:1;22580:170:0;;;;;;::::1;21692:1066:::0;;;;;;:::o;23889:127::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;23976:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;23976:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23889:127::o;23682:119::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;23765:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;23765:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23682:119::o;29377:104::-;29433:13;29466:7;29459:14;;;;;:::i;33008:437::-;33101:4;8003:10;33101:4;33184:25;8003:10;33201:7;33184:9;:25::i;:::-;33157:52;;33248:15;33228:16;:35;;33220:85;;;;-1:-1:-1;;;33220:85:0;;15428:2:1;33220:85:0;;;15410:21:1;15467:2;15447:18;;;15440:30;15506:34;15486:18;;;15479:62;-1:-1:-1;;;15557:18:1;;;15550:35;15602:19;;33220:85:0;15226:401:1;33220:85:0;33341:60;33350:5;33357:7;33385:15;33366:16;:34;33341:8;:60::i;30050:193::-;30129:4;8003:10;30185:28;8003:10;30202:2;30206:6;30185:9;:28::i;22827:447::-;22876:17;22904:11;22926:15;22952:18;22981:12;23004:16;23061:6;:22;;;;-1:-1:-1;;;5955:27:1;;6007:2;5998:12;;5753:263;23061:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;6433:21:1;;23061:22:0;23098:6;;6479:1:1;6470:11;23098:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5689:25:1;;23098:16:0;23129:6;;5739:2:1;5730:12;23129:20:0;;;;;;;;;;;;;;-1:-1:-1;;;5420:28:1;;23129:20:0;23164:6;;5473:2:1;5464:12;23164:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5158:22:1;;23164:23:0;23202:6;;5196:11:1;;23202:17:0;;;;;;;;;;;;;;-1:-1:-1;;;6694:26:1;;23202:17:0;23234:6;;6745:2:1;6736:12;23234:21:0;;;;;;;;;;;;;23039:227;;;;;;;;;;;;22827:447;;;;;;:::o;30307:151::-;-1:-1:-1;;;;;30423:18:0;;;30396:7;30423:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30307: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;;9650:2:1;10426:73:0::1;::::0;::::1;9632:21:1::0;9689:2;9669:18;;;9662:30;9728:34;9708:18;;;9701:62;-1:-1:-1;;;9779:18:1;;;9772:36;9825:19;;10426:73:0::1;9448:402:1::0;10426:73:0::1;10510:28;10529:8;10510:18;:28::i;4029:98::-:0;4087:7;4114:5;4118:1;4114;:5;:::i;:::-;4107:12;4029:98;-1:-1:-1;;;4029:98:0:o;37441:381::-;-1:-1:-1;;;;;37577:19:0;;37569:68;;;;-1:-1:-1;;;37569:68:0;;15023:2:1;37569:68:0;;;15005:21:1;15062:2;15042:18;;;15035:30;15101:34;15081:18;;;15074:62;-1:-1:-1;;;15152:18:1;;;15145:34;15196:19;;37569:68:0;14821:400:1;37569:68:0;-1:-1:-1;;;;;37656:21:0;;37648:68;;;;-1:-1:-1;;;37648:68:0;;10057:2:1;37648:68:0;;;10039:21:1;10096:2;10076:18;;;10069:30;10135:34;10115:18;;;10108:62;-1:-1:-1;;;10186:18:1;;;10179:32;10228:19;;37648:68:0;9855:398:1;37648:68:0;-1:-1:-1;;;;;37730:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37782:32;;15778:25:1;;;37782:32:0;;15751:18:1;37782:32:0;;;;;;;;37441:381;;;:::o;38114:453::-;38249:24;38276:25;38286:5;38293:7;38276:9;:25::i;:::-;38249:52;;-1:-1:-1;;38316:16:0;:37;38312:248;;38398:6;38378:16;:26;;38370:68;;;;-1:-1:-1;;;38370:68:0;;10460:2:1;38370:68:0;;;10442:21:1;10499:2;10479:18;;;10472:30;10538:31;10518:18;;;10511:59;10587:18;;38370:68:0;10258:353:1;38370:68:0;38482:51;38491:5;38498:7;38526:6;38507:16;:25;38482:8;:51::i;:::-;38238:329;38114:453;;;:::o;33925:3077::-;-1:-1:-1;;;;;34056:18:0;;34048:68;;;;-1:-1:-1;;;34048:68:0;;14617:2:1;34048:68:0;;;14599:21:1;14656:2;14636:18;;;14629:30;14695:34;14675:18;;;14668:62;-1:-1:-1;;;14746:18:1;;;14739:35;14791:19;;34048:68:0;14415:401:1;34048:68:0;-1:-1:-1;;;;;34135:16:0;;34127:64;;;;-1:-1:-1;;;34127:64:0;;8484:2:1;34127:64:0;;;8466:21:1;8523:2;8503:18;;;8496:30;8562:34;8542:18;;;8535:62;-1:-1:-1;;;8613:18:1;;;8606:33;8656:19;;34127:64:0;8282:399:1;34127:64:0;-1:-1:-1;;;;;34227:15:0;;34205:19;34227:15;;;:9;:15;;;;;;34261:21;;;;34253:72;;;;-1:-1:-1;;;34253:72:0;;10818:2:1;34253:72:0;;;10800:21:1;10857:2;10837:18;;;10830:30;10896:34;10876:18;;;10869:62;-1:-1:-1;;;10947:18:1;;;10940:36;10993:19;;34253:72:0;10616:402:1;34253:72:0;34478:13;;34339:17;;;;;;34433:4;;-1:-1:-1;;;;;34470:21:0;;;34478:13;;34470:21;34467:641;;;34570:27;34586:2;34590:6;34570:15;:27::i;:::-;34615:30;34627:5;34634:2;34638:6;34615:11;:30::i;:::-;34678:22;;-1:-1:-1;;;5955:27:1;;34678:6:0;;6007:2:1;5998:12;34678:22:0;;;;;;;;;;;;;;-1:-1:-1;;;6433:21:1;;34678:22:0;-1:-1:-1;34724:6:0;;6479:1:1;6470:11;34724:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5689:25:1;;34724:16:0;-1:-1:-1;34768:6:0;;5739:2:1;5730:12;34768:20:0;;;;;;;;;;;;;34755:33;;34467:641;;;34841:13;;-1:-1:-1;;;;;34835:19:0;;;34841:13;;34835:19;34832:276;;;34871:30;34888:4;34894:6;34871:16;:30::i;:::-;34919:31;34931:4;34937;34943:6;34919:11;:31::i;:::-;34983:23;;-1:-1:-1;;;5420:28:1;;34983:6:0;;5473:2:1;5464:12;34983:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5158:22:1;;34983:23:0;-1:-1:-1;35030:6:0;;5196:11:1;;35030:17:0;;;;;;;;;;;;;;-1:-1:-1;;;6694:26:1;;35030:17:0;-1:-1:-1;35075:6:0;;6745:2:1;6736:12;35075:21:0;;;;;;;;;;;;;35062:34;;34832:276;-1:-1:-1;;;;;35146:15:0;;;;;;;:9;:15;;;;;;;;35164:20;;;35146:38;;35212:13;;;;;:9;:13;;;;;;;:32;;-1:-1:-1;;;;;;35229:15:0;;;;;;:9;:15;;;;;;;;35212:32;35209:79;;;-1:-1:-1;35271:5:0;35209:79;35304:7;:57;;;;-1:-1:-1;35322:13:0;;-1:-1:-1;;;;;35316:19:0;;;35322:13;;35316:19;;:44;;-1:-1:-1;35347:13:0;;-1:-1:-1;;;;;35339:21:0;;;35347:13;;35339:21;35316:44;35301:1615;;;35378:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;35378:25:0;35443:35;35472:5;35443:24;:6;35454:12;35443:10;:24::i;:::-;:28;;:35::i;:::-;35418:60;;35512:29;35535:5;35512:18;:6;35523;35512:10;:18::i;:29::-;35493:16;;;:48;35579:33;35606:5;35579:22;:6;35590:10;35579;:22::i;:33::-;35556:20;;;:56;;;35709:16;;;;35664:22;;35630:14;;35664:106;;35556:56;;35664:62;;:44;:62::i;:::-;:84;;:106::i;:::-;35630:140;-1:-1:-1;35797:21:0;:6;35630:140;35797:10;:21::i;:::-;35854:4;35836:24;;;;:9;:24;;;;;:37;;35788:30;;-1:-1:-1;35864:9:0;;35836:24;;;:37;;35864:9;;35836:37;:::i;:::-;;;;-1:-1:-1;;35920:40:0;;15778:25:1;;;35943:4:0;;-1:-1:-1;;;;;35920:40:0;;;;;15766:2:1;15751:18;35920:40:0;;;;;;;36064:4;36015:28;36046:24;;;:9;:24;;;;;;36133:10;:23;36110:46;;:127;;;;-1:-1:-1;36217:20:0;;36195:19;;:42;;36217:20;36195:42;:::i;:::-;36177:15;:60;36110:127;:167;;;;-1:-1:-1;36264:13:0;;-1:-1:-1;;;;;36258:19:0;;;36264:13;;36258:19;36110:167;36088:817;;;36382:10;:23;:43;;36420:4;;36382:33;;36410:4;36382:27;:33::i;:43::-;36359:20;:66;36356:248;;;36470:10;:23;36450:44;;:19;:44::i;:::-;36356:248;;;36543:41;36563:20;36543:19;:41::i;:::-;36647:15;36625:19;:37;36786:20;;36716:21;;36762:44;;36759:131;;;36831:39;36848:21;36831:16;:39::i;:::-;36293:612;36088:817;35363:1553;;;35301:1615;-1:-1:-1;;;;;36929:13:0;;;;;;:9;:13;;;;;:23;;36946:6;;36929:13;:23;;36946:6;;36929:23;:::i;:::-;;;;;;;;36983:2;-1:-1:-1;;;;;36968:26:0;36977:4;-1:-1:-1;;;;;36968:26:0;;36987:6;36968:26;;;;15778:25:1;;15766:2;15751:18;;15632:177;36968:26:0;;;;;;;;34037:2965;;;;;33925:3077;;;:::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;;13501:2:1;9658:68:0;;;13483:21:1;;;13520:18;;;13513:30;13579:34;13559:18;;;13552:62;13631:18;;9658:68:0;13299:356:1;38901:554:0;-1:-1:-1;;;;;38985:21:0;;38977:67;;;;-1:-1:-1;;;38977:67:0;;14215:2:1;38977:67:0;;;14197:21:1;14254:2;14234:18;;;14227:30;14293:34;14273:18;;;14266:62;-1:-1:-1;;;14344:18:1;;;14337:31;14385:19;;38977:67:0;14013:397:1;38977:67:0;-1:-1:-1;;;;;39083:18:0;;39058:22;39083:18;;;:9;:18;;;;;;39120:24;;;;39112:71;;;;-1:-1:-1;;;39112:71:0;;8888:2:1;39112:71:0;;;8870:21:1;8927:2;8907:18;;;8900:30;8966:34;8946:18;;;8939:62;-1:-1:-1;;;9017:18:1;;;9010:32;9059:19;;39112:71:0;8686:398:1;39112:71:0;-1:-1:-1;;;;;39219:18:0;;;;;;:9;:18;;;;;;;;39240:23;;;39219:44;;39358:12;:22;;;;;;;39410:37;15778:25:1;;;39219:18:0;;;39410:37;;15751:18:1;39410:37:0;15632:177:1;28497:429:0;28589:18;;28563:12;;-1:-1:-1;;;;;28589:18:0;28621:14;:7;28633:1;28621:11;:14::i;:::-;28581:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28679:14:0;;28562:78;;-1:-1:-1;28652:13:0;;-1:-1:-1;;;;;28679:14:0;28707;:7;28719:1;28707:11;:14::i;:::-;28671:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28765:10:0;;28651:75;;-1:-1:-1;28738:13:0;;-1:-1:-1;;;;;28765:10:0;28789:14;:7;28801:1;28789:11;:14::i;:::-;28757:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28737:71;;;28827:19;28838:7;28827:19;;;;7419:14:1;7412:22;7394:41;;7382:2;7367:18;;7254:187;28827:19:0;;;;;;;;28862:20;;7419:14:1;;7412:22;7394:41;;28862:20:0;;7382:2:1;7367:18;28862:20:0;;;;;;;28898;;7419:14:1;;7412:22;7394:41;;28898:20:0;;7382:2:1;7367:18;28898:20:0;;;;;;;28548:378;;;28497: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;25339:472::-;25445:17;;;;:25;;:17;:25;;:72;;-1:-1:-1;;;;;;25487:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;25445:72;:144;;;-1:-1:-1;25572:8:0;:17;-1:-1:-1;;;;;25534:22:0;;25572:17;25534:22;;;:13;:22;;;;;;:35;;25561:7;25534:26;:35::i;:::-;:55;25445:144;:300;;;-1:-1:-1;25645:8:0;:17;-1:-1:-1;;;;;25607:22:0;;25645:17;25607:22;;;:13;:22;;;;;;:35;;25634:7;25607:26;:35::i;:::-;:55;:137;;;;-1:-1:-1;25708:17:0;;-1:-1:-1;;;;;25679:24:0;;;;;;:15;:24;;;;;;25729:15;;25679:47;;:24;:28;:47::i;:::-;:65;25607:137;25423:380;;;;-1:-1:-1;;;25423:380:0;;9291:2:1;25423:380:0;;;9273:21:1;9330:2;9310:18;;;9303:30;9369:32;9349:18;;;9342:60;9419:18;;25423:380:0;9089:354:1;25423:380:0;25339:472;;:::o;26555:437::-;26673:17;;-1:-1:-1;;;;;26644:24:0;;;;;;:15;:24;;;;;;26694:15;;26644:47;;:24;:28;:47::i;:::-;:65;26641:288;;;26726:7;:78;;-1:-1:-1;;;;;26772:22:0;;;;;;:13;:22;;;;;:32;;;26797:7;26726:78;;;-1:-1:-1;;;;;26736:23:0;;;;;;:14;:23;;;;;:33;;;26762:7;26726:78;;26641:288;;;26837:7;:80;;-1:-1:-1;;;;;26884:22:0;;;;;;:13;:22;;;;;:33;;26910:7;;26884:22;:33;;26910:7;;26884:33;:::i;:::-;;;;;;;26837:80;;;-1:-1:-1;;;;;26847:23:0;;;;;;:14;:23;;;;;:34;;26874:7;;26847:23;:34;;26874:7;;26847:34;:::i;:::-;;;;;;;26837:80;;26641:288;-1:-1:-1;;;;;;26942:24:0;;;;;:15;:24;;;;;26969:15;26942:42;;-1:-1:-1;26555:437:0:o;25924:478::-;26031:17;;;;:25;;:17;:25;;:72;;-1:-1:-1;;;;;;26073:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;26031:72;:146;;;-1:-1:-1;26159:18:0;;-1:-1:-1;;;;;26120:23:0;;;;;;:14;:23;;;;;;:36;;26148:7;26120:27;:36::i;:::-;:57;26031:146;:304;;;-1:-1:-1;26234:18:0;;-1:-1:-1;;;;;26195:23:0;;;;;;:14;:23;;;;;;:36;;26223:7;26195:27;:36::i;:::-;:57;:139;;;;-1:-1:-1;26298:17:0;;-1:-1:-1;;;;;26269:24:0;;;;;;:15;:24;;;;;;26319:15;;26269:47;;:24;:28;:47::i;:::-;:65;26195:139;26009:385;;;;-1:-1:-1;;;26009:385:0;;11225:2:1;26009:385:0;;;11207:21:1;11264:2;11244:18;;;11237:30;11303:33;11283:18;;;11276:61;11354:18;;26009:385:0;11023: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:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:410::-;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:31;772:5;747:31;:::i;:::-;797:5;-1:-1:-1;854:2:1;839:18;;826:32;867:33;826:32;867:33;:::i;:::-;919:7;909:17;;;522:410;;;;;:::o;1330:529::-;1407:6;1415;1423;1476:2;1464:9;1455:7;1451:23;1447:32;1444:52;;;1492:1;1489;1482:12;1444:52;1531:9;1518:23;1550:31;1575:5;1550:31;:::i;:::-;1600:5;-1:-1:-1;1657:2:1;1642:18;;1629:32;1670:33;1629:32;1670:33;:::i;:::-;1722:7;-1:-1:-1;1781:2:1;1766:18;;1753:32;1794:33;1753:32;1794:33;:::i;:::-;1846:7;1836:17;;;1330:529;;;;;:::o;1864:456::-;1941:6;1949;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2065:9;2052:23;2084:31;2109:5;2084:31;:::i;:::-;2134:5;-1:-1:-1;2191:2:1;2176:18;;2163:32;2204:33;2163:32;2204:33;:::i;:::-;1864:456;;2256:7;;-1:-1:-1;;;2310:2:1;2295:18;;;;2282:32;;1864:456::o;2325:382::-;2390:6;2398;2451:2;2439:9;2430:7;2426:23;2422:32;2419:52;;;2467:1;2464;2457:12;2419:52;2506:9;2493:23;2525:31;2550:5;2525:31;:::i;:::-;2575:5;-1:-1:-1;2632:2:1;2617:18;;2604:32;2645:30;2604:32;2645:30;:::i;2712:315::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2896:9;2883:23;2915:31;2940:5;2915:31;:::i;:::-;2965:5;3017:2;3002:18;;;;2989:32;;-1:-1:-1;;;2712:315:1:o;3032:245::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;3200:9;3194:16;3219:28;3241:5;3219:28;:::i;3282:180::-;3341:6;3394:2;3382:9;3373:7;3369:23;3365:32;3362:52;;;3410:1;3407;3400:12;3362:52;-1:-1:-1;3433:23:1;;3282:180;-1:-1:-1;3282:180:1:o;3467:184::-;3537:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;-1:-1:-1;3629:16:1;;3467:184;-1:-1:-1;3467:184:1:o;3656:316::-;3733:6;3741;3749;3802:2;3790:9;3781:7;3777:23;3773:32;3770:52;;;3818:1;3815;3808:12;3770:52;-1:-1:-1;;3841:23:1;;;3911:2;3896:18;;3883:32;;-1:-1:-1;3962:2:1;3947:18;;;3934:32;;3656:316;-1:-1:-1;3656:316:1:o;3977:446::-;4060:6;4068;4076;4084;4137:3;4125:9;4116:7;4112:23;4108:33;4105:53;;;4154:1;4151;4144:12;4105:53;4190:9;4177:23;4167:33;;4247:2;4236:9;4232:18;4219:32;4209:42;;4298:2;4287:9;4283:18;4270:32;4260:42;;4352:2;4341:9;4337:18;4324:32;4365:28;4387:5;4365:28;:::i;:::-;3977:446;;;;-1:-1:-1;3977:446:1;;-1:-1:-1;;3977:446:1:o;4428:523::-;4532:6;4540;4548;4556;4564;4572;4625:3;4613:9;4604:7;4600:23;4596:33;4593:53;;;4642:1;4639;4632:12;4593:53;-1:-1:-1;;4665:23:1;;;4735:2;4720:18;;4707:32;;-1:-1:-1;4786:2:1;4771:18;;4758:32;;4837:2;4822:18;;4809:32;;-1:-1:-1;4888:3:1;4873:19;;4860:33;;-1:-1:-1;4940:3:1;4925:19;4912:33;;-1:-1:-1;4428:523:1;-1:-1:-1;4428:523:1:o;7680:597::-;7792:4;7821:2;7850;7839:9;7832:21;7882:6;7876:13;7925:6;7920:2;7909:9;7905:18;7898:34;7950:1;7960:140;7974:6;7971:1;7968:13;7960:140;;;8069:14;;;8065:23;;8059:30;8035:17;;;8054:2;8031:26;8024:66;7989:10;;7960:140;;;8118:6;8115:1;8112:13;8109:91;;;8188:1;8183:2;8174:6;8163:9;8159:22;8155:31;8148:42;8109:91;-1:-1:-1;8261:2:1;8240:15;-1:-1:-1;;8236:29:1;8221:45;;;;8268:2;8217:54;;7680:597;-1:-1:-1;;;7680:597:1:o;15814:980::-;16076:4;16124:3;16113:9;16109:19;16155:6;16144:9;16137:25;16181:2;16219:6;16214:2;16203:9;16199:18;16192:34;16262:3;16257:2;16246:9;16242:18;16235:31;16286:6;16321;16315:13;16352:6;16344;16337:22;16390:3;16379:9;16375:19;16368:26;;16429:2;16421:6;16417:15;16403:29;;16450:1;16460:195;16474:6;16471:1;16468:13;16460:195;;;16539:13;;-1:-1:-1;;;;;16535:39:1;16523:52;;16630:15;;;;16595:12;;;;16571:1;16489:9;16460:195;;;-1:-1:-1;;;;;;;16711:32:1;;;;16706:2;16691:18;;16684:60;-1:-1:-1;;;16775:3:1;16760:19;16753:35;16672:3;15814:980;-1:-1:-1;;;15814:980:1:o;18654:128::-;18694:3;18725:1;18721:6;18718:1;18715:13;18712:39;;;18731:18;;:::i;:::-;-1:-1:-1;18767:9:1;;18654:128::o;18787:217::-;18827:1;18853;18843:132;;18897:10;18892:3;18888:20;18885:1;18878:31;18932:4;18929:1;18922:15;18960:4;18957:1;18950:15;18843:132;-1:-1:-1;18989:9:1;;18787:217::o;19009:168::-;19049:7;19115:1;19111;19107:6;19103:14;19100:1;19097:21;19092:1;19085:9;19078:17;19074:45;19071:71;;;19122:18;;:::i;:::-;-1:-1:-1;19162:9:1;;19009:168::o;19182:125::-;19222:4;19250:1;19247;19244:8;19241:34;;;19255:18;;:::i;:::-;-1:-1:-1;19292:9:1;;19182:125::o;19312:380::-;19391:1;19387:12;;;;19434;;;19455:61;;19509:4;19501:6;19497:17;19487:27;;19455:61;19562:2;19554:6;19551:14;19531:18;19528:38;19525:161;;;19608:10;19603:3;19599:20;19596:1;19589:31;19643:4;19640:1;19633:15;19671:4;19668:1;19661:15;19525:161;;19312:380;;;:::o;19697:127::-;19758:10;19753:3;19749:20;19746:1;19739:31;19789:4;19786:1;19779:15;19813:4;19810:1;19803:15;19829:127;19890:10;19885:3;19881:20;19878:1;19871:31;19921:4;19918:1;19911:15;19945:4;19942:1;19935:15;20093:131;-1:-1:-1;;;;;20168:31:1;;20158:42;;20148:70;;20214:1;20211;20204:12;20229:118;20315:5;20308:13;20301:21;20294:5;20291:32;20281:60;;20337:1;20334;20327:12
Swarm Source
ipfs://9ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc23
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.