Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000 GENOS
Holders
65
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
956,783.621725413 GENOSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Genos
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-24 */ /** Stealth Launch - April 24, 2022 Telegram : @GenosETH */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed 0x7b527bd019E9f745497F2cB51C658cb10E2C914F interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; 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; } /* To be modified before deploying this contract for a project: - Uniswap Router address if not on ETH - Dev address */ contract Genos is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMax; mapping (address => bool) private _isExcluded; mapping (address => bool) isBlacklisted; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address private _devAddress = 0xf6260Fd849c5f7f27c2F29A6d73eD7202CCC7aDC; address private _burnAddress = 0x0000000000000000000000000000000000000001; string private _name = "Genos"; string private _symbol = "GENOS"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _devFee = 4; uint256 private _previousDevFee = _devFee; uint256 public _burnFee = 1; uint256 private _previousBurnFee = _burnFee; uint256 private _beforeLaunchFee = 5; uint256 private _previousBeforeLaunchFee = _beforeLaunchFee; uint256 public launchedAt; uint256 public launchedAtTimestamp; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; uint256 public _maxTxAmount = _tTotal.div(100).mul(1); uint256 public _maxWalletToken = _tTotal.div(50).mul(1); constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner, dev wallet, and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_devAddress] = true; _isExcludedFromMax[owner()] = true; _isExcludedFromMax[address(this)] = true; _isExcludedFromMax[_devAddress] = true; _isExcludedFromMax[uniswapV2Pair] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setIsBlacklisted(address account, bool blacklisted) external onlyOwner() { isBlacklisted[account] = blacklisted; } function blacklistMultipleAccounts(address[] calldata accounts, bool blacklisted) external onlyOwner() { for (uint256 i = 0; i < accounts.length; i++) { isBlacklisted[accounts[i]] = blacklisted; } } function isAccountBlacklisted(address account) external view returns (bool) { return isBlacklisted[account]; } function isExcludedFromMax(address holder, bool exempt) external onlyOwner() { _isExcludedFromMax[holder] = exempt; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function burnAddress() public view returns (address) { return _burnAddress; } function devAddress() public view returns (address) { return _devAddress; } function launch() public onlyOwner() { require(launchedAt == 0, "Already launched."); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount,,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); if (!deductTransferFee) { return rAmount; } else { return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { _burnFee = burnFee; } function setDevFeePercent(uint256 devFee) external onlyOwner() { _devFee = devFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setMaxWalletPercent(uint256 maxWalletToken) external onlyOwner() { _maxWalletToken = _tTotal.mul(maxWalletToken).div( 10**2 ); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tDev = calculateDevFee(tAmount); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tDev); tTransferAmount = tTransferAmount.sub(tBurn); return (tTransferAmount, tFee, tDev, tBurn); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tDev, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rDev = tDev.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rDev).sub(rBurn); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeDevFee(uint256 tDev) private { uint256 currentRate = _getRate(); uint256 rDev = tDev.mul(currentRate); _rOwned[_devAddress] = _rOwned[_devAddress].add(rDev); if(_isExcluded[_devAddress]) _tOwned[_devAddress] = _tOwned[_devAddress].add(tDev); } function _takeBurnFee(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _rOwned[_burnAddress] = _rOwned[_burnAddress].add(rBurn); if(_isExcluded[_burnAddress]) _tOwned[_burnAddress] = _tOwned[_burnAddress].add(tBurn); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? 0 : _taxFee; return _amount.mul(fee).div( 10**2 ); } function calculateDevFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? 0 : _devFee; return _amount.mul(fee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? _beforeLaunchFee : _burnFee; return _amount.mul(fee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _devFee == 0) return; _previousTaxFee = _taxFee; _previousDevFee = _devFee; _previousBurnFee = _burnFee; _previousBeforeLaunchFee = _beforeLaunchFee; _taxFee = 0; _devFee = 0; _burnFee = 0; _beforeLaunchFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _devFee = _previousDevFee; _burnFee = _previousBurnFee; _beforeLaunchFee = _previousBeforeLaunchFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!isBlacklisted[from], "Blacklisted address"); if(!_isExcludedFromMax[from] || !_isExcludedFromMax[to]) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } if (!_isExcludedFromMax[to]) { uint256 heldTokens = balanceOf(to); require((heldTokens + amount) <= _maxWalletToken, "Total Holding is currently limited, you can not buy that much."); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn fee _tokenTransfer(from,to,amount,takeFee); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAccountBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"isExcludedFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletToken","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
678ac7230489e80000600b5567693fcf03e3d7ffff19600c55600e805473f6260fd849c5f7f27c2f29a6d73ed7202ccc7adc6001600160a01b031991821617909155600f8054909116600117905560e0604052600560a08190526447656e6f7360d81b60c09081526200007691601091906200062e565b506040805180820190915260058082526447454e4f5360d81b6020909201918252620000a5916011916200062e565b5060128054600960ff19909116179055600160138190556014819055600460158190556016556017819055601881905560056019819055601a55600b5462000115919062000101906064620004c3602090811b62001c6f17901c565b6200051660201b62001cb11790919060201c565b601e556200013b6001620001016032600b54620004c360201b62001c6f1790919060201c565b601f553480156200014b57600080fd5b5060006200015862000574565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5460036000620001b362000574565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022a57600080fd5b505afa1580156200023f573d6000803e3d6000fd5b505050506040513d60208110156200025657600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002a757600080fd5b505afa158015620002bc573d6000803e3d6000fd5b505050506040513d6020811015620002d357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200032657600080fd5b505af11580156200033b573d6000803e3d6000fd5b505050506040513d60208110156200035257600080fd5b5051601d80546001600160a01b0319166001600160a01b03909216919091179055606081901b6001600160601b0319166080526001600660006200039562000578565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155600e54909116835290822080549093168117909255600790620003fc62000578565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600e54821684528284208054861682179055601d549091168352912080549092161790556200046f62000574565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a350620006ca565b60006200050d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200058760201b60201c565b90505b92915050565b600082620005275750600062000510565b828202828482816200053557fe5b04146200050d5760405162461bcd60e51b81526004018080602001828103825260218152602001806200348c6021913960400191505060405180910390fd5b3390565b6000546001600160a01b031690565b60008183620006175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005db578181015183820152602001620005c1565b50505050905090810190601f168015620006095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200062457fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200067157805160ff1916838001178555620006a1565b82800160010185558215620006a1579182015b82811115620006a157825182559160200191906001019062000684565b50620006af929150620006b3565b5090565b5b80821115620006af5760008155600101620006b4565b60805160601c612da4620006e860003980610cb55250612da46000f3fe6080604052600436106102975760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cea269581161007a578063cea26958146109b0578063d543dbeb146109da578063dd46706414610a04578063dd62ed3e14610a2e578063ea2f0b3714610a69578063f2fde38b14610a9c5761029e565b8063a9059cbb1461090e578063aa45026b14610947578063b6c523241461095c578063bf56b37114610971578063c0b0fda214610986578063c6d2577d1461099b5761029e565b80638da5cb5b116101135780638da5cb5b146107dc57806395d89b41146107f1578063a0e3849214610806578063a457c2d714610841578063a69df4b51461087a578063a7b97fa91461088f5761029e565b8063715018a61461070557806378109e541461071a5780637d1db4a51461072f5780637fef35941461074457806382bf293c1461077f57806388f82020146107a95761029e565b8063379e2919116101fe5780634549b039116101b75780634549b0391461061057806349bd5a5e1461064257806352390c02146106575780635342acb41461068a57806370a08231146106bd57806370d5ae05146106f05761029e565b8063379e29191461052657806339509351146105505780633ad10ef6146105895780633b124fe71461059e5780633bd5d173146105b3578063437823ec146105dd5761029e565b80631694505e116102505780631694505e1461041557806318160ddd1461044657806323b872dd1461045b5780632d8381191461049e578063313ce567146104c85780633685d419146104f35761029e565b806301339c21146102a3578063061c82d0146102ba57806306fdde03146102e4578063095ea7b31461036e5780630f1d76c1146103bb57806313114a9d146103ee5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610acf565b005b3480156102c657600080fd5b506102b8600480360360208110156102dd57600080fd5b5035610b7a565b3480156102f057600080fd5b506102f9610bd7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033357818101518382015260200161031b565b50505050905090810190601f1680156103605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037a57600080fd5b506103a76004803603604081101561039157600080fd5b506001600160a01b038135169060200135610c6d565b604080519115158252519081900360200190f35b3480156103c757600080fd5b506103a7600480360360208110156103de57600080fd5b50356001600160a01b0316610c8b565b3480156103fa57600080fd5b50610403610cad565b60408051918252519081900360200190f35b34801561042157600080fd5b5061042a610cb3565b604080516001600160a01b039092168252519081900360200190f35b34801561045257600080fd5b50610403610cd7565b34801561046757600080fd5b506103a76004803603606081101561047e57600080fd5b506001600160a01b03813581169160208101359091169060400135610cdd565b3480156104aa57600080fd5b50610403600480360360208110156104c157600080fd5b5035610d64565b3480156104d457600080fd5b506104dd610dc4565b6040805160ff9092168252519081900360200190f35b3480156104ff57600080fd5b506102b86004803603602081101561051657600080fd5b50356001600160a01b0316610dcd565b34801561053257600080fd5b506102b86004803603602081101561054957600080fd5b5035610f8e565b34801561055c57600080fd5b506103a76004803603604081101561057357600080fd5b506001600160a01b038135169060200135610feb565b34801561059557600080fd5b5061042a611039565b3480156105aa57600080fd5b50610403611048565b3480156105bf57600080fd5b506102b8600480360360208110156105d657600080fd5b503561104e565b3480156105e957600080fd5b506102b86004803603602081101561060057600080fd5b50356001600160a01b0316611147565b34801561061c57600080fd5b506104036004803603604081101561063357600080fd5b508035906020013515156111c3565b34801561064e57600080fd5b5061042a611265565b34801561066357600080fd5b506102b86004803603602081101561067a57600080fd5b50356001600160a01b0316611274565b34801561069657600080fd5b506103a7600480360360208110156106ad57600080fd5b50356001600160a01b03166113fa565b3480156106c957600080fd5b50610403600480360360208110156106e057600080fd5b50356001600160a01b0316611418565b3480156106fc57600080fd5b5061042a61147a565b34801561071157600080fd5b506102b8611489565b34801561072657600080fd5b50610403611519565b34801561073b57600080fd5b5061040361151f565b34801561075057600080fd5b506102b86004803603604081101561076757600080fd5b506001600160a01b0381351690602001351515611525565b34801561078b57600080fd5b506102b8600480360360208110156107a257600080fd5b50356115a8565b3480156107b557600080fd5b506103a7600480360360208110156107cc57600080fd5b50356001600160a01b0316611626565b3480156107e857600080fd5b5061042a611644565b3480156107fd57600080fd5b506102f9611653565b34801561081257600080fd5b506102b86004803603604081101561082957600080fd5b506001600160a01b03813516906020013515156116b4565b34801561084d57600080fd5b506103a76004803603604081101561086457600080fd5b506001600160a01b038135169060200135611737565b34801561088657600080fd5b506102b861179f565b34801561089b57600080fd5b506102b8600480360360408110156108b257600080fd5b8101906020810181356401000000008111156108cd57600080fd5b8201836020820111156108df57600080fd5b8035906020019184602083028401116401000000008311171561090157600080fd5b919350915035151561188d565b34801561091a57600080fd5b506103a76004803603604081101561093157600080fd5b506001600160a01b038135169060200135611940565b34801561095357600080fd5b50610403611954565b34801561096857600080fd5b5061040361195a565b34801561097d57600080fd5b50610403611960565b34801561099257600080fd5b50610403611966565b3480156109a757600080fd5b5061040361196c565b3480156109bc57600080fd5b506102b8600480360360208110156109d357600080fd5b5035611972565b3480156109e657600080fd5b506102b8600480360360208110156109fd57600080fd5b50356119cf565b348015610a1057600080fd5b506102b860048036036020811015610a2757600080fd5b5035611a47565b348015610a3a57600080fd5b5061040360048036036040811015610a5157600080fd5b506001600160a01b0381358116916020013516611ae5565b348015610a7557600080fd5b506102b860048036036020811015610a8c57600080fd5b50356001600160a01b0316611b10565b348015610aa857600080fd5b506102b860048036036020811015610abf57600080fd5b50356001600160a01b0316611b89565b610ad7611d0a565b6000546001600160a01b03908116911614610b27576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601b5415610b70576040805162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903630bab731b432b21760791b604482015290519081900360640190fd5b43601b5542601c55565b610b82611d0a565b6000546001600160a01b03908116911614610bd2576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601355565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b6000610c81610c7a611d0a565b8484611d0e565b5060015b92915050565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b600d5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5490565b6000610cea848484611dfa565b610d5a84610cf6611d0a565b610d5585604051806060016040528060288152602001612be3602891396001600160a01b038a16600090815260056020526040812090610d34611d0a565b6001600160a01b031681526020810191909152604001600020549190612077565b611d0e565b5060019392505050565b6000600c54821115610da75760405162461bcd60e51b815260040180806020018281038252602a815260200180612b28602a913960400191505060405180910390fd5b6000610db161210e565b9050610dbd8382611c6f565b9392505050565b60125460ff1690565b610dd5611d0a565b6000546001600160a01b03908116911614610e25576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610e92576040805162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015290519081900360640190fd5b60005b600a54811015610f8a57816001600160a01b0316600a8281548110610eb657fe5b6000918252602090912001546001600160a01b03161415610f8257600a80546000198101908110610ee357fe5b600091825260209091200154600a80546001600160a01b039092169183908110610f0957fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff19169055600a805480610f5b57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f8a565b600101610e95565b5050565b610f96611d0a565b6000546001600160a01b03908116911614610fe6576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601555565b6000610c81610ff8611d0a565b84610d558560056000611009611d0a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612131565b600e546001600160a01b031690565b60135481565b6000611058611d0a565b6001600160a01b03811660009081526008602052604090205490915060ff16156110b35760405162461bcd60e51b815260040180806020018281038252602c815260200180612cfb602c913960400191505060405180910390fd5b60008060006110c18561218b565b9350935093505060006110de868585856110d961210e565b6121ea565b50506001600160a01b038616600090815260036020526040902054909150611106908261224c565b6001600160a01b038616600090815260036020526040902055600c5461112c908261224c565b600c55600d5461113c9087612131565b600d55505050505050565b61114f611d0a565b6000546001600160a01b0390811691161461119f576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561121c576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b600080600061122a8661218b565b93509350935050600080611243888686866110d961210e565b50915091508661125957509350610c8592505050565b9450610c859350505050565b601d546001600160a01b031681565b61127c611d0a565b6000546001600160a01b039081169116146112cc576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff161561133a576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611394576001600160a01b03811660009081526003602052604090205461137a90610d64565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526008602052604081205460ff161561145857506001600160a01b038116600090815260046020526040902054610ca8565b6001600160a01b038216600090815260036020526040902054610c8590610d64565b600f546001600160a01b031690565b611491611d0a565b6000546001600160a01b039081169116146114e1576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612c2b833981519152908390a3600080546001600160a01b0319169055565b601f5481565b601e5481565b61152d611d0a565b6000546001600160a01b0390811691161461157d576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6115b0611d0a565b6000546001600160a01b03908116911614611600576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b611620606461161a83600b54611cb190919063ffffffff16565b90611c6f565b601f5550565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b6116bc611d0a565b6000546001600160a01b0390811691161461170c576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610c81611744611d0a565b84610d5585604051806060016040528060258152602001612d4a602591396005600061176e611d0a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612077565b6001546001600160a01b031633146117e85760405162461bcd60e51b8152600401808060200182810382526023815260200180612d276023913960400191505060405180910390fd5b600254421161183e576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612c2b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b611895611d0a565b6000546001600160a01b039081169116146118e5576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b60005b8281101561193a57816009600086868581811061190157fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016118e8565b50505050565b6000610c8161194d611d0a565b8484611dfa565b60155481565b60025490565b601b5481565b60175481565b601c5481565b61197a611d0a565b6000546001600160a01b039081169116146119ca576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601755565b6119d7611d0a565b6000546001600160a01b03908116911614611a27576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b611a41606461161a83600b54611cb190919063ffffffff16565b601e5550565b611a4f611d0a565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612c2b833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611b18611d0a565b6000546001600160a01b03908116911614611b68576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b611b91611d0a565b6000546001600160a01b03908116911614611be1576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b038116611c265760405162461bcd60e51b8152600401808060200182810382526026815260200180612b526026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612c2b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610dbd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061228e565b600082611cc057506000610c85565b82820282848281611ccd57fe5b0414610dbd5760405162461bcd60e51b8152600401808060200182810382526021815260200180612bc26021913960400191505060405180910390fd5b3390565b6001600160a01b038316611d535760405162461bcd60e51b8152600401808060200182810382526024815260200180612cd76024913960400191505060405180910390fd5b6001600160a01b038216611d985760405162461bcd60e51b8152600401808060200182810382526022815260200180612b786022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611e3f5760405162461bcd60e51b8152600401808060200182810382526025815260200180612cb26025913960400191505060405180910390fd5b6001600160a01b038216611e845760405162461bcd60e51b8152600401808060200182810382526023815260200180612b056023913960400191505060405180910390fd5b60008111611ec35760405162461bcd60e51b8152600401808060200182810382526029815260200180612c4b6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611f27576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff161580611f6857506001600160a01b03821660009081526007602052604090205460ff16155b15611fae57601e54811115611fae5760405162461bcd60e51b8152600401808060200182810382526028815260200180612b9a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff16612020576000611fd983611418565b9050601f54828201111561201e5760405162461bcd60e51b815260040180806020018281038252603e815260200180612c74603e913960400191505060405180910390fd5b505b6001600160a01b03831660009081526006602052604090205460019060ff168061206257506001600160a01b03831660009081526006602052604090205460ff165b1561206b575060005b61193a848484846122f3565b600081848411156121065760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120cb5781810151838201526020016120b3565b50505050905090810190601f1680156120f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061211b612461565b909250905061212a8282611c6f565b9250505090565b600082820183811015610dbd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600061219c866125c4565b905060006121a9876125ed565b905060006121b688612602565b905060006121ce836121c88b8761224c565b9061224c565b90506121da818361224c565b9993985091965094509092505050565b60008080806121f98986611cb1565b905060006122078987611cb1565b905060006122158988611cb1565b905060006122238989611cb1565b90506000612237826121c88581898961224c565b949d949c50929a509298505050505050505050565b6000610dbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612077565b600081836122dd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120cb5781810151838201526020016120b3565b5060008385816122e957fe5b0495945050505050565b806123005761230061262a565b6001600160a01b03841660009081526008602052604090205460ff16801561234157506001600160a01b03831660009081526008602052604090205460ff16155b1561235657612351848484612671565b612454565b6001600160a01b03841660009081526008602052604090205460ff1615801561239757506001600160a01b03831660009081526008602052604090205460ff165b156123a7576123518484846127b1565b6001600160a01b03841660009081526008602052604090205460ff161580156123e957506001600160a01b03831660009081526008602052604090205460ff16155b156123f95761235184848461286c565b6001600160a01b03841660009081526008602052604090205460ff16801561243957506001600160a01b03831660009081526008602052604090205460ff165b15612449576123518484846128c2565b61245484848461286c565b8061193a5761193a612947565b600c54600b546000918291825b600a54811015612592578260036000600a848154811061248a57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124ef57508160046000600a84815481106124c857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561250657600c54600b54945094505050506125c0565b61254660036000600a848154811061251a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061224c565b925061258860046000600a848154811061255c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061224c565b915060010161246e565b50600b54600c546125a291611c6f565b8210156125ba57600c54600b549350935050506125c0565b90925090505b9091565b600080601b546000146125d9576013546125dc565b60005b9050610dbd606461161a8584611cb1565b600080601b546000146125d9576015546125dc565b600080601b54600014612617576017546125dc565b50601954610dbd606461161a8584611cb1565b60135415801561263a5750601554155b156126445761266f565b60138054601455601580546016556017805460185560198054601a5560009384905591839055829055555b565b6000806000806126808561218b565b9350935093509350600080600061269c888787876110d961210e565b6001600160a01b038d1660009081526004602052604090205492955090935091506126c7908961224c565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546126f6908461224c565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546127259083612131565b6001600160a01b038a1660009081526003602052604090205561274785612961565b61275084612a21565b61275a8187612ae0565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806127c08561218b565b935093509350935060008060006127dc888787876110d961210e565b6001600160a01b038d166000908152600360205260409020549295509093509150612807908461224c565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461283d9088612131565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546127259083612131565b60008060008061287b8561218b565b93509350935093506000806000612897888787876110d961210e565b6001600160a01b038d1660009081526003602052604090205492955090935091506126f6908461224c565b6000806000806128d18561218b565b935093509350935060008060006128ed888787876110d961210e565b6001600160a01b038d166000908152600460205260409020549295509093509150612918908961224c565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612807908461224c565b601454601355601654601555601854601755601a54601955565b600061296b61210e565b905060006129798383611cb1565b600e546001600160a01b03166000908152600360205260409020549091506129a19082612131565b600e80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526008909152205460ff1615612a1c57600e546001600160a01b0316600090815260046020526040902054612a009084612131565b600e546001600160a01b03166000908152600460205260409020555b505050565b6000612a2b61210e565b90506000612a398383611cb1565b600f546001600160a01b0316600090815260036020526040902054909150612a619082612131565b600f80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526008909152205460ff1615612a1c57600f546001600160a01b0316600090815260046020526040902054612ac09084612131565b600f546001600160a01b0316600090815260046020526040902055505050565b600c54612aed908361224c565b600c55600d54612afd9082612131565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220974bb1404e3734a308371c00554eb38c7a13c3d942ee6dcd725be6a100a4308b64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x6080604052600436106102975760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cea269581161007a578063cea26958146109b0578063d543dbeb146109da578063dd46706414610a04578063dd62ed3e14610a2e578063ea2f0b3714610a69578063f2fde38b14610a9c5761029e565b8063a9059cbb1461090e578063aa45026b14610947578063b6c523241461095c578063bf56b37114610971578063c0b0fda214610986578063c6d2577d1461099b5761029e565b80638da5cb5b116101135780638da5cb5b146107dc57806395d89b41146107f1578063a0e3849214610806578063a457c2d714610841578063a69df4b51461087a578063a7b97fa91461088f5761029e565b8063715018a61461070557806378109e541461071a5780637d1db4a51461072f5780637fef35941461074457806382bf293c1461077f57806388f82020146107a95761029e565b8063379e2919116101fe5780634549b039116101b75780634549b0391461061057806349bd5a5e1461064257806352390c02146106575780635342acb41461068a57806370a08231146106bd57806370d5ae05146106f05761029e565b8063379e29191461052657806339509351146105505780633ad10ef6146105895780633b124fe71461059e5780633bd5d173146105b3578063437823ec146105dd5761029e565b80631694505e116102505780631694505e1461041557806318160ddd1461044657806323b872dd1461045b5780632d8381191461049e578063313ce567146104c85780633685d419146104f35761029e565b806301339c21146102a3578063061c82d0146102ba57806306fdde03146102e4578063095ea7b31461036e5780630f1d76c1146103bb57806313114a9d146103ee5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610acf565b005b3480156102c657600080fd5b506102b8600480360360208110156102dd57600080fd5b5035610b7a565b3480156102f057600080fd5b506102f9610bd7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561033357818101518382015260200161031b565b50505050905090810190601f1680156103605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037a57600080fd5b506103a76004803603604081101561039157600080fd5b506001600160a01b038135169060200135610c6d565b604080519115158252519081900360200190f35b3480156103c757600080fd5b506103a7600480360360208110156103de57600080fd5b50356001600160a01b0316610c8b565b3480156103fa57600080fd5b50610403610cad565b60408051918252519081900360200190f35b34801561042157600080fd5b5061042a610cb3565b604080516001600160a01b039092168252519081900360200190f35b34801561045257600080fd5b50610403610cd7565b34801561046757600080fd5b506103a76004803603606081101561047e57600080fd5b506001600160a01b03813581169160208101359091169060400135610cdd565b3480156104aa57600080fd5b50610403600480360360208110156104c157600080fd5b5035610d64565b3480156104d457600080fd5b506104dd610dc4565b6040805160ff9092168252519081900360200190f35b3480156104ff57600080fd5b506102b86004803603602081101561051657600080fd5b50356001600160a01b0316610dcd565b34801561053257600080fd5b506102b86004803603602081101561054957600080fd5b5035610f8e565b34801561055c57600080fd5b506103a76004803603604081101561057357600080fd5b506001600160a01b038135169060200135610feb565b34801561059557600080fd5b5061042a611039565b3480156105aa57600080fd5b50610403611048565b3480156105bf57600080fd5b506102b8600480360360208110156105d657600080fd5b503561104e565b3480156105e957600080fd5b506102b86004803603602081101561060057600080fd5b50356001600160a01b0316611147565b34801561061c57600080fd5b506104036004803603604081101561063357600080fd5b508035906020013515156111c3565b34801561064e57600080fd5b5061042a611265565b34801561066357600080fd5b506102b86004803603602081101561067a57600080fd5b50356001600160a01b0316611274565b34801561069657600080fd5b506103a7600480360360208110156106ad57600080fd5b50356001600160a01b03166113fa565b3480156106c957600080fd5b50610403600480360360208110156106e057600080fd5b50356001600160a01b0316611418565b3480156106fc57600080fd5b5061042a61147a565b34801561071157600080fd5b506102b8611489565b34801561072657600080fd5b50610403611519565b34801561073b57600080fd5b5061040361151f565b34801561075057600080fd5b506102b86004803603604081101561076757600080fd5b506001600160a01b0381351690602001351515611525565b34801561078b57600080fd5b506102b8600480360360208110156107a257600080fd5b50356115a8565b3480156107b557600080fd5b506103a7600480360360208110156107cc57600080fd5b50356001600160a01b0316611626565b3480156107e857600080fd5b5061042a611644565b3480156107fd57600080fd5b506102f9611653565b34801561081257600080fd5b506102b86004803603604081101561082957600080fd5b506001600160a01b03813516906020013515156116b4565b34801561084d57600080fd5b506103a76004803603604081101561086457600080fd5b506001600160a01b038135169060200135611737565b34801561088657600080fd5b506102b861179f565b34801561089b57600080fd5b506102b8600480360360408110156108b257600080fd5b8101906020810181356401000000008111156108cd57600080fd5b8201836020820111156108df57600080fd5b8035906020019184602083028401116401000000008311171561090157600080fd5b919350915035151561188d565b34801561091a57600080fd5b506103a76004803603604081101561093157600080fd5b506001600160a01b038135169060200135611940565b34801561095357600080fd5b50610403611954565b34801561096857600080fd5b5061040361195a565b34801561097d57600080fd5b50610403611960565b34801561099257600080fd5b50610403611966565b3480156109a757600080fd5b5061040361196c565b3480156109bc57600080fd5b506102b8600480360360208110156109d357600080fd5b5035611972565b3480156109e657600080fd5b506102b8600480360360208110156109fd57600080fd5b50356119cf565b348015610a1057600080fd5b506102b860048036036020811015610a2757600080fd5b5035611a47565b348015610a3a57600080fd5b5061040360048036036040811015610a5157600080fd5b506001600160a01b0381358116916020013516611ae5565b348015610a7557600080fd5b506102b860048036036020811015610a8c57600080fd5b50356001600160a01b0316611b10565b348015610aa857600080fd5b506102b860048036036020811015610abf57600080fd5b50356001600160a01b0316611b89565b610ad7611d0a565b6000546001600160a01b03908116911614610b27576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601b5415610b70576040805162461bcd60e51b815260206004820152601160248201527020b63932b0b23c903630bab731b432b21760791b604482015290519081900360640190fd5b43601b5542601c55565b610b82611d0a565b6000546001600160a01b03908116911614610bd2576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601355565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b5050505050905090565b6000610c81610c7a611d0a565b8484611d0e565b5060015b92915050565b6001600160a01b03811660009081526009602052604090205460ff165b919050565b600d5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5490565b6000610cea848484611dfa565b610d5a84610cf6611d0a565b610d5585604051806060016040528060288152602001612be3602891396001600160a01b038a16600090815260056020526040812090610d34611d0a565b6001600160a01b031681526020810191909152604001600020549190612077565b611d0e565b5060019392505050565b6000600c54821115610da75760405162461bcd60e51b815260040180806020018281038252602a815260200180612b28602a913960400191505060405180910390fd5b6000610db161210e565b9050610dbd8382611c6f565b9392505050565b60125460ff1690565b610dd5611d0a565b6000546001600160a01b03908116911614610e25576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16610e92576040805162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015290519081900360640190fd5b60005b600a54811015610f8a57816001600160a01b0316600a8281548110610eb657fe5b6000918252602090912001546001600160a01b03161415610f8257600a80546000198101908110610ee357fe5b600091825260209091200154600a80546001600160a01b039092169183908110610f0957fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600890925220805460ff19169055600a805480610f5b57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f8a565b600101610e95565b5050565b610f96611d0a565b6000546001600160a01b03908116911614610fe6576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601555565b6000610c81610ff8611d0a565b84610d558560056000611009611d0a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612131565b600e546001600160a01b031690565b60135481565b6000611058611d0a565b6001600160a01b03811660009081526008602052604090205490915060ff16156110b35760405162461bcd60e51b815260040180806020018281038252602c815260200180612cfb602c913960400191505060405180910390fd5b60008060006110c18561218b565b9350935093505060006110de868585856110d961210e565b6121ea565b50506001600160a01b038616600090815260036020526040902054909150611106908261224c565b6001600160a01b038616600090815260036020526040902055600c5461112c908261224c565b600c55600d5461113c9087612131565b600d55505050505050565b61114f611d0a565b6000546001600160a01b0390811691161461119f576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b5483111561121c576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b600080600061122a8661218b565b93509350935050600080611243888686866110d961210e565b50915091508661125957509350610c8592505050565b9450610c859350505050565b601d546001600160a01b031681565b61127c611d0a565b6000546001600160a01b039081169116146112cc576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff161561133a576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611394576001600160a01b03811660009081526003602052604090205461137a90610d64565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526008602052604081205460ff161561145857506001600160a01b038116600090815260046020526040902054610ca8565b6001600160a01b038216600090815260036020526040902054610c8590610d64565b600f546001600160a01b031690565b611491611d0a565b6000546001600160a01b039081169116146114e1576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612c2b833981519152908390a3600080546001600160a01b0319169055565b601f5481565b601e5481565b61152d611d0a565b6000546001600160a01b0390811691161461157d576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6115b0611d0a565b6000546001600160a01b03908116911614611600576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b611620606461161a83600b54611cb190919063ffffffff16565b90611c6f565b601f5550565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c635780601f10610c3857610100808354040283529160200191610c63565b6116bc611d0a565b6000546001600160a01b0390811691161461170c576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610c81611744611d0a565b84610d5585604051806060016040528060258152602001612d4a602591396005600061176e611d0a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612077565b6001546001600160a01b031633146117e85760405162461bcd60e51b8152600401808060200182810382526023815260200180612d276023913960400191505060405180910390fd5b600254421161183e576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612c2b83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b611895611d0a565b6000546001600160a01b039081169116146118e5576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b60005b8281101561193a57816009600086868581811061190157fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016118e8565b50505050565b6000610c8161194d611d0a565b8484611dfa565b60155481565b60025490565b601b5481565b60175481565b601c5481565b61197a611d0a565b6000546001600160a01b039081169116146119ca576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b601755565b6119d7611d0a565b6000546001600160a01b03908116911614611a27576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b611a41606461161a83600b54611cb190919063ffffffff16565b601e5550565b611a4f611d0a565b6000546001600160a01b03908116911614611a9f576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612c2b833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611b18611d0a565b6000546001600160a01b03908116911614611b68576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b611b91611d0a565b6000546001600160a01b03908116911614611be1576040805162461bcd60e51b81526020600482018190526024820152600080516020612c0b833981519152604482015290519081900360640190fd5b6001600160a01b038116611c265760405162461bcd60e51b8152600401808060200182810382526026815260200180612b526026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612c2b83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610dbd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061228e565b600082611cc057506000610c85565b82820282848281611ccd57fe5b0414610dbd5760405162461bcd60e51b8152600401808060200182810382526021815260200180612bc26021913960400191505060405180910390fd5b3390565b6001600160a01b038316611d535760405162461bcd60e51b8152600401808060200182810382526024815260200180612cd76024913960400191505060405180910390fd5b6001600160a01b038216611d985760405162461bcd60e51b8152600401808060200182810382526022815260200180612b786022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611e3f5760405162461bcd60e51b8152600401808060200182810382526025815260200180612cb26025913960400191505060405180910390fd5b6001600160a01b038216611e845760405162461bcd60e51b8152600401808060200182810382526023815260200180612b056023913960400191505060405180910390fd5b60008111611ec35760405162461bcd60e51b8152600401808060200182810382526029815260200180612c4b6029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611f27576040805162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff161580611f6857506001600160a01b03821660009081526007602052604090205460ff16155b15611fae57601e54811115611fae5760405162461bcd60e51b8152600401808060200182810382526028815260200180612b9a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff16612020576000611fd983611418565b9050601f54828201111561201e5760405162461bcd60e51b815260040180806020018281038252603e815260200180612c74603e913960400191505060405180910390fd5b505b6001600160a01b03831660009081526006602052604090205460019060ff168061206257506001600160a01b03831660009081526006602052604090205460ff165b1561206b575060005b61193a848484846122f3565b600081848411156121065760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120cb5781810151838201526020016120b3565b50505050905090810190601f1680156120f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061211b612461565b909250905061212a8282611c6f565b9250505090565b600082820183811015610dbd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600061219c866125c4565b905060006121a9876125ed565b905060006121b688612602565b905060006121ce836121c88b8761224c565b9061224c565b90506121da818361224c565b9993985091965094509092505050565b60008080806121f98986611cb1565b905060006122078987611cb1565b905060006122158988611cb1565b905060006122238989611cb1565b90506000612237826121c88581898961224c565b949d949c50929a509298505050505050505050565b6000610dbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612077565b600081836122dd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120cb5781810151838201526020016120b3565b5060008385816122e957fe5b0495945050505050565b806123005761230061262a565b6001600160a01b03841660009081526008602052604090205460ff16801561234157506001600160a01b03831660009081526008602052604090205460ff16155b1561235657612351848484612671565b612454565b6001600160a01b03841660009081526008602052604090205460ff1615801561239757506001600160a01b03831660009081526008602052604090205460ff165b156123a7576123518484846127b1565b6001600160a01b03841660009081526008602052604090205460ff161580156123e957506001600160a01b03831660009081526008602052604090205460ff16155b156123f95761235184848461286c565b6001600160a01b03841660009081526008602052604090205460ff16801561243957506001600160a01b03831660009081526008602052604090205460ff165b15612449576123518484846128c2565b61245484848461286c565b8061193a5761193a612947565b600c54600b546000918291825b600a54811015612592578260036000600a848154811061248a57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124ef57508160046000600a84815481106124c857fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561250657600c54600b54945094505050506125c0565b61254660036000600a848154811061251a57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061224c565b925061258860046000600a848154811061255c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061224c565b915060010161246e565b50600b54600c546125a291611c6f565b8210156125ba57600c54600b549350935050506125c0565b90925090505b9091565b600080601b546000146125d9576013546125dc565b60005b9050610dbd606461161a8584611cb1565b600080601b546000146125d9576015546125dc565b600080601b54600014612617576017546125dc565b50601954610dbd606461161a8584611cb1565b60135415801561263a5750601554155b156126445761266f565b60138054601455601580546016556017805460185560198054601a5560009384905591839055829055555b565b6000806000806126808561218b565b9350935093509350600080600061269c888787876110d961210e565b6001600160a01b038d1660009081526004602052604090205492955090935091506126c7908961224c565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546126f6908461224c565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546127259083612131565b6001600160a01b038a1660009081526003602052604090205561274785612961565b61275084612a21565b61275a8187612ae0565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806127c08561218b565b935093509350935060008060006127dc888787876110d961210e565b6001600160a01b038d166000908152600360205260409020549295509093509150612807908461224c565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461283d9088612131565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546127259083612131565b60008060008061287b8561218b565b93509350935093506000806000612897888787876110d961210e565b6001600160a01b038d1660009081526003602052604090205492955090935091506126f6908461224c565b6000806000806128d18561218b565b935093509350935060008060006128ed888787876110d961210e565b6001600160a01b038d166000908152600460205260409020549295509093509150612918908961224c565b6001600160a01b038b16600090815260046020908152604080832093909355600390522054612807908461224c565b601454601355601654601555601854601755601a54601955565b600061296b61210e565b905060006129798383611cb1565b600e546001600160a01b03166000908152600360205260409020549091506129a19082612131565b600e80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526008909152205460ff1615612a1c57600e546001600160a01b0316600090815260046020526040902054612a009084612131565b600e546001600160a01b03166000908152600460205260409020555b505050565b6000612a2b61210e565b90506000612a398383611cb1565b600f546001600160a01b0316600090815260036020526040902054909150612a619082612131565b600f80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526008909152205460ff1615612a1c57600f546001600160a01b0316600090815260046020526040902054612ac09084612131565b600f546001600160a01b0316600090815260046020526040902055505050565b600c54612aed908361224c565b600c55600d54612afd9082612131565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220974bb1404e3734a308371c00554eb38c7a13c3d942ee6dcd725be6a100a4308b64736f6c634300060c0033
Deployed Bytecode Sourcemap
25845:18635:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31484:185;;;;;;;;;;;;;:::i;:::-;;34783:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34783:98:0;;:::i;28502:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29414:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29414:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30922:124;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30922:124:0;-1:-1:-1;;;;;30922:124:0;;:::i;31193:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27305:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27305:51:0;;;;;;;;;;;;;;28779:95;;;;;;;;;;;;;:::i;29583:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29583:313:0;;;;;;;;;;;;;;;;;:::i;32697:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32697:253:0;;:::i;28688:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33299:475;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33299:475:0;-1:-1:-1;;;;;33299:475:0;;:::i;34999:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34999:98:0;;:::i;29904:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29904:218:0;;;;;;;;:::i;31387:89::-;;;;;;;;;;;;;:::i;26865:26::-;;;;;;;;;;;;;:::i;31677:496::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31677:496:0;;:::i;34538:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34538:111:0;-1:-1:-1;;;;;34538:111:0;;:::i;32181:508::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32181:508:0;;;;;;;;;:::i;27363:28::-;;;;;;;;;;;;;:::i;32958:333::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32958:333:0;-1:-1:-1;;;;;32958:333:0;;:::i;39286:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39286:123:0;-1:-1:-1;;;;;39286:123:0;;:::i;28882:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28882:198:0;-1:-1:-1;;;;;28882:198:0;;:::i;31288:91::-;;;;;;;;;;;;;:::i;16319:148::-;;;;;;;;;;;;;:::i;27468:55::-;;;;;;;;;;;;;:::i;27408:53::-;;;;;;;;;;;;;:::i;31054:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31054:131:0;;;;;;;;;;:::i;35279:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35279:173:0;;:::i;30407:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30407:120:0;-1:-1:-1;;;;;30407:120:0;;:::i;15676:79::-;;;;;;;;;;;;;:::i;28593:87::-;;;;;;;;;;;;;:::i;30535:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30535:137:0;;;;;;;;;;:::i;30130:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30130:269:0;;;;;;;;:::i;17329:293::-;;;;;;;;;;;;;:::i;30680:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30680:234:0;-1:-1:-1;30680:234:0;;;;:::i;29088:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29088:167:0;;;;;;;;:::i;26948:26::-;;;;;;;;;;;;;:::i;16874:89::-;;;;;;;;;;;;;:::i;27230:25::-;;;;;;;;;;;;;:::i;27031:27::-;;;;;;;;;;;;;:::i;27262:34::-;;;;;;;;;;;;;:::i;34889:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34889:102:0;;:::i;35109:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35109:162:0;;:::i;17039:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17039:214:0;;:::i;29263:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29263:143:0;;;;;;;;;;:::i;34661:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34661:110:0;-1:-1:-1;;;;;34661:110:0;;:::i;16622:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16622:244:0;-1:-1:-1;;;;;16622:244:0;;:::i;31484:185::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;31540:10:::1;::::0;:15;31532:45:::1;;;::::0;;-1:-1:-1;;;31532:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31532:45:0;;;;;;;;;;;;;::::1;;31601:12;31588:10;:25:::0;31646:15:::1;31624:19;:37:::0;31484:185::o;34783:98::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;34857:7:::1;:16:::0;34783:98::o;28502:83::-;28572:5;28565:12;;;;;;;;-1:-1:-1;;28565:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28539:13;;28565:12;;28572:5;;28565:12;;28572:5;28565:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28502:83;:::o;29414:161::-;29489:4;29506:39;29515:12;:10;:12::i;:::-;29529:7;29538:6;29506:8;:39::i;:::-;-1:-1:-1;29563:4:0;29414:161;;;;;:::o;30922:124::-;-1:-1:-1;;;;;31016:22:0;;30992:4;31016:22;;;:13;:22;;;;;;;;30922:124;;;;:::o;31193:87::-;31262:10;;31193:87;:::o;27305:51::-;;;:::o;28779:95::-;28859:7;;28779:95;:::o;29583:313::-;29681:4;29698:36;29708:6;29716:9;29727:6;29698:9;:36::i;:::-;29745:121;29754:6;29762:12;:10;:12::i;:::-;29776:89;29814:6;29776:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29776:19:0;;;;;;:11;:19;;;;;;29796:12;:10;:12::i;:::-;-1:-1:-1;;;;;29776:33:0;;;;;;;;;;;;-1:-1:-1;29776:33:0;;;:89;:37;:89::i;:::-;29745:8;:121::i;:::-;-1:-1:-1;29884:4:0;29583:313;;;;;:::o;32697:253::-;32763:7;32802;;32791;:18;;32783:73;;;;-1:-1:-1;;;32783:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32867:19;32890:10;:8;:10::i;:::-;32867:33;-1:-1:-1;32918:24:0;:7;32867:33;32918:11;:24::i;:::-;32911:31;32697:253;-1:-1:-1;;;32697:253:0:o;28688:83::-;28754:9;;;;28688:83;:::o;33299:475::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33381:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33373:56;;;::::0;;-1:-1:-1;;;33373:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33445:9;33440:327;33464:9;:16:::0;33460:20;::::1;33440:327;;;33522:7;-1:-1:-1::0;;;;;33506:23:0::1;:9;33516:1;33506:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33506:12:0::1;:23;33502:254;;;33565:9;33575:16:::0;;-1:-1:-1;;33575:20:0;;;33565:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33550:9:::1;:12:::0;;-1:-1:-1;;;;;33565:31:0;;::::1;::::0;33560:1;;33550:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33550:46:0::1;-1:-1:-1::0;;;;;33550:46:0;;::::1;;::::0;;33615:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;33654:11:::1;:20:::0;;;;:28;;-1:-1:-1;;33654:28:0::1;::::0;;33701:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33701:15:0;;;;;-1:-1:-1;;;;;;33701:15:0::1;::::0;;;;;33735:5:::1;;33502:254;33482:3;;33440:327;;;;33299:475:::0;:::o;34999:98::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;35073:7:::1;:16:::0;34999:98::o;29904:218::-;29992:4;30009:83;30018:12;:10;:12::i;:::-;30032:7;30041:50;30080:10;30041:11;:25;30053:12;:10;:12::i;:::-;-1:-1:-1;;;;;30041:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30041:25:0;;;:34;;;;;;;;;;;:38;:50::i;31387:89::-;31457:11;;-1:-1:-1;;;;;31457:11:0;31387:89;:::o;26865:26::-;;;;:::o;31677:496::-;31729:14;31746:12;:10;:12::i;:::-;-1:-1:-1;;;;;31778:19:0;;;;;;:11;:19;;;;;;31729:29;;-1:-1:-1;31778:19:0;;31777:20;31769:77;;;;-1:-1:-1;;;31769:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31861:12;31875;31889:13;31906:20;31918:7;31906:11;:20::i;:::-;31859:67;;;;;;;31938:15;31959:51;31971:7;31980:4;31986;31992:5;31999:10;:8;:10::i;:::-;31959:11;:51::i;:::-;-1:-1:-1;;;;;;;32049:15:0;;;;;;:7;:15;;;;;;31937:73;;-1:-1:-1;32049:28:0;;31937:73;32049:19;:28::i;:::-;-1:-1:-1;;;;;32031:15:0;;;;;;:7;:15;;;;;:46;32098:7;;:20;;32110:7;32098:11;:20::i;:::-;32088:7;:30;32142:10;;:23;;32157:7;32142:14;:23::i;:::-;32129:10;:36;-1:-1:-1;;;;;;31677:496:0:o;34538:111::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34607:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34607:34:0::1;34637:4;34607:34;::::0;;34538:111::o;32181:508::-;32271:7;32310;;32299;:18;;32291:62;;;;;-1:-1:-1;;;32291:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32376:12;32390;32404:13;32421:20;32433:7;32421:11;:20::i;:::-;32374:67;;;;;;;32453:15;32470:23;32498:51;32510:7;32519:4;32525;32531:5;32538:10;:8;:10::i;32498:51::-;32452:97;;;;;32567:17;32562:120;;-1:-1:-1;32608:7:0;-1:-1:-1;32601:14:0;;-1:-1:-1;;;32601:14:0;32562:120;32655:15;-1:-1:-1;32648:22:0;;-1:-1:-1;;;;32648:22:0;27363:28;;;-1:-1:-1;;;;;27363:28:0;;:::o;32958:333::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33041:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33040:21;33032:61;;;::::0;;-1:-1:-1;;;33032:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33107:16:0;::::1;33126:1;33107:16:::0;;;:7:::1;:16;::::0;;;;;:20;33104:108:::1;;-1:-1:-1::0;;;;;33183:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33163:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;33144:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;33104:108:::1;-1:-1:-1::0;;;;;33222:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33222:27:0::1;33245:4;33222:27:::0;;::::1;::::0;;;33260:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33260:23:0::1;::::0;;::::1;::::0;;32958:333::o;39286:123::-;-1:-1:-1;;;;;39374:27:0;39350:4;39374:27;;;:18;:27;;;;;;;;;39286:123::o;28882:198::-;-1:-1:-1;;;;;28972:20:0;;28948:7;28972:20;;;:11;:20;;;;;;;;28968:49;;;-1:-1:-1;;;;;;29001:16:0;;;;;;:7;:16;;;;;;28994:23;;28968:49;-1:-1:-1;;;;;29055:16:0;;;;;;:7;:16;;;;;;29035:37;;:19;:37::i;31288:91::-;31359:12;;-1:-1:-1;;;;;31359:12:0;31288:91;:::o;16319:148::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;16426:1:::1;16410:6:::0;;16389:40:::1;::::0;-1:-1:-1;;;;;16410:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16389:40:0;16426:1;;16389:40:::1;16457:1;16440:19:::0;;-1:-1:-1;;;;;;16440:19:0::1;::::0;;16319:148::o;27468:55::-;;;;:::o;27408:53::-;;;;:::o;31054:131::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31142:26:0;;;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;31142:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31054:131::o;35279:173::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;35382:62:::1;35428:5;35382:27;35394:14;35382:7;;:11;;:27;;;;:::i;:::-;:31:::0;::::1;:62::i;:::-;35364:15;:80:::0;-1:-1:-1;35279:173:0:o;30407:120::-;-1:-1:-1;;;;;30499:20:0;30475:4;30499:20;;;:11;:20;;;;;;;;;30407:120::o;15676:79::-;15714:7;15741:6;-1:-1:-1;;;;;15741:6:0;15676:79;:::o;28593:87::-;28665:7;28658:14;;;;;;;;-1:-1:-1;;28658:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28632:13;;28658:14;;28665:7;;28658:14;;28665:7;28658:14;;;;;;;;;;;;;;;;;;;;;;;;30535:137;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30628:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:36;;-1:-1:-1;;30628:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30535:137::o;30130:269::-;30223:4;30240:129;30249:12;:10;:12::i;:::-;30263:7;30272:96;30311:15;30272:96;;;;;;;;;;;;;;;;;:11;:25;30284:12;:10;:12::i;:::-;-1:-1:-1;;;;;30272:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30272:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17329:293::-;17381:14;;-1:-1:-1;;;;;17381:14:0;17399:10;17381:28;17373:76;;;;-1:-1:-1;;;17373:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17474:9;;17468:3;:15;17460:60;;;;;-1:-1:-1;;;17460:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17565:14;;;17557:6;;17536:44;;-1:-1:-1;;;;;17565:14:0;;;;17557:6;;;;-1:-1:-1;;;;;;;;;;;17536:44:0;;17600:14;;;17591:23;;-1:-1:-1;;;;;;17591:23:0;-1:-1:-1;;;;;17600:14:0;;;17591:23;;;;;;17329:293::o;30680:234::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;30799:9:::1;30794:113;30814:19:::0;;::::1;30794:113;;;30884:11;30855:13;:26;30869:8;;30878:1;30869:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;30869:11:0::1;30855:26:::0;;-1:-1:-1;30855:26:0;::::1;::::0;;;;;;-1:-1:-1;30855:26:0;:40;;-1:-1:-1;;30855:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;30835:3:0::1;30794:113;;;;30680:234:::0;;;:::o;29088:167::-;29166:4;29183:42;29193:12;:10;:12::i;:::-;29207:9;29218:6;29183:9;:42::i;26948:26::-;;;;:::o;16874:89::-;16946:9;;16874:89;:::o;27230:25::-;;;;:::o;27031:27::-;;;;:::o;27262:34::-;;;;:::o;34889:102::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;34965:8:::1;:18:::0;34889:102::o;35109:162::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;35203:60:::1;35247:5;35203:25;35215:12;35203:7;;:11;;:25;;;;:::i;:60::-;35188:12;:75:::0;-1:-1:-1;35109:162:0:o;17039:214::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;17120:6:::1;::::0;;;17103:23;;-1:-1:-1;;;;;;17103:23:0;;::::1;-1:-1:-1::0;;;;;17120:6:0;::::1;17103:23;::::0;;;17137:19:::1;::::0;;17179:3:::1;:10:::0;::::1;17167:9;:22:::0;17205:40:::1;::::0;17120:6;;-1:-1:-1;;;;;;;;;;;17205:40:0;17120:6;;17205:40:::1;17039:214:::0;:::o;29263:143::-;-1:-1:-1;;;;;29371:18:0;;;29344:7;29371:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29263:143::o;34661:110::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34728:27:0::1;34758:5;34728:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34728:35:0::1;::::0;;34661:110::o;16622:244::-;15898:12;:10;:12::i;:::-;15888:6;;-1:-1:-1;;;;;15888:6:0;;;:22;;;15880:67;;;;;-1:-1:-1;;;15880:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15880:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16711:22:0;::::1;16703:73;;;;-1:-1:-1::0;;;16703:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16813:6;::::0;;16792:38:::1;::::0;-1:-1:-1;;;;;16792:38:0;;::::1;::::0;16813:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16792:38:0;::::1;16841:6;:17:::0;;-1:-1:-1;;;;;;16841:17:0::1;-1:-1:-1::0;;;;;16841:17:0;;;::::1;::::0;;;::::1;::::0;;16622:244::o;5892:132::-;5950:7;5977:39;5981:1;5984;5977:39;;;;;;;;;;;;;;;;;:3;:39::i;4945:471::-;5003:7;5248:6;5244:47;;-1:-1:-1;5278:1:0;5271:8;;5244:47;5315:5;;;5319:1;5315;:5;:1;5339:5;;;;;:10;5331:56;;;;-1:-1:-1;;;5331:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8084:106;8172:10;8084:106;:::o;39417:337::-;-1:-1:-1;;;;;39510:19:0;;39502:68;;;;-1:-1:-1;;;39502:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39589:21:0;;39581:68;;;;-1:-1:-1;;;39581:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39662:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39714:32;;;;;;;;;;;;;;;;;39417:337;;;:::o;39762:1223::-;-1:-1:-1;;;;;39884:18:0;;39876:68;;;;-1:-1:-1;;;39876:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39963:16:0;;39955:64;;;;-1:-1:-1;;;39955:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40047:1;40038:6;:10;40030:64;;;;-1:-1:-1;;;40030:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40114:19:0;;;;;;:13;:19;;;;;;;;40113:20;40105:52;;;;;-1:-1:-1;;;40105:52:0;;;;;;;;;;;;-1:-1:-1;;;40105:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40174:24:0;;;;;;:18;:24;;;;;;;;40173:25;;:52;;-1:-1:-1;;;;;;40203:22:0;;;;;;:18;:22;;;;;;;;40202:23;40173:52;40170:159;;;40260:12;;40250:6;:22;;40242:75;;;;-1:-1:-1;;;40242:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40347:22:0;;;;;;:18;:22;;;;;;;;40342:221;;40386:18;40407:13;40417:2;40407:9;:13::i;:::-;40386:34;;40469:15;;40458:6;40445:10;:19;40444:40;;40436:115;;;;-1:-1:-1;;;40436:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40342:221;;-1:-1:-1;;;;;40771:24:0;;40644:12;40771:24;;;:18;:24;;;;;;40659:4;;40771:24;;;:50;;-1:-1:-1;;;;;;40799:22:0;;;;;;:18;:22;;;;;;;;40771:50;40768:96;;;-1:-1:-1;40847:5:0;40768:96;40939:38;40954:4;40959:2;40962:6;40969:7;40939:14;:38::i;4494:192::-;4580:7;4616:12;4608:6;;;;4600:29;;;;-1:-1:-1;;;4600:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4652:5:0;;;4494:192::o;36649:163::-;36690:7;36711:15;36728;36747:19;:17;:19::i;:::-;36710:56;;-1:-1:-1;36710:56:0;-1:-1:-1;36784:20:0;36710:56;;36784:11;:20::i;:::-;36777:27;;;;36649:163;:::o;3591:181::-;3649:7;3681:5;;;3705:6;;;;3697:46;;;;;-1:-1:-1;;;3697:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;35714:439;35774:7;35783;35792;35801;35821:12;35836:24;35852:7;35836:15;:24::i;:::-;35821:39;;35871:12;35886:24;35902:7;35886:15;:24::i;:::-;35871:39;;35921:13;35937:25;35954:7;35937:16;:25::i;:::-;35921:41;-1:-1:-1;35973:23:0;35999:27;36021:4;35999:17;:7;36011:4;35999:11;:17::i;:::-;:21;;:27::i;:::-;35973:53;-1:-1:-1;36063:26:0;35973:53;36083:5;36063:19;:26::i;:::-;36045:44;36127:4;;-1:-1:-1;36133:4:0;;-1:-1:-1;36133:4:0;-1:-1:-1;35714:439:0;;-1:-1:-1;;;35714:439:0:o;36161:480::-;36285:7;;;;36341:24;:7;36353:11;36341;:24::i;:::-;36323:42;-1:-1:-1;36376:12:0;36391:21;:4;36400:11;36391:8;:21::i;:::-;36376:36;-1:-1:-1;36423:12:0;36438:21;:4;36447:11;36438:8;:21::i;:::-;36423:36;-1:-1:-1;36470:13:0;36486:22;:5;36496:11;36486:9;:22::i;:::-;36470:38;-1:-1:-1;36519:23:0;36545:38;36470;36545:27;36567:4;36545:27;:7;36557:4;36545:11;:17::i;:38::-;36602:7;;;;-1:-1:-1;36628:4:0;;-1:-1:-1;36161:480:0;;-1:-1:-1;;;;;;;;;36161:480:0:o;4055:136::-;4113:7;4140:43;4144:1;4147;4140:43;;;;;;;;;;;;;;;;;:3;:43::i;6520:278::-;6606:7;6641:12;6634:5;6626:28;;;;-1:-1:-1;;;6626:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6665:9;6681:1;6677;:5;;;;;;;6520:278;-1:-1:-1;;;;;6520:278:0:o;41663:834::-;41774:7;41770:40;;41796:14;:12;:14::i;:::-;-1:-1:-1;;;;;41835:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;41859:22:0;;;;;;:11;:22;;;;;;;;41858:23;41835:46;41831:597;;;41898:48;41920:6;41928:9;41939:6;41898:21;:48::i;:::-;41831:597;;;-1:-1:-1;;;;;41969:19:0;;;;;;:11;:19;;;;;;;;41968:20;:46;;;;-1:-1:-1;;;;;;41992:22:0;;;;;;:11;:22;;;;;;;;41968:46;41964:464;;;42031:46;42051:6;42059:9;42070:6;42031:19;:46::i;41964:464::-;-1:-1:-1;;;;;42100:19:0;;;;;;:11;:19;;;;;;;;42099:20;:47;;;;-1:-1:-1;;;;;;42124:22:0;;;;;;:11;:22;;;;;;;;42123:23;42099:47;42095:333;;;42163:44;42181:6;42189:9;42200:6;42163:17;:44::i;42095:333::-;-1:-1:-1;;;;;42229:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42252:22:0;;;;;;:11;:22;;;;;;;;42229:45;42225:203;;;42291:48;42313:6;42321:9;42332:6;42291:21;:48::i;42225:203::-;42372:44;42390:6;42398:9;42409:6;42372:17;:44::i;:::-;42452:7;42448:41;;42474:15;:13;:15::i;36820:561::-;36917:7;;36953;;36870;;;;;36977:289;37001:9;:16;36997:20;;36977:289;;;37067:7;37043;:21;37051:9;37061:1;37051:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37051:12:0;37043:21;;;;;;;;;;;;;:31;;:66;;;37102:7;37078;:21;37086:9;37096:1;37086:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37086:12:0;37078:21;;;;;;;;;;;;;:31;37043:66;37039:97;;;37119:7;;37128;;37111:25;;;;;;;;;37039:97;37161:34;37173:7;:21;37181:9;37191:1;37181:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37181:12:0;37173:21;;;;;;;;;;;;;37161:7;;:11;:34::i;:::-;37151:44;;37220:34;37232:7;:21;37240:9;37250:1;37240:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37240:12:0;37232:21;;;;;;;;;;;;;37220:7;;:11;:34::i;:::-;37210:44;-1:-1:-1;37019:3:0;;36977:289;;;-1:-1:-1;37302:7:0;;37290;;:20;;:11;:20::i;:::-;37280:7;:30;37276:61;;;37320:7;;37329;;37312:25;;;;;;;;37276:61;37356:7;;-1:-1:-1;37365:7:0;-1:-1:-1;36820:561:0;;;:::o;38040:204::-;38104:7;38124:11;38138:10;;38152:1;38138:15;:29;;38160:7;;38138:29;;;38156:1;38138:29;38124:43;-1:-1:-1;38185:51:0;38220:5;38185:16;:7;38124:43;38185:11;:16::i;38252:204::-;38316:7;38336:11;38350:10;;38364:1;38350:15;:29;;38372:7;;38350:29;;38464:221;38529:7;38549:11;38563:10;;38577:1;38563:15;:45;;38600:8;;38563:45;;;-1:-1:-1;38581:16:0;;38626:51;38661:5;38626:16;:7;38581:16;38626:11;:16::i;38693:372::-;38739:7;;:12;:28;;;;-1:-1:-1;38755:7:0;;:12;38739:28;38736:40;;;38769:7;;38736:40;38814:7;;;38796:15;:25;38850:7;;;38832:15;:25;38887:8;;;38868:16;:27;38933:16;;;38906:24;:43;-1:-1:-1;38970:11:0;;;;38992;;;;39014:12;;;39037:20;38693:372;:::o;43813:664::-;43916:23;43941:12;43955;43969:13;43986:20;43998:7;43986:11;:20::i;:::-;43915:91;;;;;;;;44018:15;44035:23;44060:12;44076:51;44088:7;44097:4;44103;44109:5;44116:10;:8;:10::i;44076:51::-;-1:-1:-1;;;;;44158:15:0;;;;;;:7;:15;;;;;;44017:110;;-1:-1:-1;44017:110:0;;-1:-1:-1;44017:110:0;-1:-1:-1;44158:28:0;;44178:7;44158:19;:28::i;:::-;-1:-1:-1;;;;;44140:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44215:7;:15;;;;:28;;44235:7;44215:19;:28::i;:::-;-1:-1:-1;;;;;44197:15:0;;;;;;;:7;:15;;;;;;:46;;;;44275:18;;;;;;;:39;;44298:15;44275:22;:39::i;:::-;-1:-1:-1;;;;;44254:18:0;;;;;;:7;:18;;;;;:60;44328:17;44340:4;44328:11;:17::i;:::-;44356:19;44369:5;44356:12;:19::i;:::-;44386:23;44398:4;44404;44386:11;:23::i;:::-;44442:9;-1:-1:-1;;;;;44425:44:0;44434:6;-1:-1:-1;;;;;44425:44:0;;44453:15;44425:44;;;;;;;;;;;;;;;;;;43813:664;;;;;;;;;;:::o;43121:684::-;43222:23;43247:12;43261;43275:13;43292:20;43304:7;43292:11;:20::i;:::-;43221:91;;;;;;;;43324:15;43341:23;43366:12;43382:51;43394:7;43403:4;43409;43415:5;43422:10;:8;:10::i;43382:51::-;-1:-1:-1;;;;;43464:15:0;;;;;;:7;:15;;;;;;43323:110;;-1:-1:-1;43323:110:0;;-1:-1:-1;43323:110:0;-1:-1:-1;43464:28:0;;43323:110;43464:19;:28::i;:::-;-1:-1:-1;;;;;43446:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43524:18;;;;;:7;:18;;;;;:39;;43547:15;43524:22;:39::i;:::-;-1:-1:-1;;;;;43503:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43595:7;:18;;;;:39;;43618:15;43595:22;:39::i;42505:608::-;42604:23;42629:12;42643;42657:13;42674:20;42686:7;42674:11;:20::i;:::-;42603:91;;;;;;;;42706:15;42723:23;42748:12;42764:51;42776:7;42785:4;42791;42797:5;42804:10;:8;:10::i;42764:51::-;-1:-1:-1;;;;;42854:15:0;;;;;;:7;:15;;;;;;42705:110;;-1:-1:-1;42705:110:0;;-1:-1:-1;42705:110:0;-1:-1:-1;42854:28:0;;42705:110;42854:19;:28::i;33790:732::-;33893:23;33918:12;33932;33946:13;33963:20;33975:7;33963:11;:20::i;:::-;33892:91;;;;;;;;33995:15;34012:23;34037:12;34053:51;34065:7;34074:4;34080;34086:5;34093:10;:8;:10::i;34053:51::-;-1:-1:-1;;;;;34135:15:0;;;;;;:7;:15;;;;;;33994:110;;-1:-1:-1;33994:110:0;;-1:-1:-1;33994:110:0;-1:-1:-1;34135:28:0;;34155:7;34135:19;:28::i;:::-;-1:-1:-1;;;;;34117:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34192:7;:15;;;;:28;;34212:7;34192:19;:28::i;39073:205::-;39127:15;;39117:7;:25;39163:15;;39153:7;:25;39200:16;;39189:8;:27;39246:24;;39227:16;:43;39073:205::o;37389:312::-;37443:19;37466:10;:8;:10::i;:::-;37443:33;-1:-1:-1;37487:12:0;37502:21;:4;37443:33;37502:8;:21::i;:::-;37565:11;;-1:-1:-1;;;;;37565:11:0;37557:20;;;;:7;:20;;;;;;37487:36;;-1:-1:-1;37557:30:0;;37487:36;37557:24;:30::i;:::-;37542:11;;;-1:-1:-1;;;;;37542:11:0;;;37534:20;;;;:7;:20;;;;;;;;:53;;;;37613:11;;;;;37601:24;;:11;:24;;;;;;;37598:95;;;37671:11;;-1:-1:-1;;;;;37671:11:0;37663:20;;;;:7;:20;;;;;;:30;;37688:4;37663:24;:30::i;:::-;37648:11;;-1:-1:-1;;;;;37648:11:0;37640:20;;;;:7;:20;;;;;:53;37598:95;37389:312;;;:::o;37709:323::-;37765:19;37788:10;:8;:10::i;:::-;37765:33;-1:-1:-1;37809:13:0;37825:22;:5;37765:33;37825:9;:22::i;:::-;37890:12;;-1:-1:-1;;;;;37890:12:0;37882:21;;;;:7;:21;;;;;;37809:38;;-1:-1:-1;37882:32:0;;37809:38;37882:25;:32::i;:::-;37866:12;;;-1:-1:-1;;;;;37866:12:0;;;37858:21;;;;:7;:21;;;;;;;;:56;;;;37940:12;;;;;37928:25;;:11;:25;;;;;;;37925:99;;;38000:12;;-1:-1:-1;;;;;38000:12:0;37992:21;;;;:7;:21;;;;;;:32;;38018:5;37992:25;:32::i;:::-;37976:12;;-1:-1:-1;;;;;37976:12:0;37968:21;;;;:7;:21;;;;;:56;37709:323;;;:::o;35559:147::-;35637:7;;:17;;35649:4;35637:11;:17::i;:::-;35627:7;:27;35678:10;;:20;;35693:4;35678:14;:20::i;:::-;35665:10;:33;-1:-1:-1;;35559:147:0:o
Swarm Source
ipfs://974bb1404e3734a308371c00554eb38c7a13c3d942ee6dcd725be6a100a4308b
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.