Overview
ETH Balance
0.016729744802216317 ETH
Eth Value
$60.72 (@ $3,629.18/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 155 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exclude From Max... | 20426223 | 158 days ago | IN | 0 ETH | 0.00040767 | ||||
Enable Antibot | 20425969 | 158 days ago | IN | 0 ETH | 0.00019329 | ||||
Approve | 20420984 | 159 days ago | IN | 0 ETH | 0.00040709 | ||||
Approve | 20379385 | 164 days ago | IN | 0 ETH | 0.00041024 | ||||
Approve | 20290883 | 177 days ago | IN | 0 ETH | 0.0005442 | ||||
Transfer | 20268535 | 180 days ago | IN | 0 ETH | 0.00027272 | ||||
Approve | 20263784 | 180 days ago | IN | 0 ETH | 0.00024272 | ||||
Approve | 20258696 | 181 days ago | IN | 0 ETH | 0.0002327 | ||||
Approve | 20233129 | 185 days ago | IN | 0 ETH | 0.00035447 | ||||
Approve | 20231609 | 185 days ago | IN | 0 ETH | 0.00021315 | ||||
Approve | 20226311 | 186 days ago | IN | 0 ETH | 0.00115091 | ||||
Transfer | 20222674 | 186 days ago | IN | 0 ETH | 0.00014863 | ||||
Approve | 20217881 | 187 days ago | IN | 0 ETH | 0.00015143 | ||||
Approve | 20217319 | 187 days ago | IN | 0 ETH | 0.000304 | ||||
Approve | 20216164 | 187 days ago | IN | 0 ETH | 0.00013473 | ||||
Approve | 20215785 | 187 days ago | IN | 0 ETH | 0.00009805 | ||||
Approve | 20215750 | 187 days ago | IN | 0 ETH | 0.00021432 | ||||
Approve | 20215553 | 187 days ago | IN | 0 ETH | 0.00010258 | ||||
Approve | 20215540 | 187 days ago | IN | 0 ETH | 0.00031493 | ||||
Transfer | 20215417 | 187 days ago | IN | 0 ETH | 0.00017271 | ||||
Transfer | 20215393 | 187 days ago | IN | 0 ETH | 0.00017037 | ||||
Approve | 20214217 | 187 days ago | IN | 0 ETH | 0.00028232 | ||||
Approve | 20207042 | 188 days ago | IN | 0 ETH | 0.00040324 | ||||
Transfer | 20206458 | 188 days ago | IN | 0 ETH | 0.00029092 | ||||
Approve | 20206116 | 189 days ago | IN | 0 ETH | 0.00011358 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20420989 | 159 days ago | 0.00073715 ETH | ||||
20420989 | 159 days ago | 0.0014743 ETH | ||||
20420989 | 159 days ago | 0.00221145 ETH | ||||
20319352 | 173 days ago | 0.00062566 ETH | ||||
20319352 | 173 days ago | 0.00125132 ETH | ||||
20319352 | 173 days ago | 0.00187698 ETH | ||||
20263786 | 180 days ago | 0.0010004 ETH | ||||
20263786 | 180 days ago | 0.0020008 ETH | ||||
20263786 | 180 days ago | 0.00300121 ETH | ||||
20258683 | 181 days ago | 0.00157852 ETH | ||||
20258683 | 181 days ago | 0.00315705 ETH | ||||
20258683 | 181 days ago | 0.00473558 ETH | ||||
20233956 | 185 days ago | 0.00097865 ETH | ||||
20233956 | 185 days ago | 0.0019573 ETH | ||||
20233956 | 185 days ago | 0.00293596 ETH | ||||
20233132 | 185 days ago | 0.00165068 ETH | ||||
20233132 | 185 days ago | 0.00330137 ETH | ||||
20233132 | 185 days ago | 0.00495206 ETH | ||||
20223551 | 186 days ago | 0.00217554 ETH | ||||
20223551 | 186 days ago | 0.00435108 ETH | ||||
20223551 | 186 days ago | 0.00652663 ETH | ||||
20217209 | 187 days ago | 0.00000215 ETH | ||||
20217209 | 187 days ago | 0.00307032 ETH | ||||
20217209 | 187 days ago | 0.00614065 ETH | ||||
20217209 | 187 days ago | 0.00921098 ETH |
Loading...
Loading
Contract Name:
StandardTokenWithAntibot
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } pragma solidity ^0.8.0; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } pragma solidity 0.8.19; interface IUniswapV2Caller { function swapExactTokensForTokensSupportingFeeOnTransferTokens( address router, uint256 amountIn, uint256 amountOutMin, address[] calldata path, uint256 deadline ) external; } interface IFee { function payFee( uint256 _tokenType, address creator, bool isAntibot, address referrer ) external payable; } interface IGemAntiBot { function setTokenOwner(address owner) external; function onPreTransferCheck( address from, address to, uint256 amount ) external; } contract StandardTokenWithAntibot is ERC20, Ownable { using SafeERC20 for IERC20; struct Args { string name; string symbol; uint8 decimals; uint256 totalSupply; uint256 maxWallet; uint256 maxTransactionAmount; address marketingWallet; address baseTokenForMarket; address mainRouter; bool isMarketingFeeBaseToken; uint24 sellLiquidityFee; uint24 buyLiquidityFee; uint24 sellMarketingFee; uint24 buyMarketingFee; address feeContract; address uniswapV2Caller; } IUniswapV2Caller public uniswapV2Caller; uint256 private constant MAX = ~uint256(0); uint8 private _decimals; /////////////////////////////////////////////////////////////////////////// address public baseTokenForMarket; bool public isBaseTokenWETH; bool private inSwapAndLiquify; uint24 public sellLiquidityFee; uint24 public buyLiquidityFee; uint24 public sellMarketingFee; uint24 public buyMarketingFee; address public marketingWallet; bool public isMarketingFeeBaseToken; uint256 public minAmountToTakeFee; uint256 public maxWallet; uint256 public maxTransactionAmount; address public mainRouter; address public mainPair; address public gemAntiBot; bool public antiBotEnabled; mapping(address => bool) public isExcludedFromMaxTransactionAmount; mapping(address => bool) public isExcludedFromFee; mapping(address => bool) public automatedMarketMakerPairs; uint256 private _liquidityFeeTokens; uint256 private _marketingFeeTokens; event UpdateLiquidityFee( uint24 newSellLiquidityFee, uint24 newBuyLiquidityFee, uint24 oldSellLiquidityFee, uint24 oldBuyLiquidityFee ); event UpdateMarketingFee( uint24 newSellMarketingFee, uint24 newBuyMarketingFee, uint24 oldSellMarketingFee, uint24 oldBuyMarketingFee ); event UpdateMarketingWallet( address indexed newMarketingWallet, bool newIsMarketingFeeBaseToken, address indexed oldMarketingWallet, bool oldIsMarketingFeeBaseToken ); event ExcludedFromMaxTransactionAmount(address indexed account, bool isExcluded); event UpdateMinAmountToTakeFee(uint256 newMinAmountToTakeFee, uint256 oldMinAmountToTakeFee); event SetAutomatedMarketMakerPair(address indexed pair, bool value); event ExcludedFromFee(address indexed account, bool isEx); event SwapAndLiquify( uint256 tokensForLiquidity, uint256 baseTokenForLiquidity ); event MarketingFeeTaken( uint256 marketingFeeTokens, uint256 marketingFeeBaseTokenSwapped ); event MainRouterUpdated( address mainRouter, address mainPair, address baseTokenForMarket ); event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet); event UpdateMaxTransactionAmount(uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount); /////////////////////////////////////////////////////////////////////////////// constructor( Args memory args, address[] memory autoApproveAddressList, address _gemAntiBot, address referrer ) ERC20(args.name, args.symbol) payable { IFee(args.feeContract).payFee{value: msg.value}(1, _msgSender(), true, referrer); _decimals = args.decimals; _mint(msg.sender, args.totalSupply); gemAntiBot = _gemAntiBot; IGemAntiBot(gemAntiBot).setTokenOwner(_msgSender()); antiBotEnabled = true; uniswapV2Caller = IUniswapV2Caller(args.uniswapV2Caller); baseTokenForMarket=args.baseTokenForMarket; require(args.marketingWallet!=address(0), "marketing wallet can not be 0"); require(args.mainRouter!=address(0), "Router address can not be 0"); require(args.sellLiquidityFee+args.sellMarketingFee<=200000, "sell fee <= 20%"); require(args.buyLiquidityFee+args.buyMarketingFee<=200000, "buy fee <= 20%"); marketingWallet=args.marketingWallet; isMarketingFeeBaseToken=args.isMarketingFeeBaseToken; emit UpdateMarketingWallet( marketingWallet, isMarketingFeeBaseToken, address(0), false ); mainRouter=args.mainRouter; if(baseTokenForMarket != IUniswapV2Router02(mainRouter).WETH()){ IERC20(baseTokenForMarket).safeApprove(mainRouter, MAX); }else{ isBaseTokenWETH=true; } _approve(address(this), address(uniswapV2Caller), MAX); _approve(address(this), mainRouter, MAX); for(uint256 i=0;i<autoApproveAddressList.length;i++){ _approve(_msgSender(), autoApproveAddressList[i], MAX); isExcludedFromFee[autoApproveAddressList[i]] = true; isExcludedFromMaxTransactionAmount[autoApproveAddressList[i]]=true; } mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair( address(this), baseTokenForMarket ); emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket); require(args.maxTransactionAmount>=args.totalSupply / 10000, "maxTransactionAmount >= total supply / 10000"); require(args.maxWallet>=args.totalSupply / 10000, "maxWallet >= total supply / 10000"); maxWallet=args.maxWallet; emit UpdateMaxWallet(maxWallet, 0); maxTransactionAmount=args.maxTransactionAmount; emit UpdateMaxTransactionAmount(maxTransactionAmount, 0); sellLiquidityFee=args.sellLiquidityFee; buyLiquidityFee=args.buyLiquidityFee; emit UpdateLiquidityFee(sellLiquidityFee, buyLiquidityFee, 0, 0); sellMarketingFee=args.sellMarketingFee; buyMarketingFee=args.buyMarketingFee; emit UpdateMarketingFee( sellMarketingFee, buyMarketingFee, 0, 0 ); minAmountToTakeFee=args.totalSupply/10000; emit UpdateMinAmountToTakeFee(minAmountToTakeFee, 0); isExcludedFromFee[address(this)]=true; isExcludedFromFee[marketingWallet]=true; isExcludedFromFee[_msgSender()]=true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromMaxTransactionAmount[address(0xdead)]=true; isExcludedFromMaxTransactionAmount[address(this)]=true; isExcludedFromMaxTransactionAmount[marketingWallet]=true; isExcludedFromMaxTransactionAmount[_msgSender()]=true; _setAutomatedMarketMakerPair(mainPair, true); } function enableAntibot(bool enabled_) external onlyOwner { antiBotEnabled = enabled_; } function decimals() public view override returns (uint8) { return _decimals; } function updateMainPair( address _mainRouter, address _baseTokenForMarket ) external onlyOwner { baseTokenForMarket = _baseTokenForMarket; if(mainRouter != _mainRouter){ _approve(address(this), mainRouter, MAX); mainRouter = _mainRouter; } mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair( address(this), baseTokenForMarket ); if(baseTokenForMarket != IUniswapV2Router02(mainRouter).WETH()){ IERC20(baseTokenForMarket).safeApprove(mainRouter, MAX); isBaseTokenWETH=false; }else{ isBaseTokenWETH=true; } emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket); _setAutomatedMarketMakerPair(mainPair, true); } ///////////////////////////////////////////////////////////////////////////////// modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } function updateLiquidityFee( uint24 _sellLiquidityFee, uint24 _buyLiquidityFee ) external onlyOwner { require( _sellLiquidityFee + sellMarketingFee <= 200000, "sell fee <= 20%" ); require(_buyLiquidityFee + buyMarketingFee <= 200000, "buy fee <= 20%"); emit UpdateLiquidityFee( _sellLiquidityFee, _buyLiquidityFee, sellLiquidityFee, buyLiquidityFee ); sellLiquidityFee = _sellLiquidityFee; buyLiquidityFee = _buyLiquidityFee; } function updateMaxWallet(uint256 _maxWallet) external onlyOwner { require(_maxWallet>=totalSupply() / 10000, "maxWallet >= total supply / 10000"); emit UpdateMaxWallet(_maxWallet, maxWallet); maxWallet = _maxWallet; } function updateMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner { require(_maxTransactionAmount>=totalSupply() / 10000, "maxTransactionAmount >= total supply / 10000"); emit UpdateMaxTransactionAmount(_maxTransactionAmount, maxTransactionAmount); maxTransactionAmount = _maxTransactionAmount; } function updateMarketingFee( uint24 _sellMarketingFee, uint24 _buyMarketingFee ) external onlyOwner { require( _sellMarketingFee + sellLiquidityFee <= 200000, "sell fee <= 20%" ); require(_buyMarketingFee + buyLiquidityFee <= 200000, "buy fee <= 20%"); emit UpdateMarketingFee( _sellMarketingFee, _buyMarketingFee, sellMarketingFee, buyMarketingFee ); sellMarketingFee = _sellMarketingFee; buyMarketingFee = _buyMarketingFee; } function updateMarketingWallet( address _marketingWallet, bool _isMarketingFeeBaseToken ) external onlyOwner { require(_marketingWallet != address(0), "marketing wallet can't be 0"); emit UpdateMarketingWallet(_marketingWallet, _isMarketingFeeBaseToken, marketingWallet, isMarketingFeeBaseToken); marketingWallet = _marketingWallet; isMarketingFeeBaseToken = _isMarketingFeeBaseToken; isExcludedFromFee[_marketingWallet] = true; isExcludedFromMaxTransactionAmount[_marketingWallet] = true; } function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee) external onlyOwner { require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0"); emit UpdateMinAmountToTakeFee(_minAmountToTakeFee, minAmountToTakeFee); minAmountToTakeFee = _minAmountToTakeFee; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; isExcludedFromMaxTransactionAmount[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function excludeFromFee(address account, bool isEx) external onlyOwner { require(isExcludedFromFee[account] != isEx, "already"); isExcludedFromFee[account] = isEx; emit ExcludedFromFee(account, isEx); } function excludeFromMaxTransactionAmount(address account, bool isEx) external onlyOwner { require(isExcludedFromMaxTransactionAmount[account]!=isEx, "already"); isExcludedFromMaxTransactionAmount[account] = isEx; emit ExcludedFromMaxTransactionAmount(account, isEx); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (antiBotEnabled) { IGemAntiBot(gemAntiBot).onPreTransferCheck(from, to, amount); } uint256 contractTokenBalance = balanceOf(address(this)); uint256 totalTokensTaken = _liquidityFeeTokens + _marketingFeeTokens; bool overMinimumTokenBalance = totalTokensTaken >= minAmountToTakeFee && totalTokensTaken <= contractTokenBalance; // Take Fee if ( !inSwapAndLiquify && balanceOf(mainPair) > 0 && overMinimumTokenBalance && automatedMarketMakerPairs[to] ) { takeFee(); } uint256 _liquidityFee; uint256 _marketingFee; // If any account belongs to isExcludedFromFee account then remove the fee if ( !inSwapAndLiquify && !isExcludedFromFee[from] && !isExcludedFromFee[to] ) { // Buy if (automatedMarketMakerPairs[from]) { _liquidityFee = amount * buyLiquidityFee / 1000000; _marketingFee = amount * buyMarketingFee / 1000000; } // Sell else if (automatedMarketMakerPairs[to]) { _liquidityFee = amount * sellLiquidityFee / 1000000; _marketingFee = amount * sellMarketingFee / 1000000; } uint256 _feeTotal = _liquidityFee + _marketingFee; if (_feeTotal > 0) super._transfer(from, address(this), _feeTotal); amount = amount - _liquidityFee - _marketingFee; _liquidityFeeTokens = _liquidityFeeTokens + _liquidityFee; _marketingFeeTokens = _marketingFeeTokens + _marketingFee; } super._transfer(from, to, amount); if (!inSwapAndLiquify) { if (!isExcludedFromMaxTransactionAmount[from]) { require( amount <= maxTransactionAmount, "ERC20: exceeds transfer limit" ); } if (!isExcludedFromMaxTransactionAmount[to]) { require( balanceOf(to) <= maxWallet, "ERC20: exceeds max wallet limit" ); } } } function takeFee() private lockTheSwap { // Halve the amount of liquidity tokens uint256 tokensForLiquidity = _liquidityFeeTokens / 2; uint256 initialBaseTokenBalance = isBaseTokenWETH ? address(this).balance : IERC20(baseTokenForMarket).balanceOf(address(this)); uint256 baseTokenForLiquidity; if (isMarketingFeeBaseToken) { uint256 tokensForSwap=tokensForLiquidity+_marketingFeeTokens; if(tokensForSwap>0) swapTokensForBaseToken(tokensForSwap); uint256 baseTokenBalance = isBaseTokenWETH ? address(this).balance - initialBaseTokenBalance : IERC20(baseTokenForMarket).balanceOf(address(this)) - initialBaseTokenBalance; uint256 baseTokenAmountForMarketing = (baseTokenBalance * _marketingFeeTokens) / tokensForSwap; baseTokenForLiquidity = baseTokenBalance - baseTokenAmountForMarketing; if(baseTokenAmountForMarketing>0){ if(isBaseTokenWETH){ (bool success, )=address(marketingWallet).call{value: baseTokenAmountForMarketing}(""); if(success){ emit MarketingFeeTaken(0, baseTokenAmountForMarketing); } }else{ IERC20(baseTokenForMarket).safeTransfer( marketingWallet, baseTokenAmountForMarketing ); emit MarketingFeeTaken(0, baseTokenAmountForMarketing); } } } else { if(tokensForLiquidity>0) swapTokensForBaseToken(tokensForLiquidity); baseTokenForLiquidity = isBaseTokenWETH ? address(this).balance - initialBaseTokenBalance : IERC20(baseTokenForMarket).balanceOf(address(this)) - initialBaseTokenBalance; if(_marketingFeeTokens>0){ _transfer(address(this), marketingWallet, _marketingFeeTokens); emit MarketingFeeTaken(_marketingFeeTokens, 0); } } if (tokensForLiquidity > 0 && baseTokenForLiquidity > 0) { addLiquidity(tokensForLiquidity, baseTokenForLiquidity); emit SwapAndLiquify(tokensForLiquidity, baseTokenForLiquidity); } _marketingFeeTokens = 0; _liquidityFeeTokens = 0; if(balanceOf(address(this))>0){ if(owner()!=address(0)){ _transfer(address(this), owner(), balanceOf(address(this))); }else{ _transfer(address(this), address(0xdead), balanceOf(address(this))); } } } function swapTokensForBaseToken(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = baseTokenForMarket; if (isBaseTokenWETH){ IUniswapV2Router02(mainRouter).swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BaseToken path, address(this), block.timestamp ); }else{ uniswapV2Caller.swapExactTokensForTokensSupportingFeeOnTransferTokens( address(mainRouter), tokenAmount, 0, // accept any amount of BaseToken path, block.timestamp ); } } function addLiquidity(uint256 tokenAmount, uint256 baseTokenAmount) private { if (isBaseTokenWETH) IUniswapV2Router02(mainRouter).addLiquidityETH{value: baseTokenAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); else{ IUniswapV2Router02(mainRouter).addLiquidity( address(this), baseTokenForMarket, tokenAmount, baseTokenAmount, 0, 0, address(0xdead), block.timestamp ); } } function withdrawETH() external onlyOwner { (bool success, )=address(owner()).call{value: address(this).balance}(""); require(success, "Failed in withdrawal"); } function withdrawToken(address token) external onlyOwner{ require(address(this) != token, "Not allowed"); IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this))); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxTransactionAmount","type":"uint256"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"baseTokenForMarket","type":"address"},{"internalType":"address","name":"mainRouter","type":"address"},{"internalType":"bool","name":"isMarketingFeeBaseToken","type":"bool"},{"internalType":"uint24","name":"sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"buyLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"buyMarketingFee","type":"uint24"},{"internalType":"address","name":"feeContract","type":"address"},{"internalType":"address","name":"uniswapV2Caller","type":"address"}],"internalType":"struct StandardTokenWithAntibot.Args","name":"args","type":"tuple"},{"internalType":"address[]","name":"autoApproveAddressList","type":"address[]"},{"internalType":"address","name":"_gemAntiBot","type":"address"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"payable","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mainRouter","type":"address"},{"indexed":false,"internalType":"address","name":"mainPair","type":"address"},{"indexed":false,"internalType":"address","name":"baseTokenForMarket","type":"address"}],"name":"MainRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeBaseTokenSwapped","type":"uint256"}],"name":"MarketingFeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"baseTokenForLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyLiquidityFee","type":"uint24"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyMarketingFee","type":"uint24"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"newIsMarketingFeeBaseToken","type":"bool"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"oldIsMarketingFeeBaseToken","type":"bool"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmountToTakeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenForMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"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":"bool","name":"enabled_","type":"bool"}],"name":"enableAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gemAntiBot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBaseTokenWETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMarketingFeeBaseToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Caller","outputs":[{"internalType":"contract IUniswapV2Caller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"_buyLiquidityFee","type":"uint24"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainRouter","type":"address"},{"internalType":"address","name":"_baseTokenForMarket","type":"address"}],"name":"updateMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"_buyMarketingFee","type":"uint24"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"bool","name":"_isMarketingFeeBaseToken","type":"bool"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052604051620047f2380380620047f28339810160408190526200002691620013ad565b8351602085015160036200003b83826200161c565b5060046200004a82826200161c565b505050620000676200006162000b5460201b60201c565b62000b58565b6101c08401516001600160a01b031663a5970b48346001336040516001600160e01b031960e086901b16815260048101929092526001600160a01b03908116602483015260016044830152851660648201526084016000604051808303818588803b158015620000d657600080fd5b505af1158015620000eb573d6000803e3d6000fd5b50505060408601516006805460ff909216600160a01b0260ff60a01b19909216919091179055505060608401516200012590339062000baa565b600e80546001600160a01b0319166001600160a01b0384169081179091556318e02bd9620001503390565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200019257600080fd5b505af1158015620001a7573d6000803e3d6000fd5b5050600e805460ff60a01b1916600160a01b17905550506101e0840151600680546001600160a01b039283166001600160a01b03199182161790915560e0860151600780549184169190921617905560c0850151166200024e5760405162461bcd60e51b815260206004820152601d60248201527f6d61726b6574696e672077616c6c65742063616e206e6f74206265203000000060448201526064015b60405180910390fd5b6101008401516001600160a01b0316620002ab5760405162461bcd60e51b815260206004820152601b60248201527f526f7574657220616464726573732063616e206e6f7420626520300000000000604482015260640162000245565b62030d40846101800151856101400151620002c79190620016fe565b62ffffff1611156200030e5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b604482015260640162000245565b62030d40846101a001518561016001516200032a9190620016fe565b62ffffff161115620003705760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b604482015260640162000245565b60c0840151600880546101208701516301000000600160c01b031990911663010000006001600160a01b03948516810260ff60b81b191691909117600160b81b921515830217928390556040805160ff9385049390931615158352600060208401819052949190930416917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3610100840151600c80546001600160a01b0319166001600160a01b039092169182179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048c919062001724565b6007546001600160a01b03908116911614620004c957600c54600754620004c3916001600160a01b03918216911660001962000c6d565b620004dd565b6007805460ff60a01b1916600160a01b1790555b600654620004f99030906001600160a01b031660001962000dbc565b600c54620005159030906001600160a01b031660001962000dbc565b60005b83518110156200060f5762000553338583815181106200053c576200053c62001749565b602002602001015160001962000dbc60201b60201c565b6001601060008684815181106200056e576200056e62001749565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000868481518110620005c857620005c862001749565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558062000606816200175f565b91505062000518565b50600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068a919062001724565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620006dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000702919062001724565b600d80546001600160a01b0319166001600160a01b03928316908117909155600c546007546040805192851683526020830193909352909216908201527f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69060600160405180910390a161271084606001516200078091906200177b565b8460a001511015620007ea5760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b606482015260840162000245565b6127108460600151620007fe91906200177b565b846080015110156200085d5760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b606482015260840162000245565b6080840151600a81905560408051918252600060208301527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a160a0840151600b81905560408051918252600060208301527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a16101408401516007805461016087015165ffffffffffff60b01b19909116600160b01b62ffffff948516810262ffffff60c81b191691909117600160c81b928516830217928390556040805191840485168252919092049092166020820152600091810182905260608101919091527fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19060800160405180910390a16101808401516007805462ffffff60e01b1916600160e01b62ffffff938416810291909117918290556101a08701516008805462ffffff19169185169182179055604080519290930490931681526020810192909252600090820181905260608201527f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859060800160405180910390a1612710846060015162000a2391906200177b565b600981905560408051918252600060208301527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a13060008181526010602090815260408083208054600160ff199182168117909255600880546001600160a01b036301000000918290048116885285882080548516861790553380895286892080548616871790557f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b698054861687179055600f9097527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f10805485168617905597875284872080548416851790559054048616855282852080548216831790559284529220805490911682179055600d5462000b4a92169062000ee4565b5050505062001845565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821662000c025760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000245565b806002600082825462000c1691906200179e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80158062000ceb5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000cc3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ce99190620017ba565b155b62000d5f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000245565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915262000db791859162000f5416565b505050565b6001600160a01b03831662000e205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000245565b6001600160a01b03821662000e835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000245565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000818152601160209081526040808320805486151560ff199182168117909255600f84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000fa3906001600160a01b03851690849062001028565b905080516000148062000fc757508080602001905181019062000fc79190620017d4565b62000db75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000245565b606062001039848460008562001041565b949350505050565b606082471015620010a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000245565b600080866001600160a01b03168587604051620010c29190620017f2565b60006040518083038185875af1925050503d806000811462001101576040519150601f19603f3d011682016040523d82523d6000602084013e62001106565b606091505b5090925090506200111a8783838762001125565b979650505050505050565b606083156200119957825160000362001191576001600160a01b0385163b620011915760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000245565b508162001039565b620010398383815115620011b05781518083602001fd5b8060405162461bcd60e51b815260040162000245919062001810565b634e487b7160e01b600052604160045260246000fd5b60405161020081016001600160401b0381118282101715620012085762001208620011cc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620012395762001239620011cc565b604052919050565b60005b838110156200125e57818101518382015260200162001244565b50506000910152565b600082601f8301126200127957600080fd5b81516001600160401b03811115620012955762001295620011cc565b620012aa601f8201601f19166020016200120e565b818152846020838601011115620012c057600080fd5b6200103982602083016020870162001241565b805160ff81168114620012e557600080fd5b919050565b80516001600160a01b0381168114620012e557600080fd5b80518015158114620012e557600080fd5b805162ffffff81168114620012e557600080fd5b600082601f8301126200133957600080fd5b815160206001600160401b03821115620013575762001357620011cc565b8160051b620013688282016200120e565b92835284810182019282810190878511156200138357600080fd5b83870192505b848310156200111a576200139d83620012ea565b8252918301919083019062001389565b60008060008060808587031215620013c457600080fd5b84516001600160401b0380821115620013dc57600080fd5b908601906102008289031215620013f257600080fd5b620013fc620011e2565b8251828111156200140c57600080fd5b6200141a8a82860162001267565b8252506020830151828111156200143057600080fd5b6200143e8a82860162001267565b6020830152506200145260408401620012d3565b6040820152606083015160608201526080830151608082015260a083015160a08201526200148360c08401620012ea565b60c08201526200149660e08401620012ea565b60e0820152610100620014ab818501620012ea565b90820152610120620014bf84820162001302565b90820152610140620014d384820162001313565b90820152610160620014e784820162001313565b90820152610180620014fb84820162001313565b908201526101a06200150f84820162001313565b908201526101c062001523848201620012ea565b908201526101e062001537848201620012ea565b9082015260208801519096509150808211156200155357600080fd5b50620015628782880162001327565b9350506200157360408601620012ea565b91506200158360608601620012ea565b905092959194509250565b600181811c90821680620015a357607f821691505b602082108103620015c457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000db757600081815260208120601f850160051c81016020861015620015f35750805b601f850160051c820191505b818110156200161457828155600101620015ff565b505050505050565b81516001600160401b03811115620016385762001638620011cc565b62001650816200164984546200158e565b84620015ca565b602080601f8311600181146200168857600084156200166f5750858301515b600019600386901b1c1916600185901b17855562001614565b600085815260208120601f198616915b82811015620016b95788860151825594840194600190910190840162001698565b5085821015620016d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b62ffffff8181168382160190808211156200171d576200171d620016e8565b5092915050565b6000602082840312156200173757600080fd5b6200174282620012ea565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620017745762001774620016e8565b5060010190565b6000826200179957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620017b457620017b4620016e8565b92915050565b600060208284031215620017cd57600080fd5b5051919050565b600060208284031215620017e757600080fd5b620017428262001302565b600082516200180681846020870162001241565b9190910192915050565b60208152600082518060208401526200183181604085016020870162001241565b601f01601f19169190910160400192915050565b612f9d80620018556000396000f3fe6080604052600436106102815760003560e01c8063921369131161014f578063dd62ed3e116100c1578063f2c343e51161007a578063f2c343e5146107ef578063f2fde38b14610810578063f637434214610830578063f8b45b0514610853578063fc59d23d14610869578063fe49fc411461087f57600080fd5b8063dd62ed3e14610727578063df8408fe14610747578063e086e5ec14610767578063e9481eee1461077c578063ec44adc8146107ac578063f11a24d3146107cc57600080fd5b8063aa49802311610113578063aa49802314610660578063b62496f514610680578063c8c8ebe4146106b0578063cf188ad0146106c6578063d5bf72b7146106e6578063d8c6404b1461070657600080fd5b806392136913146105c857806395d89b41146105eb5780639a7a23d614610600578063a457c2d714610620578063a9059cbb1461064057600080fd5b806357e62b98116101f357806377ec7449116101ac57806377ec7449146104fa5780637bce5a041461051a5780637c75ad3a1461054a57806385af30c51461056a578063894760691461058a5780638da5cb5b146105aa57600080fd5b806357e62b981461043d5780636c516a701461045e57806370a082311461047e578063715018a61461049e57806373b9e82c146104b357806375f0a874146104d357600080fd5b80632ae2f121116102455780632ae2f12114610349578063313ce5671461036957806339509351146103955780634707c551146103b557806348a5317e146103d55780635342acb41461040d57600080fd5b806306fdde031461028d578063095ea7b3146102b857806318160ddd146102e85780631c499ab01461030757806323b872dd1461032957600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261089f565b6040516102af9190612acc565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004612b14565b610931565b60405190151581526020016102af565b3480156102f457600080fd5b506002545b6040519081526020016102af565b34801561031357600080fd5b50610327610322366004612b40565b61094b565b005b34801561033557600080fd5b506102d8610344366004612b59565b610a09565b34801561035557600080fd5b50610327610364366004612ba8565b610a2d565b34801561037557600080fd5b50600654600160a01b900460ff1660405160ff90911681526020016102af565b3480156103a157600080fd5b506102d86103b0366004612b14565b610aef565b3480156103c157600080fd5b506103276103d0366004612ba8565b610b11565b3480156103e157600080fd5b506007546103f5906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561041957600080fd5b506102d8610428366004612be1565b60106020526000908152604090205460ff1681565b34801561044957600080fd5b506008546102d890600160b81b900460ff1681565b34801561046a57600080fd5b50610327610479366004612c05565b610c40565b34801561048a57600080fd5b506102f9610499366004612be1565b610ee2565b3480156104aa57600080fd5b50610327610efd565b3480156104bf57600080fd5b506103276104ce366004612b40565b610f11565b3480156104df57600080fd5b506008546103f590630100000090046001600160a01b031681565b34801561050657600080fd5b50600e546103f5906001600160a01b031681565b34801561052657600080fd5b506008546105369062ffffff1681565b60405162ffffff90911681526020016102af565b34801561055657600080fd5b506006546103f5906001600160a01b031681565b34801561057657600080fd5b50600d546103f5906001600160a01b031681565b34801561059657600080fd5b506103276105a5366004612be1565b610fa4565b3480156105b657600080fd5b506005546001600160a01b03166103f5565b3480156105d457600080fd5b5060075461053690600160e01b900462ffffff1681565b3480156105f757600080fd5b506102a2611083565b34801561060c57600080fd5b5061032761061b366004612ba8565b611092565b34801561062c57600080fd5b506102d861063b366004612b14565b61113a565b34801561064c57600080fd5b506102d861065b366004612b14565b6111b5565b34801561066c57600080fd5b5061032761067b366004612b40565b6111c3565b34801561068c57600080fd5b506102d861069b366004612be1565b60116020526000908152604090205460ff1681565b3480156106bc57600080fd5b506102f9600b5481565b3480156106d257600080fd5b50600c546103f5906001600160a01b031681565b3480156106f257600080fd5b50610327610701366004612c4b565b611287565b34801561071257600080fd5b50600e546102d890600160a01b900460ff1681565b34801561073357600080fd5b506102f9610742366004612c05565b6113e9565b34801561075357600080fd5b50610327610762366004612ba8565b611414565b34801561077357600080fd5b506103276114ce565b34801561078857600080fd5b506102d8610797366004612be1565b600f6020526000908152604090205460ff1681565b3480156107b857600080fd5b506103276107c7366004612c4b565b611581565b3480156107d857600080fd5b5060075461053690600160c81b900462ffffff1681565b3480156107fb57600080fd5b506007546102d890600160a01b900460ff1681565b34801561081c57600080fd5b5061032761082b366004612be1565b6116db565b34801561083c57600080fd5b5060075461053690600160b01b900462ffffff1681565b34801561085f57600080fd5b506102f9600a5481565b34801561087557600080fd5b506102f960095481565b34801561088b57600080fd5b5061032761089a366004612c7e565b611751565b6060600380546108ae90612c9b565b80601f01602080910402602001604051908101604052809291908181526020018280546108da90612c9b565b80156109275780601f106108fc57610100808354040283529160200191610927565b820191906000526020600020905b81548152906001019060200180831161090a57829003601f168201915b5050505050905090565b60003361093f818585611777565b60019150505b92915050565b61095361189b565b61271061095f60025490565b6109699190612ceb565b8110156109c75760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b600a546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600a55565b600033610a178582856118f5565b610a2285858561196f565b506001949350505050565b610a3561189b565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503610a8f5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016109be565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b60003361093f818585610b0283836113e9565b610b0c9190612d0d565b611777565b610b1961189b565b6001600160a01b038216610b6f5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e27742062652030000000000060448201526064016109be565b60085460408051831515815260ff600160b81b840416151560208201526001600160a01b0363010000009093048316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3600880546301000000600160c01b03191663010000006001600160a01b039490941693840260ff60b81b191617600160b81b921515929092029190911790556000908152601060209081526040808320805460ff199081166001908117909255600f909352922080549091169091179055565b610c4861189b565b600780546001600160a01b0319166001600160a01b0383811691909117909155600c54838216911614610cab57600c54610c8f9030906001600160a01b0316600019611777565b600c80546001600160a01b0319166001600160a01b0384161790555b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190612d20565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d979190612d20565b600d80546001600160a01b0319166001600160a01b03928316179055600c54604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e199190612d20565b6007546001600160a01b03908116911614610e5f57600c54600754610e4d916001600160a01b039182169116600019611d96565b6007805460ff60a01b19169055610e73565b6007805460ff60a01b1916600160a01b1790555b600c54600d54600754604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600d54610ede906001600160a01b03166001611ee3565b5050565b6001600160a01b031660009081526020819052604090205490565b610f0561189b565b610f0f6000611f4c565b565b610f1961189b565b60008111610f625760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b60448201526064016109be565b6009546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600955565b610fac61189b565b6001600160a01b0381163003610ff25760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016109be565b6110806110076005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106f9190612d3d565b6001600160a01b0384169190611f9e565b50565b6060600480546108ae90612c9b565b61109a61189b565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111305760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016109be565b610ede8282611ee3565b6000338161114882866113e9565b9050838110156111a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109be565b610a228286868403611777565b60003361093f81858561196f565b6111cb61189b565b6127106111d760025490565b6111e19190612ceb565b8110156112455760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b60648201526084016109be565b600b546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600b55565b61128f61189b565b60075462030d40906112ad90600160e01b900462ffffff1684612d56565b62ffffff1611156112f25760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016109be565b60085462030d40906113099062ffffff1683612d56565b62ffffff16111561134d5760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016109be565b6007546040805162ffffff85811682528481166020830152600160b01b8404811682840152600160c81b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16007805465ffffffffffff60b01b1916600160b01b62ffffff9485160262ffffff60c81b191617600160c81b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61141c61189b565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036114765760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016109be565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610ae3565b6114d661189b565b60006114ea6005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611534576040519150601f19603f3d011682016040523d82523d6000602084013e611539565b606091505b50509050806110805760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b60448201526064016109be565b61158961189b565b60075462030d40906115a790600160b01b900462ffffff1684612d56565b62ffffff1611156115ec5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016109be565b60075462030d409061160a90600160c81b900462ffffff1683612d56565b62ffffff16111561164e5760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016109be565b6007546008546040805162ffffff86811682528581166020830152600160e01b909404841681830152929091166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a16007805462ffffff60e01b1916600160e01b62ffffff948516021790556008805462ffffff191691909216179055565b6116e361189b565b6001600160a01b0381166117485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109be565b61108081611f4c565b61175961189b565b600e8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0383166117d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109be565b6001600160a01b03821661183a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109be565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109be565b600061190184846113e9565b90506000198114611969578181101561195c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109be565b6119698484848403611777565b50505050565b6001600160a01b0383166119955760405162461bcd60e51b81526004016109be90612d79565b6001600160a01b0382166119bb5760405162461bcd60e51b81526004016109be90612dbe565b600e54600160a01b900460ff1615611a3c57600e5460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505b6000611a4730610ee2565b90506000601354601254611a5b9190612d0d565b905060006009548210158015611a715750828211155b600754909150600160a81b900460ff16158015611aa35750600d54600090611aa1906001600160a01b0316610ee2565b115b8015611aac5750805b8015611ad057506001600160a01b03851660009081526011602052604090205460ff165b15611add57611add611fce565b6007546000908190600160a81b900460ff16158015611b1557506001600160a01b03881660009081526010602052604090205460ff16155b8015611b3a57506001600160a01b03871660009081526010602052604090205460ff16155b15611c84576001600160a01b03881660009081526011602052604090205460ff1615611bb357600754620f424090611b7e90600160c81b900462ffffff1688612e01565b611b889190612ceb565b600854909250620f424090611ba29062ffffff1688612e01565b611bac9190612ceb565b9050611c2a565b6001600160a01b03871660009081526011602052604090205460ff1615611c2a57600754620f424090611bf290600160b01b900462ffffff1688612e01565b611bfc9190612ceb565b600754909250620f424090611c1d90600160e01b900462ffffff1688612e01565b611c279190612ceb565b90505b6000611c368284612d0d565b90508015611c4957611c4989308361248e565b81611c548489612e18565b611c5e9190612e18565b965082601254611c6e9190612d0d565b601255601354611c7f908390612d0d565b601355505b611c8f88888861248e565b600754600160a81b900460ff16611d8c576001600160a01b0388166000908152600f602052604090205460ff16611d1257600b54861115611d125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d697400000060448201526064016109be565b6001600160a01b0387166000908152600f602052604090205460ff16611d8c57600a54611d3e88610ee2565b1115611d8c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d69740060448201526064016109be565b5050505050505050565b801580611e105750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0e9190612d3d565b155b611e7b5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016109be565b6040516001600160a01b038316602482015260448101829052611ede90849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526125b8565b505050565b6001600160a01b0382166000818152601160209081526040808320805486151560ff199182168117909255600f84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610ae3565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052611ede90849063a9059cbb60e01b90606401611ea7565b6007805460ff60a81b1916600160a81b179055601254600090611ff390600290612ceb565b600754909150600090600160a01b900460ff1661207b576007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120769190612d3d565b61207d565b475b600854909150600090600160b81b900460ff161561229e576000601354846120a59190612d0d565b905080156120b6576120b68161268d565b600754600090600160a01b900460ff16612145576007546040516370a0823160e01b815230600482015285916001600160a01b0316906370a0823190602401602060405180830381865afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190612d3d565b6121409190612e18565b61214f565b61214f8447612e18565b9050600082601354836121629190612e01565b61216c9190612ceb565b90506121788183612e18565b9350801561229657600754600160a01b900460ff161561223657600854604051600091630100000090046001600160a01b03169083908381818185875af1925050503d80600081146121e6576040519150601f19603f3d011682016040523d82523d6000602084013e6121eb565b606091505b505090508015612230576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b50612296565b60085460075461225b916001600160a01b039182169163010000009091041683611f9e565b6040805160008152602081018390527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b5050506123ad565b82156122ad576122ad8361268d565b600754600160a01b900460ff16612339576007546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232a9190612d3d565b6123349190612e18565b612343565b6123438247612e18565b601354909150156123ad5761237030600860039054906101000a90046001600160a01b031660135461196f565b60135460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b6000831180156123bd5750600081115b15612406576123cc83826127ca565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60006013819055601281905561241b30610ee2565b111561247c5760006124356005546001600160a01b031690565b6001600160a01b03161461246c57612467306124596005546001600160a01b031690565b61246230610ee2565b61196f565b61247c565b61247c3061dead61246230610ee2565b50506007805460ff60a81b1916905550565b6001600160a01b0383166124b45760405162461bcd60e51b81526004016109be90612d79565b6001600160a01b0382166124da5760405162461bcd60e51b81526004016109be90612dbe565b6001600160a01b038316600090815260208190526040902054818110156125525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109be565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611969565b600061260d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129189092919063ffffffff16565b905080516000148061262e57508080602001905181019061262e9190612e2b565b611ede5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109be565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126c2576126c2612e48565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106126f3576126f3612e48565b6001600160a01b039092166020928302919091019091015260075460ff600160a01b909104161561278d57600c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612757908590600090869030904290600401612ea2565b600060405180830381600087803b15801561277157600080fd5b505af1158015612785573d6000803e3d6000fd5b505050505050565b600654600c54604051637274ca1b60e11b81526001600160a01b039283169263e4e994369261275792911690869060009087904290600401612ede565b600754600160a01b900460ff161561287657600c5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561284a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061286f9190612f1d565b5050505050565b600c5460075460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190612f1d565b6060612927848460008561292f565b949350505050565b6060824710156129905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109be565b600080866001600160a01b031685876040516129ac9190612f4b565b60006040518083038185875af1925050503d80600081146129e9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ee565b606091505b50915091506129ff87838387612a0a565b979650505050505050565b60608315612a79578251600003612a72576001600160a01b0385163b612a725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109be565b5081612927565b6129278383815115612a8e5781518083602001fd5b8060405162461bcd60e51b81526004016109be9190612acc565b60005b83811015612ac3578181015183820152602001612aab565b50506000910152565b6020815260008251806020840152612aeb816040850160208701612aa8565b601f01601f19169190910160400192915050565b6001600160a01b038116811461108057600080fd5b60008060408385031215612b2757600080fd5b8235612b3281612aff565b946020939093013593505050565b600060208284031215612b5257600080fd5b5035919050565b600080600060608486031215612b6e57600080fd5b8335612b7981612aff565b92506020840135612b8981612aff565b929592945050506040919091013590565b801515811461108057600080fd5b60008060408385031215612bbb57600080fd5b8235612bc681612aff565b91506020830135612bd681612b9a565b809150509250929050565b600060208284031215612bf357600080fd5b8135612bfe81612aff565b9392505050565b60008060408385031215612c1857600080fd5b8235612c2381612aff565b91506020830135612bd681612aff565b803562ffffff81168114612c4657600080fd5b919050565b60008060408385031215612c5e57600080fd5b612c6783612c33565b9150612c7560208401612c33565b90509250929050565b600060208284031215612c9057600080fd5b8135612bfe81612b9a565b600181811c90821680612caf57607f821691505b602082108103612ccf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082612d0857634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561094557610945612cd5565b600060208284031215612d3257600080fd5b8151612bfe81612aff565b600060208284031215612d4f57600080fd5b5051919050565b62ffffff818116838216019080821115612d7257612d72612cd5565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761094557610945612cd5565b8181038181111561094557610945612cd5565b600060208284031215612e3d57600080fd5b8151612bfe81612b9a565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612e975781516001600160a01b031687529582019590820190600101612e72565b509495945050505050565b85815284602082015260a060408201526000612ec160a0830186612e5e565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000612f0b60a0830185612e5e565b90508260808301529695505050505050565b600080600060608486031215612f3257600080fd5b8351925060208401519150604084015190509250925092565b60008251612f5d818460208701612aa8565b919091019291505056fea2646970667358221220252697ecdf7836d6851fa7b75e22c18b00c66ae6c069c8a0c036577b3123c2d664736f6c634300081300330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000030000000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000001bcb13a657b263880000000000000000000000000000000000000000000000001bcb13a657b2638800000000000000000000000000000000000000000000000000472698b413b432000000000000000000000000000005cd98023c86b57329e5c6e60245decb5595a9615000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a98000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e60000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e00000000000000000000000000000000000000000000000000000000000000045059414900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450594149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063921369131161014f578063dd62ed3e116100c1578063f2c343e51161007a578063f2c343e5146107ef578063f2fde38b14610810578063f637434214610830578063f8b45b0514610853578063fc59d23d14610869578063fe49fc411461087f57600080fd5b8063dd62ed3e14610727578063df8408fe14610747578063e086e5ec14610767578063e9481eee1461077c578063ec44adc8146107ac578063f11a24d3146107cc57600080fd5b8063aa49802311610113578063aa49802314610660578063b62496f514610680578063c8c8ebe4146106b0578063cf188ad0146106c6578063d5bf72b7146106e6578063d8c6404b1461070657600080fd5b806392136913146105c857806395d89b41146105eb5780639a7a23d614610600578063a457c2d714610620578063a9059cbb1461064057600080fd5b806357e62b98116101f357806377ec7449116101ac57806377ec7449146104fa5780637bce5a041461051a5780637c75ad3a1461054a57806385af30c51461056a578063894760691461058a5780638da5cb5b146105aa57600080fd5b806357e62b981461043d5780636c516a701461045e57806370a082311461047e578063715018a61461049e57806373b9e82c146104b357806375f0a874146104d357600080fd5b80632ae2f121116102455780632ae2f12114610349578063313ce5671461036957806339509351146103955780634707c551146103b557806348a5317e146103d55780635342acb41461040d57600080fd5b806306fdde031461028d578063095ea7b3146102b857806318160ddd146102e85780631c499ab01461030757806323b872dd1461032957600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a261089f565b6040516102af9190612acc565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004612b14565b610931565b60405190151581526020016102af565b3480156102f457600080fd5b506002545b6040519081526020016102af565b34801561031357600080fd5b50610327610322366004612b40565b61094b565b005b34801561033557600080fd5b506102d8610344366004612b59565b610a09565b34801561035557600080fd5b50610327610364366004612ba8565b610a2d565b34801561037557600080fd5b50600654600160a01b900460ff1660405160ff90911681526020016102af565b3480156103a157600080fd5b506102d86103b0366004612b14565b610aef565b3480156103c157600080fd5b506103276103d0366004612ba8565b610b11565b3480156103e157600080fd5b506007546103f5906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561041957600080fd5b506102d8610428366004612be1565b60106020526000908152604090205460ff1681565b34801561044957600080fd5b506008546102d890600160b81b900460ff1681565b34801561046a57600080fd5b50610327610479366004612c05565b610c40565b34801561048a57600080fd5b506102f9610499366004612be1565b610ee2565b3480156104aa57600080fd5b50610327610efd565b3480156104bf57600080fd5b506103276104ce366004612b40565b610f11565b3480156104df57600080fd5b506008546103f590630100000090046001600160a01b031681565b34801561050657600080fd5b50600e546103f5906001600160a01b031681565b34801561052657600080fd5b506008546105369062ffffff1681565b60405162ffffff90911681526020016102af565b34801561055657600080fd5b506006546103f5906001600160a01b031681565b34801561057657600080fd5b50600d546103f5906001600160a01b031681565b34801561059657600080fd5b506103276105a5366004612be1565b610fa4565b3480156105b657600080fd5b506005546001600160a01b03166103f5565b3480156105d457600080fd5b5060075461053690600160e01b900462ffffff1681565b3480156105f757600080fd5b506102a2611083565b34801561060c57600080fd5b5061032761061b366004612ba8565b611092565b34801561062c57600080fd5b506102d861063b366004612b14565b61113a565b34801561064c57600080fd5b506102d861065b366004612b14565b6111b5565b34801561066c57600080fd5b5061032761067b366004612b40565b6111c3565b34801561068c57600080fd5b506102d861069b366004612be1565b60116020526000908152604090205460ff1681565b3480156106bc57600080fd5b506102f9600b5481565b3480156106d257600080fd5b50600c546103f5906001600160a01b031681565b3480156106f257600080fd5b50610327610701366004612c4b565b611287565b34801561071257600080fd5b50600e546102d890600160a01b900460ff1681565b34801561073357600080fd5b506102f9610742366004612c05565b6113e9565b34801561075357600080fd5b50610327610762366004612ba8565b611414565b34801561077357600080fd5b506103276114ce565b34801561078857600080fd5b506102d8610797366004612be1565b600f6020526000908152604090205460ff1681565b3480156107b857600080fd5b506103276107c7366004612c4b565b611581565b3480156107d857600080fd5b5060075461053690600160c81b900462ffffff1681565b3480156107fb57600080fd5b506007546102d890600160a01b900460ff1681565b34801561081c57600080fd5b5061032761082b366004612be1565b6116db565b34801561083c57600080fd5b5060075461053690600160b01b900462ffffff1681565b34801561085f57600080fd5b506102f9600a5481565b34801561087557600080fd5b506102f960095481565b34801561088b57600080fd5b5061032761089a366004612c7e565b611751565b6060600380546108ae90612c9b565b80601f01602080910402602001604051908101604052809291908181526020018280546108da90612c9b565b80156109275780601f106108fc57610100808354040283529160200191610927565b820191906000526020600020905b81548152906001019060200180831161090a57829003601f168201915b5050505050905090565b60003361093f818585611777565b60019150505b92915050565b61095361189b565b61271061095f60025490565b6109699190612ceb565b8110156109c75760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b600a546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600a55565b600033610a178582856118f5565b610a2285858561196f565b506001949350505050565b610a3561189b565b6001600160a01b0382166000908152600f602052604090205481151560ff909116151503610a8f5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016109be565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b60003361093f818585610b0283836113e9565b610b0c9190612d0d565b611777565b610b1961189b565b6001600160a01b038216610b6f5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e27742062652030000000000060448201526064016109be565b60085460408051831515815260ff600160b81b840416151560208201526001600160a01b0363010000009093048316928516917fc8dfdd9b91ac62ee1bd8be3541ea02d8e584461c794c6e49e94ccf21c71ebcca910160405180910390a3600880546301000000600160c01b03191663010000006001600160a01b039490941693840260ff60b81b191617600160b81b921515929092029190911790556000908152601060209081526040808320805460ff199081166001908117909255600f909352922080549091169091179055565b610c4861189b565b600780546001600160a01b0319166001600160a01b0383811691909117909155600c54838216911614610cab57600c54610c8f9030906001600160a01b0316600019611777565b600c80546001600160a01b0319166001600160a01b0384161790555b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190612d20565b6007546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610d73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d979190612d20565b600d80546001600160a01b0319166001600160a01b03928316179055600c54604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e199190612d20565b6007546001600160a01b03908116911614610e5f57600c54600754610e4d916001600160a01b039182169116600019611d96565b6007805460ff60a01b19169055610e73565b6007805460ff60a01b1916600160a01b1790555b600c54600d54600754604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600d54610ede906001600160a01b03166001611ee3565b5050565b6001600160a01b031660009081526020819052604090205490565b610f0561189b565b610f0f6000611f4c565b565b610f1961189b565b60008111610f625760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b60448201526064016109be565b6009546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600955565b610fac61189b565b6001600160a01b0381163003610ff25760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064016109be565b6110806110076005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106f9190612d3d565b6001600160a01b0384169190611f9e565b50565b6060600480546108ae90612c9b565b61109a61189b565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111305760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084016109be565b610ede8282611ee3565b6000338161114882866113e9565b9050838110156111a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109be565b610a228286868403611777565b60003361093f81858561196f565b6111cb61189b565b6127106111d760025490565b6111e19190612ceb565b8110156112455760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b60648201526084016109be565b600b546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600b55565b61128f61189b565b60075462030d40906112ad90600160e01b900462ffffff1684612d56565b62ffffff1611156112f25760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016109be565b60085462030d40906113099062ffffff1683612d56565b62ffffff16111561134d5760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016109be565b6007546040805162ffffff85811682528481166020830152600160b01b8404811682840152600160c81b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a16007805465ffffffffffff60b01b1916600160b01b62ffffff9485160262ffffff60c81b191617600160c81b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61141c61189b565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036114765760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b60448201526064016109be565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610ae3565b6114d661189b565b60006114ea6005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611534576040519150601f19603f3d011682016040523d82523d6000602084013e611539565b606091505b50509050806110805760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b60448201526064016109be565b61158961189b565b60075462030d40906115a790600160b01b900462ffffff1684612d56565b62ffffff1611156115ec5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064016109be565b60075462030d409061160a90600160c81b900462ffffff1683612d56565b62ffffff16111561164e5760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b60448201526064016109be565b6007546008546040805162ffffff86811682528581166020830152600160e01b909404841681830152929091166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a16007805462ffffff60e01b1916600160e01b62ffffff948516021790556008805462ffffff191691909216179055565b6116e361189b565b6001600160a01b0381166117485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109be565b61108081611f4c565b61175961189b565b600e8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0383166117d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109be565b6001600160a01b03821661183a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109be565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f0f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109be565b600061190184846113e9565b90506000198114611969578181101561195c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109be565b6119698484848403611777565b50505050565b6001600160a01b0383166119955760405162461bcd60e51b81526004016109be90612d79565b6001600160a01b0382166119bb5760405162461bcd60e51b81526004016109be90612dbe565b600e54600160a01b900460ff1615611a3c57600e5460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b158015611a2357600080fd5b505af1158015611a37573d6000803e3d6000fd5b505050505b6000611a4730610ee2565b90506000601354601254611a5b9190612d0d565b905060006009548210158015611a715750828211155b600754909150600160a81b900460ff16158015611aa35750600d54600090611aa1906001600160a01b0316610ee2565b115b8015611aac5750805b8015611ad057506001600160a01b03851660009081526011602052604090205460ff165b15611add57611add611fce565b6007546000908190600160a81b900460ff16158015611b1557506001600160a01b03881660009081526010602052604090205460ff16155b8015611b3a57506001600160a01b03871660009081526010602052604090205460ff16155b15611c84576001600160a01b03881660009081526011602052604090205460ff1615611bb357600754620f424090611b7e90600160c81b900462ffffff1688612e01565b611b889190612ceb565b600854909250620f424090611ba29062ffffff1688612e01565b611bac9190612ceb565b9050611c2a565b6001600160a01b03871660009081526011602052604090205460ff1615611c2a57600754620f424090611bf290600160b01b900462ffffff1688612e01565b611bfc9190612ceb565b600754909250620f424090611c1d90600160e01b900462ffffff1688612e01565b611c279190612ceb565b90505b6000611c368284612d0d565b90508015611c4957611c4989308361248e565b81611c548489612e18565b611c5e9190612e18565b965082601254611c6e9190612d0d565b601255601354611c7f908390612d0d565b601355505b611c8f88888861248e565b600754600160a81b900460ff16611d8c576001600160a01b0388166000908152600f602052604090205460ff16611d1257600b54861115611d125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d697400000060448201526064016109be565b6001600160a01b0387166000908152600f602052604090205460ff16611d8c57600a54611d3e88610ee2565b1115611d8c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d69740060448201526064016109be565b5050505050505050565b801580611e105750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0e9190612d3d565b155b611e7b5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016109be565b6040516001600160a01b038316602482015260448101829052611ede90849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526125b8565b505050565b6001600160a01b0382166000818152601160209081526040808320805486151560ff199182168117909255600f84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610ae3565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b038316602482015260448101829052611ede90849063a9059cbb60e01b90606401611ea7565b6007805460ff60a81b1916600160a81b179055601254600090611ff390600290612ceb565b600754909150600090600160a01b900460ff1661207b576007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612052573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120769190612d3d565b61207d565b475b600854909150600090600160b81b900460ff161561229e576000601354846120a59190612d0d565b905080156120b6576120b68161268d565b600754600090600160a01b900460ff16612145576007546040516370a0823160e01b815230600482015285916001600160a01b0316906370a0823190602401602060405180830381865afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190612d3d565b6121409190612e18565b61214f565b61214f8447612e18565b9050600082601354836121629190612e01565b61216c9190612ceb565b90506121788183612e18565b9350801561229657600754600160a01b900460ff161561223657600854604051600091630100000090046001600160a01b03169083908381818185875af1925050503d80600081146121e6576040519150601f19603f3d011682016040523d82523d6000602084013e6121eb565b606091505b505090508015612230576040805160008152602081018490527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b50612296565b60085460075461225b916001600160a01b039182169163010000009091041683611f9e565b6040805160008152602081018390527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b5050506123ad565b82156122ad576122ad8361268d565b600754600160a01b900460ff16612339576007546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015612306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232a9190612d3d565b6123349190612e18565b612343565b6123438247612e18565b601354909150156123ad5761237030600860039054906101000a90046001600160a01b031660135461196f565b60135460408051918252600060208301527f6f92bce3e91466137aa4d5474fe565c002872fb18ed6af4a856959be0a81277a910160405180910390a15b6000831180156123bd5750600081115b15612406576123cc83826127ca565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b60006013819055601281905561241b30610ee2565b111561247c5760006124356005546001600160a01b031690565b6001600160a01b03161461246c57612467306124596005546001600160a01b031690565b61246230610ee2565b61196f565b61247c565b61247c3061dead61246230610ee2565b50506007805460ff60a81b1916905550565b6001600160a01b0383166124b45760405162461bcd60e51b81526004016109be90612d79565b6001600160a01b0382166124da5760405162461bcd60e51b81526004016109be90612dbe565b6001600160a01b038316600090815260208190526040902054818110156125525760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109be565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611969565b600061260d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129189092919063ffffffff16565b905080516000148061262e57508080602001905181019061262e9190612e2b565b611ede5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109be565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126c2576126c2612e48565b6001600160a01b0392831660209182029290920101526007548251911690829060019081106126f3576126f3612e48565b6001600160a01b039092166020928302919091019091015260075460ff600160a01b909104161561278d57600c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612757908590600090869030904290600401612ea2565b600060405180830381600087803b15801561277157600080fd5b505af1158015612785573d6000803e3d6000fd5b505050505050565b600654600c54604051637274ca1b60e11b81526001600160a01b039283169263e4e994369261275792911690869060009087904290600401612ede565b600754600160a01b900460ff161561287657600c5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561284a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061286f9190612f1d565b5050505050565b600c5460075460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af11580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190612f1d565b6060612927848460008561292f565b949350505050565b6060824710156129905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109be565b600080866001600160a01b031685876040516129ac9190612f4b565b60006040518083038185875af1925050503d80600081146129e9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ee565b606091505b50915091506129ff87838387612a0a565b979650505050505050565b60608315612a79578251600003612a72576001600160a01b0385163b612a725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109be565b5081612927565b6129278383815115612a8e5781518083602001fd5b8060405162461bcd60e51b81526004016109be9190612acc565b60005b83811015612ac3578181015183820152602001612aab565b50506000910152565b6020815260008251806020840152612aeb816040850160208701612aa8565b601f01601f19169190910160400192915050565b6001600160a01b038116811461108057600080fd5b60008060408385031215612b2757600080fd5b8235612b3281612aff565b946020939093013593505050565b600060208284031215612b5257600080fd5b5035919050565b600080600060608486031215612b6e57600080fd5b8335612b7981612aff565b92506020840135612b8981612aff565b929592945050506040919091013590565b801515811461108057600080fd5b60008060408385031215612bbb57600080fd5b8235612bc681612aff565b91506020830135612bd681612b9a565b809150509250929050565b600060208284031215612bf357600080fd5b8135612bfe81612aff565b9392505050565b60008060408385031215612c1857600080fd5b8235612c2381612aff565b91506020830135612bd681612aff565b803562ffffff81168114612c4657600080fd5b919050565b60008060408385031215612c5e57600080fd5b612c6783612c33565b9150612c7560208401612c33565b90509250929050565b600060208284031215612c9057600080fd5b8135612bfe81612b9a565b600181811c90821680612caf57607f821691505b602082108103612ccf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082612d0857634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561094557610945612cd5565b600060208284031215612d3257600080fd5b8151612bfe81612aff565b600060208284031215612d4f57600080fd5b5051919050565b62ffffff818116838216019080821115612d7257612d72612cd5565b5092915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761094557610945612cd5565b8181038181111561094557610945612cd5565b600060208284031215612e3d57600080fd5b8151612bfe81612b9a565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612e975781516001600160a01b031687529582019590820190600101612e72565b509495945050505050565b85815284602082015260a060408201526000612ec160a0830186612e5e565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000612f0b60a0830185612e5e565b90508260808301529695505050505050565b600080600060608486031215612f3257600080fd5b8351925060208401519150604084015190509250925092565b60008251612f5d818460208701612aa8565b919091019291505056fea2646970667358221220252697ecdf7836d6851fa7b75e22c18b00c66ae6c069c8a0c036577b3123c2d664736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000030000000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000001bcb13a657b263880000000000000000000000000000000000000000000000001bcb13a657b2638800000000000000000000000000000000000000000000000000472698b413b432000000000000000000000000000005cd98023c86b57329e5c6e60245decb5595a9615000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000003a98000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e60000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e00000000000000000000000000000000000000000000000000000000000000045059414900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450594149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66
-----Decoded View---------------
Arg [0] : args (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : autoApproveAddressList (address[]): 0xF041690D9cBE398d3D51F25C87902C1403AffE66
Arg [2] : _gemAntiBot (address): 0x65438378B3793C1184041cdfE42ee4EFc7419361
Arg [3] : referrer (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
26 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [2] : 00000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [7] : 00000000000000000000000000000000000000000001bcb13a657b2638800000
Arg [8] : 00000000000000000000000000000000000000000001bcb13a657b2638800000
Arg [9] : 000000000000000000000000000000000000000000000472698b413b43200000
Arg [10] : 0000000000000000000000005cd98023c86b57329e5c6e60245decb5595a9615
Arg [11] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [12] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [15] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [16] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [17] : 0000000000000000000000000000000000000000000000000000000000003a98
Arg [18] : 000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e6
Arg [19] : 0000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [21] : 5059414900000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [23] : 5059414900000000000000000000000000000000000000000000000000000000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [25] : 000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66
Deployed Bytecode Sourcemap
36540:19676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6027:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6945:201;;;;;;;;;;-1:-1:-1;6945:201:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;6945:201:0;1126:187:1;6342:108:0;;;;;;;;;;-1:-1:-1;6430:12:0;;6342:108;;;1464:25:1;;;1452:2;1437:18;6342:108:0;1318:177:1;45353:249:0;;;;;;;;;;-1:-1:-1;45353:249:0;;;;;:::i;:::-;;:::i;:::-;;7152:261;;;;;;;;;;-1:-1:-1;7152:261:0;;;;;:::i;:::-;;:::i;48347:323::-;;;;;;;;;;-1:-1:-1;48347:323:0;;;;;:::i;:::-;;:::i;43531:92::-;;;;;;;;;;-1:-1:-1;43606:9:0;;-1:-1:-1;;;43606:9:0;;;;43531:92;;2828:4:1;2816:17;;;2798:36;;2786:2;2771:18;43531:92:0;2656:184:1;7419:238:0;;;;;;;;;;-1:-1:-1;7419:238:0;;;;;:::i;:::-;;:::i;46595:586::-;;;;;;;;;;-1:-1:-1;46595:586:0;;;;;:::i;:::-;;:::i;37373:33::-;;;;;;;;;;-1:-1:-1;37373:33:0;;;;-1:-1:-1;;;;;37373:33:0;;;;;;-1:-1:-1;;;;;3009:32:1;;;2991:51;;2979:2;2964:18;37373:33:0;2845:203:1;38031:49:0;;;;;;;;;;-1:-1:-1;38031:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37670:35;;;;;;;;;;-1:-1:-1;37670:35:0;;;;-1:-1:-1;;;37670:35:0;;;;;;43631:890;;;;;;;;;;-1:-1:-1;43631:890:0;;;;;:::i;:::-;;:::i;6456:127::-;;;;;;;;;;-1:-1:-1;6456:127:0;;;;;:::i;:::-;;:::i;11661:103::-;;;;;;;;;;;;;:::i;47189:319::-;;;;;;;;;;-1:-1:-1;47189:319:0;;;;;:::i;:::-;;:::i;37633:30::-;;;;;;;;;;-1:-1:-1;37633:30:0;;;;;;;-1:-1:-1;;;;;37633:30:0;;;37891:25;;;;;;;;;;-1:-1:-1;37891:25:0;;;;-1:-1:-1;;;;;37891:25:0;;;37595:29;;;;;;;;;;-1:-1:-1;37595:29:0;;;;;;;;;;;3872:8:1;3860:21;;;3842:40;;3830:2;3815:18;37595:29:0;3698:190:1;37163:39:0;;;;;;;;;;-1:-1:-1;37163:39:0;;;;-1:-1:-1;;;;;37163:39:0;;;37861:23;;;;;;;;;;-1:-1:-1;37861:23:0;;;;-1:-1:-1;;;;;37861:23:0;;;55971:207;;;;;;;;;;-1:-1:-1;55971:207:0;;;;;:::i;:::-;;:::i;11430:87::-;;;;;;;;;;-1:-1:-1;11503:6:0;;-1:-1:-1;;;;;11503:6:0;11430:87;;37558:30;;;;;;;;;;-1:-1:-1;37558:30:0;;;;-1:-1:-1;;;37558:30:0;;;;;;6133:104;;;;;;;;;;;;;:::i;47516:320::-;;;;;;;;;;-1:-1:-1;47516:320:0;;;;;:::i;:::-;;:::i;7663:436::-;;;;;;;;;;-1:-1:-1;7663:436:0;;;;;:::i;:::-;;:::i;6589:193::-;;;;;;;;;;-1:-1:-1;6589:193:0;;;;;:::i;:::-;;:::i;45610:371::-;;;;;;;;;;-1:-1:-1;45610:371:0;;;;;:::i;:::-;;:::i;38087:57::-;;;;;;;;;;-1:-1:-1;38087:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37785:35;;;;;;;;;;;;;;;;37829:25;;;;;;;;;;-1:-1:-1;37829:25:0;;;;-1:-1:-1;;;;;37829:25:0;;;44738:607;;;;;;;;;;-1:-1:-1;44738:607:0;;;;;:::i;:::-;;:::i;37923:26::-;;;;;;;;;;-1:-1:-1;37923:26:0;;;;-1:-1:-1;;;37923:26:0;;;;;;6788:151;;;;;;;;;;-1:-1:-1;6788:151:0;;;;;:::i;:::-;;:::i;48105:234::-;;;;;;;;;;-1:-1:-1;48105:234:0;;;;;:::i;:::-;;:::i;55781:184::-;;;;;;;;;;;;;:::i;37958:66::-;;;;;;;;;;-1:-1:-1;37958:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45989:598;;;;;;;;;;-1:-1:-1;45989:598:0;;;;;:::i;:::-;;:::i;37520:29::-;;;;;;;;;;-1:-1:-1;37520:29:0;;;;-1:-1:-1;;;37520:29:0;;;;;;37413:27;;;;;;;;;;-1:-1:-1;37413:27:0;;;;-1:-1:-1;;;37413:27:0;;;;;;11770:201;;;;;;;;;;-1:-1:-1;11770:201:0;;;;;:::i;:::-;;:::i;37483:30::-;;;;;;;;;;-1:-1:-1;37483:30:0;;;;-1:-1:-1;;;37483:30:0;;;;;;37754:24;;;;;;;;;;;;;;;;37714:33;;;;;;;;;;;;;;;;43424:101;;;;;;;;;;-1:-1:-1;43424:101:0;;;;;:::i;:::-;;:::i;6027:100::-;6081:13;6114:5;6107:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6027:100;:::o;6945:201::-;7028:4;5491:10;7084:32;5491:10;7100:7;7109:6;7084:8;:32::i;:::-;7134:4;7127:11;;;6945:201;;;;;:::o;45353:249::-;11391:13;:11;:13::i;:::-;45464:5:::1;45448:13;6430:12:::0;;;6342:108;45448:13:::1;:21;;;;:::i;:::-;45436:10;:33;;45428:79;;;::::0;-1:-1:-1;;;45428:79:0;;5740:2:1;45428:79:0::1;::::0;::::1;5722:21:1::0;5779:2;5759:18;;;5752:30;5818:34;5798:18;;;5791:62;-1:-1:-1;;;5869:18:1;;;5862:31;5910:19;;45428:79:0::1;;;;;;;;;45551:9;::::0;45523:38:::1;::::0;;6114:25:1;;;6170:2;6155:18;;6148:34;;;;45523:38:0::1;::::0;6087:18:1;45523:38:0::1;;;;;;;45572:9;:22:::0;45353:249::o;7152:261::-;7249:4;5491:10;7307:38;7323:4;5491:10;7338:6;7307:15;:38::i;:::-;7356:27;7366:4;7372:2;7376:6;7356:9;:27::i;:::-;-1:-1:-1;7401:4:0;;7152:261;-1:-1:-1;;;;7152:261:0:o;48347:323::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;48477:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;48469:69:::1;;;::::0;-1:-1:-1;;;48469:69:0;;6395:2:1;48469:69:0::1;::::0;::::1;6377:21:1::0;6434:1;6414:18;;;6407:29;-1:-1:-1;;;6452:18:1;;;6445:37;6499:18;;48469:69:0::1;6193:330:1::0;48469:69:0::1;-1:-1:-1::0;;;;;48549:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;48549:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;48615:47;;1266:41:1;;;48615:47:0::1;::::0;1239:18:1;48615:47:0::1;;;;;;;;48347:323:::0;;:::o;7419:238::-;7507:4;5491:10;7563:64;5491:10;7579:7;7616:10;7588:25;5491:10;7579:7;7588:9;:25::i;:::-;:38;;;;:::i;:::-;7563:8;:64::i;46595:586::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;46746:30:0;::::1;46738:70;;;::::0;-1:-1:-1;;;46738:70:0;;6860:2:1;46738:70:0::1;::::0;::::1;6842:21:1::0;6899:2;6879:18;;;6872:30;6938:29;6918:18;;;6911:57;6985:18;;46738:70:0::1;6658:351:1::0;46738:70:0::1;46903:15;::::0;46824:120:::1;::::0;;7201:14:1;;7194:22;7176:41;;46920:23:0::1;-1:-1:-1::0;;;46920:23:0;::::1;;7260:14:1::0;7253:22;7248:2;7233:18;;7226:50;-1:-1:-1;;;;;46903:15:0;;;::::1;::::0;::::1;::::0;46824:120;::::1;::::0;::::1;::::0;7149:18:1;46824:120:0::1;;;;;;;46955:15;:34:::0;;-1:-1:-1;;;;;;47000:50:0;46955:34;-1:-1:-1;;;;;46955:34:0;;;::::1;::::0;;::::1;-1:-1:-1::0;;;;47000:50:0;;-1:-1:-1;;;47000:50:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;47061:35:0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;47061:42:0;;::::1;-1:-1:-1::0;47061:42:0;;::::1;::::0;;;47114:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;46595:586::o;43631:890::-;11391:13;:11;:13::i;:::-;43760:18:::1;:40:::0;;-1:-1:-1;;;;;;43760:40:0::1;-1:-1:-1::0;;;;;43760:40:0;;::::1;::::0;;;::::1;::::0;;;43814:10:::1;::::0;:25;;::::1;:10:::0;::::1;:25;43811:135;;43879:10;::::0;43855:40:::1;::::0;43872:4:::1;::::0;-1:-1:-1;;;;;43879:10:0::1;-1:-1:-1::0;;43855:8:0::1;:40::i;:::-;43910:10;:24:::0;;-1:-1:-1;;;;;;43910:24:0::1;-1:-1:-1::0;;;;;43910:24:0;::::1;;::::0;;43811:135:::1;44005:10;;;;;;;;;-1:-1:-1::0;;;;;44005:10:0::1;-1:-1:-1::0;;;;;43986:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44081:18;::::0;43968:142:::1;::::0;-1:-1:-1;;;43968:142:0;;44061:4:::1;43968:142;::::0;::::1;7755:34:1::0;-1:-1:-1;;;;;44081:18:0;;::::1;7805::1::0;;;7798:43;43968:70:0;::::1;::::0;::::1;::::0;7690:18:1;;43968:142:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43957:8;:153:::0;;-1:-1:-1;;;;;;43957:153:0::1;-1:-1:-1::0;;;;;43957:153:0;;::::1;;::::0;;44165:10:::1;::::0;44146:37:::1;::::0;;-1:-1:-1;;;44146:37:0;;;;44165:10;;;::::1;::::0;44146:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;44165:10;44146:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44124:18;::::0;-1:-1:-1;;;;;44124:18:0;;::::1;:59:::0;::::1;;44121:256;;44250:10;::::0;44218:18:::1;::::0;44211:55:::1;::::0;-1:-1:-1;;;;;44218:18:0;;::::1;::::0;44250:10:::1;-1:-1:-1::0;;44211:38:0::1;:55::i;:::-;44281:15;:21:::0;;-1:-1:-1;;;;44281:21:0::1;::::0;;44121:256:::1;;;44345:15;:20:::0;;-1:-1:-1;;;;44345:20:0::1;-1:-1:-1::0;;;44345:20:0::1;::::0;;44121:256:::1;44417:10;::::0;44429:8:::1;::::0;44439:18:::1;::::0;44399:59:::1;::::0;;-1:-1:-1;;;;;44417:10:0;;::::1;8092:34:1::0;;44429:8:0;;::::1;8157:2:1::0;8142:18;;8135:43;44439:18:0;::::1;8194::1::0;;;8187:43;44399:59:0;;::::1;::::0;;;;8042:2:1;44399:59:0;;::::1;44498:8;::::0;44469:44:::1;::::0;-1:-1:-1;;;;;44498:8:0::1;::::0;44469:28:::1;:44::i;:::-;43631:890:::0;;:::o;6456:127::-;-1:-1:-1;;;;;6557:18:0;6530:7;6557:18;;;;;;;;;;;;6456:127::o;11661:103::-;11391:13;:11;:13::i;:::-;11726:30:::1;11753:1;11726:18;:30::i;:::-;11661:103::o:0;47189:319::-;11391:13;:11;:13::i;:::-;47335:1:::1;47313:19;:23;47305:58;;;::::0;-1:-1:-1;;;47305:58:0;;8443:2:1;47305:58:0::1;::::0;::::1;8425:21:1::0;8482:2;8462:18;;;8455:30;-1:-1:-1;;;8501:18:1;;;8494:52;8563:18;;47305:58:0::1;8241:346:1::0;47305:58:0::1;47425:18;::::0;47379:65:::1;::::0;;6114:25:1;;;6170:2;6155:18;;6148:34;;;;47379:65:0::1;::::0;6087:18:1;47379:65:0::1;;;;;;;47455:18;:40:::0;47189:319::o;55971:207::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;56046:22:0;::::1;56054:4;56046:22:::0;56038:46:::1;;;::::0;-1:-1:-1;;;56038:46:0;;8794:2:1;56038:46:0::1;::::0;::::1;8776:21:1::0;8833:2;8813:18;;;8806:30;-1:-1:-1;;;8852:18:1;;;8845:41;8903:18;;56038:46:0::1;8592:335:1::0;56038:46:0::1;56095:75;56122:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;56122:7:::1;56131:38;::::0;-1:-1:-1;;;56131:38:0;;56163:4:::1;56131:38;::::0;::::1;2991:51:1::0;-1:-1:-1;;;;;56131:23:0;::::1;::::0;::::1;::::0;2964:18:1;;56131:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56095:26:0;::::1;::::0;:75;:26:::1;:75::i;:::-;55971:207:::0;:::o;6133:104::-;6189:13;6222:7;6215:14;;;;;:::i;47516:320::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;47652:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;:40;::::1;;:31;::::0;;::::1;:40;;::::0;47630:146:::1;;;::::0;-1:-1:-1;;;47630:146:0;;9323:2:1;47630:146:0::1;::::0;::::1;9305:21:1::0;9362:2;9342:18;;;9335:30;9401:34;9381:18;;;9374:62;9472:26;9452:18;;;9445:54;9516:19;;47630:146:0::1;9121:420:1::0;47630:146:0::1;47787:41;47816:4;47822:5;47787:28;:41::i;7663:436::-:0;7756:4;5491:10;7756:4;7839:25;5491:10;7856:7;7839:9;:25::i;:::-;7812:52;;7903:15;7883:16;:35;;7875:85;;;;-1:-1:-1;;;7875:85:0;;9748:2:1;7875:85:0;;;9730:21:1;9787:2;9767:18;;;9760:30;9826:34;9806:18;;;9799:62;-1:-1:-1;;;9877:18:1;;;9870:35;9922:19;;7875:85:0;9546:401:1;7875:85:0;7996:60;8005:5;8012:7;8040:15;8021:16;:34;7996:8;:60::i;6589:193::-;6668:4;5491:10;6724:28;5491:10;6741:2;6745:6;6724:9;:28::i;45610:371::-;11391:13;:11;:13::i;:::-;45777:5:::1;45761:13;6430:12:::0;;;6342:108;45761:13:::1;:21;;;;:::i;:::-;45738;:44;;45730:101;;;::::0;-1:-1:-1;;;45730:101:0;;10154:2:1;45730:101:0::1;::::0;::::1;10136:21:1::0;10193:2;10173:18;;;10166:30;10232:34;10212:18;;;10205:62;-1:-1:-1;;;10283:18:1;;;10276:42;10335:19;;45730:101:0::1;9952:408:1::0;45730:101:0::1;45897:20;::::0;45847:71:::1;::::0;;6114:25:1;;;6170:2;6155:18;;6148:34;;;;45847:71:0::1;::::0;6087:18:1;45847:71:0::1;;;;;;;45929:20;:44:::0;45610:371::o;44738:607::-;11391:13;:11;:13::i;:::-;44914:16:::1;::::0;44934:6:::1;::::0;44894:36:::1;::::0;-1:-1:-1;;;44914:16:0;::::1;;;44894:17:::0;:36:::1;:::i;:::-;:46;;;;44872:111;;;::::0;-1:-1:-1;;;44872:111:0;;10742:2:1;44872:111:0::1;::::0;::::1;10724:21:1::0;10781:2;10761:18;;;10754:30;-1:-1:-1;;;10800:18:1;;;10793:45;10855:18;;44872:111:0::1;10540:339:1::0;44872:111:0::1;45021:15;::::0;45040:6:::1;::::0;45002:34:::1;::::0;45021:15:::1;;45002:16:::0;:34:::1;:::i;:::-;:44;;;;44994:71;;;::::0;-1:-1:-1;;;44994:71:0;;11086:2:1;44994:71:0::1;::::0;::::1;11068:21:1::0;11125:2;11105:18;;;11098:30;-1:-1:-1;;;11144:18:1;;;11137:44;11198:18;;44994:71:0::1;10884:338:1::0;44994:71:0::1;45177:16;::::0;45081:153:::1;::::0;;45177:16:::1;11495:15:1::0;;;11477:34;;11547:15;;;11542:2;11527:18;;11520:43;-1:-1:-1;;;45177:16:0;::::1;::::0;::::1;11579:18:1::0;;;11572:43;-1:-1:-1;;;45208:15:0;;::::1;::::0;;::::1;11646:2:1::0;11631:18;;11624:43;45081:153:0;::::1;::::0;;;;11437:3:1;45081:153:0;;::::1;45245:16;:36:::0;;-1:-1:-1;;;;45292:34:0;-1:-1:-1;;;45245:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;45292:34:0;;-1:-1:-1;;;45292:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;44738:607::o;6788:151::-;-1:-1:-1;;;;;6904:18:0;;;6877:7;6904:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6788:151::o;48105:234::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;48195:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;48187:54:::1;;;::::0;-1:-1:-1;;;48187:54:0;;6395:2:1;48187:54:0::1;::::0;::::1;6377:21:1::0;6434:1;6414:18;;;6407:29;-1:-1:-1;;;6452:18:1;;;6445:37;6499:18;;48187:54:0::1;6193:330:1::0;48187:54:0::1;-1:-1:-1::0;;;;;48252:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;48252:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;48301:30;;1266:41:1;;;48301:30:0::1;::::0;1239:18:1;48301:30:0::1;1126:187:1::0;55781:184:0;11391:13;:11;:13::i;:::-;55835:12:::1;55859:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;55859:7:::1;-1:-1:-1::0;;;;;55851:21:0::1;55880;55851:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55834:72;;;55925:7;55917:40;;;::::0;-1:-1:-1;;;55917:40:0;;12090:2:1;55917:40:0::1;::::0;::::1;12072:21:1::0;12129:2;12109:18;;;12102:30;-1:-1:-1;;;12148:18:1;;;12141:50;12208:18;;55917:40:0::1;11888:344:1::0;45989:598:0;11391:13;:11;:13::i;:::-;46165:16:::1;::::0;46185:6:::1;::::0;46145:36:::1;::::0;-1:-1:-1;;;46165:16:0;::::1;;;46145:17:::0;:36:::1;:::i;:::-;:46;;;;46123:111;;;::::0;-1:-1:-1;;;46123:111:0;;10742:2:1;46123:111:0::1;::::0;::::1;10724:21:1::0;10781:2;10761:18;;;10754:30;-1:-1:-1;;;10800:18:1;;;10793:45;10855:18;;46123:111:0::1;10540:339:1::0;46123:111:0::1;46272:15;::::0;46291:6:::1;::::0;46253:34:::1;::::0;-1:-1:-1;;;46272:15:0;::::1;;;46253:16:::0;:34:::1;:::i;:::-;:44;;;;46245:71;;;::::0;-1:-1:-1;;;46245:71:0;;11086:2:1;46245:71:0::1;::::0;::::1;11068:21:1::0;11125:2;11105:18;;;11098:30;-1:-1:-1;;;11144:18:1;;;11137:44;11198:18;;46245:71:0::1;10884:338:1::0;46245:71:0::1;46428:16;::::0;46459:15:::1;::::0;46332:153:::1;::::0;;46428:16:::1;11495:15:1::0;;;11477:34;;11547:15;;;11542:2;11527:18;;11520:43;-1:-1:-1;;;46428:16:0;;::::1;::::0;::::1;11579:18:1::0;;;11572:43;46459:15:0;;;::::1;11646:2:1::0;11631:18;;11624:43;46332:153:0;::::1;::::0;;;;11437:3:1;46332:153:0;;::::1;46496:16;:36:::0;;-1:-1:-1;;;;46496:36:0::1;-1:-1:-1::0;;;46496:36:0::1;::::0;;::::1;;;::::0;;46543:15:::1;:34:::0;;-1:-1:-1;;46543:34:0::1;::::0;;;::::1;;::::0;;45989:598::o;11770:201::-;11391:13;:11;:13::i;:::-;-1:-1:-1;;;;;11859:22:0;::::1;11851:73;;;::::0;-1:-1:-1;;;11851:73:0;;12439:2:1;11851:73:0::1;::::0;::::1;12421:21:1::0;12478:2;12458:18;;;12451:30;12517:34;12497:18;;;12490:62;-1:-1:-1;;;12568:18:1;;;12561:36;12614:19;;11851:73:0::1;12237:402:1::0;11851:73:0::1;11935:28;11954:8;11935:18;:28::i;43424:101::-:0;11391:13;:11;:13::i;:::-;43492:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;43492:25:0::1;-1:-1:-1::0;;;;43492:25:0;;::::1;::::0;;;::::1;::::0;;43424:101::o;10152:346::-;-1:-1:-1;;;;;10254:19:0;;10246:68;;;;-1:-1:-1;;;10246:68:0;;12846:2:1;10246:68:0;;;12828:21:1;12885:2;12865:18;;;12858:30;12924:34;12904:18;;;12897:62;-1:-1:-1;;;12975:18:1;;;12968:34;13019:19;;10246:68:0;12644:400:1;10246:68:0;-1:-1:-1;;;;;10333:21:0;;10325:68;;;;-1:-1:-1;;;10325:68:0;;13251:2:1;10325:68:0;;;13233:21:1;13290:2;13270:18;;;13263:30;13329:34;13309:18;;;13302:62;-1:-1:-1;;;13380:18:1;;;13373:32;13422:19;;10325:68:0;13049:398:1;10325:68:0;-1:-1:-1;;;;;10406:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10458:32;;1464:25:1;;;10458:32:0;;1437:18:1;10458:32:0;;;;;;;10152:346;;;:::o;11523:132::-;11503:6;;-1:-1:-1;;;;;11503:6:0;5491:10;11587:23;11579:68;;;;-1:-1:-1;;;11579:68:0;;13654:2:1;11579:68:0;;;13636:21:1;;;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;13784:18;;11579:68:0;13452:356:1;10504:419:0;10605:24;10632:25;10642:5;10649:7;10632:9;:25::i;:::-;10605:52;;-1:-1:-1;;10672:16:0;:37;10668:248;;10754:6;10734:16;:26;;10726:68;;;;-1:-1:-1;;;10726:68:0;;14015:2:1;10726:68:0;;;13997:21:1;14054:2;14034:18;;;14027:30;14093:31;14073:18;;;14066:59;14142:18;;10726:68:0;13813:353:1;10726:68:0;10838:51;10847:5;10854:7;10882:6;10863:16;:25;10838:8;:51::i;:::-;10594:329;10504:419;;;:::o;48678:2575::-;-1:-1:-1;;;;;48810:18:0;;48802:68;;;;-1:-1:-1;;;48802:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48889:16:0;;48881:64;;;;-1:-1:-1;;;48881:64:0;;;;;;;:::i;:::-;48960:14;;-1:-1:-1;;;48960:14:0;;;;48956:107;;;49003:10;;48991:60;;-1:-1:-1;;;48991:60:0;;-1:-1:-1;;;;;15239:15:1;;;48991:60:0;;;15221:34:1;15291:15;;;15271:18;;;15264:43;15323:18;;;15316:34;;;49003:10:0;;;;48991:42;;15156:18:1;;48991:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48956:107;49073:28;49104:24;49122:4;49104:9;:24::i;:::-;49073:55;;49149:24;49198:19;;49176;;:41;;;;:::i;:::-;49149:68;;49228:28;49292:18;;49259:16;:51;;:95;;;;;49334:20;49314:16;:40;;49259:95;49405:16;;49228:126;;-1:-1:-1;;;;49405:16:0;;;;49404:17;:57;;;;-1:-1:-1;49448:8:0;;49460:1;;49438:19;;-1:-1:-1;;;;;49448:8:0;49438:9;:19::i;:::-;:23;49404:57;:97;;;;;49478:23;49404:97;:143;;;;-1:-1:-1;;;;;;49518:29:0;;;;;;:25;:29;;;;;;;;49404:143;49386:209;;;49574:9;:7;:9::i;:::-;49776:16;;49607:21;;;;-1:-1:-1;;;49776:16:0;;;;49775:17;:58;;;;-1:-1:-1;;;;;;49810:23:0;;;;;;:17;:23;;;;;;;;49809:24;49775:58;:97;;;;-1:-1:-1;;;;;;49851:21:0;;;;;;:17;:21;;;;;;;;49850:22;49775:97;49757:946;;;-1:-1:-1;;;;;49923:31:0;;;;;;:25;:31;;;;;;;;49919:422;;;50000:15;;50018:7;;49991:24;;-1:-1:-1;;;50000:15:0;;;;49991:6;:24;:::i;:::-;:34;;;;:::i;:::-;50069:15;;49975:50;;-1:-1:-1;50087:7:0;;50060:24;;50069:15;;50060:6;:24;:::i;:::-;:34;;;;:::i;:::-;50044:50;;49919:422;;;-1:-1:-1;;;;;50154:29:0;;;;;;:25;:29;;;;;;;;50150:191;;;50229:16;;50248:7;;50220:25;;-1:-1:-1;;;50229:16:0;;;;50220:6;:25;:::i;:::-;:35;;;;:::i;:::-;50299:16;;50204:51;;-1:-1:-1;50318:7:0;;50290:25;;-1:-1:-1;;;50299:16:0;;;;50290:6;:25;:::i;:::-;:35;;;;:::i;:::-;50274:51;;50150:191;50355:17;50375:29;50391:13;50375;:29;:::i;:::-;50355:49;-1:-1:-1;50423:13:0;;50419:66;;50438:47;50454:4;50468;50475:9;50438:15;:47::i;:::-;50534:13;50509:22;50518:13;50509:6;:22;:::i;:::-;:38;;;;:::i;:::-;50500:47;;50606:13;50584:19;;:35;;;;:::i;:::-;50562:19;:57;50656:19;;:35;;50678:13;;50656:35;:::i;:::-;50634:19;:57;-1:-1:-1;49757:946:0;50713:33;50729:4;50735:2;50739:6;50713:15;:33::i;:::-;50762:16;;-1:-1:-1;;;50762:16:0;;;;50757:489;;-1:-1:-1;;;;;50800:40:0;;;;;;:34;:40;;;;;;;;50795:215;;50901:20;;50891:6;:30;;50861:133;;;;-1:-1:-1;;;50861:133:0;;15869:2:1;50861:133:0;;;15851:21:1;15908:2;15888:18;;;15881:30;15947:31;15927:18;;;15920:59;15996:18;;50861:133:0;15667:353:1;50861:133:0;-1:-1:-1;;;;;51029:38:0;;;;;;:34;:38;;;;;;;;51024:211;;51135:9;;51118:13;51128:2;51118:9;:13::i;:::-;:26;;51088:131;;;;-1:-1:-1;;;51088:131:0;;16227:2:1;51088:131:0;;;16209:21:1;16266:2;16246:18;;;16239:30;16305:33;16285:18;;;16278:61;16356:18;;51088:131:0;16025:355:1;51088:131:0;48791:2462;;;;;48678:2575;;;:::o;12989:582::-;13319:10;;;13318:62;;-1:-1:-1;13335:39:0;;-1:-1:-1;;;13335:39:0;;13359:4;13335:39;;;7755:34:1;-1:-1:-1;;;;;7825:15:1;;;7805:18;;;7798:43;13335:15:0;;;;;7690:18:1;;13335:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;13318:62;13296:166;;;;-1:-1:-1;;;13296:166:0;;16587:2:1;13296:166:0;;;16569:21:1;16626:2;16606:18;;;16599:30;16665:34;16645:18;;;16638:62;-1:-1:-1;;;16716:18:1;;;16709:52;16778:19;;13296:166:0;16385:418:1;13296:166:0;13500:62;;-1:-1:-1;;;;;17000:32:1;;13500:62:0;;;16982:51:1;17049:18;;;17042:34;;;13473:90:0;;13493:5;;-1:-1:-1;;;13523:22:0;16955:18:1;;13500:62:0;;;;-1:-1:-1;;13500:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13500:62:0;-1:-1:-1;;;;;;13500:62:0;;;;;;;;;;13473:19;:90::i;:::-;12989:582;;;:::o;47844:253::-;-1:-1:-1;;;;;47935:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;47935:39:0;;;;;;;;47985:34;:40;;;;;;:48;;;;;;;;;;48049:40;1266:41:1;;;48049:40:0;;1239:18:1;48049:40:0;1126:187:1;11977:191:0;12070:6;;;-1:-1:-1;;;;;12087:17:0;;;-1:-1:-1;;;;;;12087:17:0;;;;;;;12120:40;;12070:6;;;12087:17;12070:6;;12120:40;;12051:16;;12120:40;12040:128;11977:191;:::o;12595:177::-;12705:58;;-1:-1:-1;;;;;17000:32:1;;12705:58:0;;;16982:51:1;17049:18;;;17042:34;;;12678:86:0;;12698:5;;-1:-1:-1;;;12728:23:0;16955:18:1;;12705:58:0;16808:274:1;51261:2849:0;44652:16;:23;;-1:-1:-1;;;;44652:23:0;-1:-1:-1;;;44652:23:0;;;51391:19:::1;::::0;44652:23;;51391::::1;::::0;51413:1:::1;::::0;51391:23:::1;:::i;:::-;51459:15;::::0;51362:52;;-1:-1:-1;51425:31:0::1;::::0;-1:-1:-1;;;51459:15:0;::::1;;;:106;;51521:18;::::0;51514:51:::1;::::0;-1:-1:-1;;;51514:51:0;;51559:4:::1;51514:51;::::0;::::1;2991::1::0;-1:-1:-1;;;;;51521:18:0;;::::1;::::0;51514:36:::1;::::0;2964:18:1;;51514:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51459:106;;;51477:21;51459:106;51639:23;::::0;51425:140;;-1:-1:-1;51595:29:0::1;::::0;-1:-1:-1;;;51639:23:0;::::1;;;51635:1860;;;51679:21;51720:19;;51701:18;:38;;;;:::i;:::-;51679:60:::0;-1:-1:-1;51757:15:0;;51754:74:::1;;51791:37;51814:13;51791:22;:37::i;:::-;51870:15;::::0;51843:24:::1;::::0;-1:-1:-1;;;51870:15:0;::::1;;;:162;;51962:18;::::0;51955:51:::1;::::0;-1:-1:-1;;;51955:51:0;;52000:4:::1;51955:51;::::0;::::1;2991::1::0;52009:23:0;;-1:-1:-1;;;;;51962:18:0::1;::::0;51955:36:::1;::::0;2964:18:1;;51955:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;;:::i;:::-;51870:162;;;51888:47;51912:23:::0;51888:21:::1;:47;:::i;:::-;51843:189;;52047:35;52145:13;52122:19;;52086:16;:55;;;;:::i;:::-;52085:73;;;;:::i;:::-;52047:111:::0;-1:-1:-1;52197:46:0::1;52047:111:::0;52197:16;:46:::1;:::i;:::-;52173:70:::0;-1:-1:-1;52261:29:0;;52258:667:::1;;52313:15;::::0;-1:-1:-1;;;52313:15:0;::::1;;;52310:584;;;52393:15;::::0;52385:69:::1;::::0;52369:12:::1;::::0;52393:15;;::::1;-1:-1:-1::0;;;;;52393:15:0::1;::::0;52422:27;;52369:12;52385:69;52369:12;52385:69;52422:27;52393:15;52385:69:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52368:86;;;52480:7;52477:116;;;52520:49;::::0;;52538:1:::1;6114:25:1::0;;6170:2;6155:18;;6148:34;;;52520:49:0::1;::::0;6087:18:1;52520:49:0::1;;;;;;;52477:116;52329:283;52310:584;;;52705:15;::::0;52646:18:::1;::::0;52639:158:::1;::::0;-1:-1:-1;;;;;52646:18:0;;::::1;::::0;52705:15;;;::::1;;52747:27:::0;52639:39:::1;:158::i;:::-;52825:49;::::0;;52843:1:::1;6114:25:1::0;;6170:2;6155:18;;6148:34;;;52825:49:0::1;::::0;6087:18:1;52825:49:0::1;;;;;;;52310:584;51664:1284;;;51635:1860;;;52972:20:::0;;52969:84:::1;;53011:42;53034:18;53011:22;:42::i;:::-;53092:15;::::0;-1:-1:-1;;;53092:15:0;::::1;;;:162;;53184:18;::::0;53177:51:::1;::::0;-1:-1:-1;;;53177:51:0;;53222:4:::1;53177:51;::::0;::::1;2991::1::0;53231:23:0;;-1:-1:-1;;;;;53184:18:0::1;::::0;53177:36:::1;::::0;2964:18:1;;53177:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;;:::i;:::-;53092:162;;;53110:47;53134:23:::0;53110:21:::1;:47;:::i;:::-;53272:19;::::0;53068:186;;-1:-1:-1;53272:21:0;53269:203:::1;;53313:62;53331:4;53338:15;;;;;;;;;-1:-1:-1::0;;;;;53338:15:0::1;53355:19;;53313:9;:62::i;:::-;53417:19;::::0;53399:41:::1;::::0;;6114:25:1;;;53438:1:0::1;6170:2:1::0;6155:18;;6148:34;53399:41:0::1;::::0;6087:18:1;53399:41:0::1;;;;;;;53269:203;53532:1;53511:18;:22;:51;;;;;53561:1;53537:21;:25;53511:51;53507:216;;;53579:55;53592:18;53612:21;53579:12;:55::i;:::-;53654:57;::::0;;6114:25:1;;;6170:2;6155:18;;6148:34;;;53654:57:0::1;::::0;6087:18:1;53654:57:0::1;;;;;;;53507:216;53755:1;53733:19;:23:::0;;;53767:19:::1;:23:::0;;;53808:24:::1;53826:4;53808:9;:24::i;:::-;:26;53805:283;;;53870:1;53853:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;53853:7:::1;-1:-1:-1::0;;;;;53853:19:0::1;;53850:227;;53892:59;53910:4;53917:7;11503:6:::0;;-1:-1:-1;;;;;11503:6:0;;11430:87;53917:7:::1;53926:24;53944:4;53926:9;:24::i;:::-;53892:9;:59::i;:::-;53850:227;;;53992:67;54010:4;54025:6;54034:24;54052:4;54034:9;:24::i;53992:67::-;-1:-1:-1::0;;44698:16:0;:24;;-1:-1:-1;;;;44698:24:0;;;-1:-1:-1;51261:2849:0:o;8105:806::-;-1:-1:-1;;;;;8202:18:0;;8194:68;;;;-1:-1:-1;;;8194:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8281:16:0;;8273:64;;;;-1:-1:-1;;;8273:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8423:15:0;;8401:19;8423:15;;;;;;;;;;;8457:21;;;;8449:72;;;;-1:-1:-1;;;8449:72:0;;17811:2:1;8449:72:0;;;17793:21:1;17850:2;17830:18;;;17823:30;17889:34;17869:18;;;17862:62;-1:-1:-1;;;17940:18:1;;;17933:36;17986:19;;8449:72:0;17609:402:1;8449:72:0;-1:-1:-1;;;;;8557:15:0;;;:9;:15;;;;;;;;;;;8575:20;;;8557:38;;8775:13;;;;;;;;;;:23;;;;;;8827:26;;1464:25:1;;;8775:13:0;;8827:26;;1437:18:1;8827:26:0;;;;;;;8866:37;12989:582;15200:649;15624:23;15650:69;15678:4;15650:69;;;;;;;;;;;;;;;;;15658:5;-1:-1:-1;;;;;15650:27:0;;;:69;;;;;:::i;:::-;15624:95;;15738:10;:17;15759:1;15738:22;:56;;;;15775:10;15764:30;;;;;;;;;;;;:::i;:::-;15730:111;;;;-1:-1:-1;;;15730:111:0;;18468:2:1;15730:111:0;;;18450:21:1;18507:2;18487:18;;;18480:30;18546:34;18526:18;;;18519:62;-1:-1:-1;;;18597:18:1;;;18590:40;18647:19;;15730:111:0;18266:406:1;54118:852:0;54214:16;;;54228:1;54214:16;;;;;;;;54190:21;;54214:16;;;;;;;;;;-1:-1:-1;54214:16:0;54190:40;;54259:4;54241;54246:1;54241:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54241:23:0;;;:7;;;;;;;;;:23;54285:18;;54275:7;;54285:18;;;54275:4;;54285:18;;54275:7;;;;;;:::i;:::-;-1:-1:-1;;;;;54275:28:0;;;:7;;;;;;;;;;;:28;54323:15;;;-1:-1:-1;;;54323:15:0;;;;54319:634;;;54373:10;;54354:269;;-1:-1:-1;;;54354:269:0;;-1:-1:-1;;;;;54373:10:0;;;;54354:81;;:269;;54454:11;;54373:10;;54538:4;;54569;;54593:15;;54354:269;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43631:890;;:::o;54319:634::-;54654:15;;54754:10;;54654:287;;-1:-1:-1;;;54654:287:0;;-1:-1:-1;;;;;54654:15:0;;;;:69;;:287;;54754:10;;;54788:11;;54654:15;;54880:4;;54907:15;;54654:287;;;:::i;54978:795::-;55083:15;;-1:-1:-1;;;55083:15:0;;;;55079:685;;;55133:10;;55114:309;;-1:-1:-1;;;55114:309:0;;55211:4;55114:309;;;20922:34:1;20972:18;;;20965:34;;;55133:10:0;21015:18:1;;;21008:34;;;21058:18;;;21051:34;55367:6:0;21101:19:1;;;21094:44;55393:15:0;21154:19:1;;;21147:35;-1:-1:-1;;;;;55133:10:0;;;;55114:46;;55168:15;;20856:19:1;;55114:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43631:890;;:::o;55079:685::-;55472:10;;55547:18;;55453:299;;-1:-1:-1;;;55453:299:0;;55523:4;55453:299;;;21901:34:1;-1:-1:-1;;;;;55547:18:0;;;21951::1;;;21944:43;22003:18;;;21996:34;;;22046:18;;;22039:34;;;55472:10:0;22089:19:1;;;22082:35;;;22133:19;;;22126:35;55696:6:0;22177:19:1;;;22170:44;55722:15:0;22230:19:1;;;22223:35;55472:10:0;;;55453:43;;21835:19:1;;55453:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;933:229::-;1070:12;1102:52;1124:6;1132:4;1138:1;1141:12;1102:21;:52::i;:::-;1095:59;933:229;-1:-1:-1;;;;933:229:0:o;1400:455::-;1570:12;1628:5;1603:21;:30;;1595:81;;;;-1:-1:-1;;;1595:81:0;;22471:2:1;1595:81:0;;;22453:21:1;22510:2;22490:18;;;22483:30;22549:34;22529:18;;;22522:62;-1:-1:-1;;;22600:18:1;;;22593:36;22646:19;;1595:81:0;22269:402:1;1595:81:0;1688:12;1702:23;1729:6;-1:-1:-1;;;;;1729:11:0;1748:5;1755:4;1729:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1687:73;;;;1778:69;1805:6;1813:7;1822:10;1834:12;1778:26;:69::i;:::-;1771:76;1400:455;-1:-1:-1;;;;;;;1400:455:0:o;2949:644::-;3134:12;3163:7;3159:427;;;3191:10;:17;3212:1;3191:22;3187:290;;-1:-1:-1;;;;;380:19:0;;;3401:60;;;;-1:-1:-1;;;3401:60:0;;23170:2:1;3401:60:0;;;23152:21:1;23209:2;23189:18;;;23182:30;23248:31;23228:18;;;23221:59;23297:18;;3401:60:0;22968:353:1;3401:60:0;-1:-1:-1;3498:10:0;3491:17;;3159:427;3541:33;3549:10;3561:12;4071:17;;:21;4067:388;;4303:10;4297:17;4360:15;4347:10;4343:2;4339:19;4332:44;4067:388;4430:12;4423:20;;-1:-1:-1;;;4423:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1500:180::-;1559:6;1612:2;1600:9;1591:7;1587:23;1583:32;1580:52;;;1628:1;1625;1618:12;1580:52;-1:-1:-1;1651:23:1;;1500:180;-1:-1:-1;1500:180:1:o;1685:456::-;1762:6;1770;1778;1831:2;1819:9;1810:7;1806:23;1802:32;1799:52;;;1847:1;1844;1837:12;1799:52;1886:9;1873:23;1905:31;1930:5;1905:31;:::i;:::-;1955:5;-1:-1:-1;2012:2:1;1997:18;;1984:32;2025:33;1984:32;2025:33;:::i;:::-;1685:456;;2077:7;;-1:-1:-1;;;2131:2:1;2116:18;;;;2103:32;;1685:456::o;2146:118::-;2232:5;2225:13;2218:21;2211:5;2208:32;2198:60;;2254:1;2251;2244:12;2269:382;2334:6;2342;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;2450:9;2437:23;2469:31;2494:5;2469:31;:::i;:::-;2519:5;-1:-1:-1;2576:2:1;2561:18;;2548:32;2589:30;2548:32;2589:30;:::i;:::-;2638:7;2628:17;;;2269:382;;;;;:::o;3053:247::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3220:9;3207:23;3239:31;3264:5;3239:31;:::i;:::-;3289:5;3053:247;-1:-1:-1;;;3053:247:1:o;3305:388::-;3373:6;3381;3434:2;3422:9;3413:7;3409:23;3405:32;3402:52;;;3450:1;3447;3440:12;3402:52;3489:9;3476:23;3508:31;3533:5;3508:31;:::i;:::-;3558:5;-1:-1:-1;3615:2:1;3600:18;;3587:32;3628:33;3587:32;3628:33;:::i;4126:161::-;4193:20;;4253:8;4242:20;;4232:31;;4222:59;;4277:1;4274;4267:12;4222:59;4126:161;;;:::o;4292:256::-;4358:6;4366;4419:2;4407:9;4398:7;4394:23;4390:32;4387:52;;;4435:1;4432;4425:12;4387:52;4458:28;4476:9;4458:28;:::i;:::-;4448:38;;4505:37;4538:2;4527:9;4523:18;4505:37;:::i;:::-;4495:47;;4292:256;;;;;:::o;4553:241::-;4609:6;4662:2;4650:9;4641:7;4637:23;4633:32;4630:52;;;4678:1;4675;4668:12;4630:52;4717:9;4704:23;4736:28;4758:5;4736:28;:::i;4799:380::-;4878:1;4874:12;;;;4921;;;4942:61;;4996:4;4988:6;4984:17;4974:27;;4942:61;5049:2;5041:6;5038:14;5018:18;5015:38;5012:161;;5095:10;5090:3;5086:20;5083:1;5076:31;5130:4;5127:1;5120:15;5158:4;5155:1;5148:15;5012:161;;4799:380;;;:::o;5184:127::-;5245:10;5240:3;5236:20;5233:1;5226:31;5276:4;5273:1;5266:15;5300:4;5297:1;5290:15;5316:217;5356:1;5382;5372:132;;5426:10;5421:3;5417:20;5414:1;5407:31;5461:4;5458:1;5451:15;5489:4;5486:1;5479:15;5372:132;-1:-1:-1;5518:9:1;;5316:217::o;6528:125::-;6593:9;;;6614:10;;;6611:36;;;6627:18;;:::i;7287:251::-;7357:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:52;;;7426:1;7423;7416:12;7378:52;7458:9;7452:16;7477:31;7502:5;7477:31;:::i;8932:184::-;9002:6;9055:2;9043:9;9034:7;9030:23;9026:32;9023:52;;;9071:1;9068;9061:12;9023:52;-1:-1:-1;9094:16:1;;8932:184;-1:-1:-1;8932:184:1:o;10365:170::-;10432:8;10460:10;;;10472;;;10456:27;;10495:11;;;10492:37;;;10509:18;;:::i;:::-;10492:37;10365:170;;;;:::o;14171:401::-;14373:2;14355:21;;;14412:2;14392:18;;;14385:30;14451:34;14446:2;14431:18;;14424:62;-1:-1:-1;;;14517:2:1;14502:18;;14495:35;14562:3;14547:19;;14171:401::o;14577:399::-;14779:2;14761:21;;;14818:2;14798:18;;;14791:30;14857:34;14852:2;14837:18;;14830:62;-1:-1:-1;;;14923:2:1;14908:18;;14901:33;14966:3;14951:19;;14577:399::o;15361:168::-;15434:9;;;15465;;15482:15;;;15476:22;;15462:37;15452:71;;15503:18;;:::i;15534:128::-;15601:9;;;15622:11;;;15619:37;;;15636:18;;:::i;18016:245::-;18083:6;18136:2;18124:9;18115:7;18111:23;18107:32;18104:52;;;18152:1;18149;18142:12;18104:52;18184:9;18178:16;18203:28;18225:5;18203:28;:::i;18809:127::-;18870:10;18865:3;18861:20;18858:1;18851:31;18901:4;18898:1;18891:15;18925:4;18922:1;18915:15;18941:461;18994:3;19032:5;19026:12;19059:6;19054:3;19047:19;19085:4;19114:2;19109:3;19105:12;19098:19;;19151:2;19144:5;19140:14;19172:1;19182:195;19196:6;19193:1;19190:13;19182:195;;;19261:13;;-1:-1:-1;;;;;19257:39:1;19245:52;;19317:12;;;;19352:15;;;;19293:1;19211:9;19182:195;;;-1:-1:-1;19393:3:1;;18941:461;-1:-1:-1;;;;;18941:461:1:o;19407:582::-;19706:6;19695:9;19688:25;19749:6;19744:2;19733:9;19729:18;19722:34;19792:3;19787:2;19776:9;19772:18;19765:31;19669:4;19813:57;19865:3;19854:9;19850:19;19842:6;19813:57;:::i;:::-;-1:-1:-1;;;;;19906:32:1;;;;19901:2;19886:18;;19879:60;-1:-1:-1;19970:3:1;19955:19;19948:35;19805:65;19407:582;-1:-1:-1;;;19407:582:1:o;19994:::-;20322:1;20318;20313:3;20309:11;20305:19;20297:6;20293:32;20282:9;20275:51;20362:6;20357:2;20346:9;20342:18;20335:34;20405:6;20400:2;20389:9;20385:18;20378:34;20448:3;20443:2;20432:9;20428:18;20421:31;20256:4;20469:57;20521:3;20510:9;20506:19;20498:6;20469:57;:::i;:::-;20461:65;;20563:6;20557:3;20546:9;20542:19;20535:35;19994:582;;;;;;;;:::o;21193:306::-;21281:6;21289;21297;21350:2;21338:9;21329:7;21325:23;21321:32;21318:52;;;21366:1;21363;21356:12;21318:52;21395:9;21389:16;21379:26;;21445:2;21434:9;21430:18;21424:25;21414:35;;21489:2;21478:9;21474:18;21468:25;21458:35;;21193:306;;;;;:::o;22676:287::-;22805:3;22843:6;22837:13;22859:66;22918:6;22913:3;22906:4;22898:6;22894:17;22859:66;:::i;:::-;22941:16;;;;;22676:287;-1:-1:-1;;22676:287:1:o
Swarm Source
ipfs://252697ecdf7836d6851fa7b75e22c18b00c66ae6c069c8a0c036577b3123c2d6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,629.18 | 0.0167 | $60.72 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.