Token
NexTest (NexTest)
ERC-20
Source Code
Overview
Max Total Supply
99,999,919,684.610058676 NexTest
Holders
47
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
389.495875491 NexTestLoading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
NexTest
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-01-25
*/
pragma solidity ^0.8.14;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract NexTest is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
struct RValuesStruct {
uint256 rAmount;
uint256 rTransferAmount;
uint256 rReflectionFee;
uint256 rBurnFee;
uint256 rinvestmentTokenFee;
uint256 rInvestmentETHFee;
}
struct TValuesStruct {
uint256 tTransferAmount;
uint256 tReflectionFee;
uint256 tBurnFee;
uint256 tinvestmentTokenFee;
uint256 tInvestmentETHFee;
}
struct ValuesStruct {
uint256 rAmount;
uint256 rTransferAmount;
uint256 rReflectionFee;
uint256 rBurnFee;
uint256 rinvestmentTokenFee;
uint256 rInvestmentETHFee;
uint256 tTransferAmount;
uint256 tReflectionFee;
uint256 tBurnFee;
uint256 tinvestmentTokenFee;
uint256 tInvestmentETHFee;
}
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isExcludedFromFee;
mapping (address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 100 * 10**9 * 10**9;
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 private _tReflectionFeeTotal;
uint256 private _tBurnFeeTotal;
string private _name = "NexTest";
string private _symbol = "NexTest";
uint8 private _decimals = 9;
uint256 public _reflectionFee = 1;
uint256 public _burnFee = 1;
uint256 public _investmentTokenFee = 1;
uint256 public _investmentETHFee = 0;
address public investmentTokenFeeWallet = 0xf18DB3ff2595332E293CbbAeC8cF380194d3dbF6;
address public investmentETHFeeWallet = 0xf18DB3ff2595332E293CbbAeC8cF380194d3dbF6;
address public burnAddress = 0x000000000000000000000000000000000000dEaD;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool inInvestmentEthSwap = false;
bool public _investmentConverttoETH = true;
bool public _tradingEnabled = false;
uint256 public _maxTxAmount = 100 * 10**6 * 10**9;
uint256 private _numTokensSwapToETHForInvestment = 40 * 10**6 * 10**9;
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
modifier lockTheSwap {
inInvestmentEthSwap = true;
_;
inInvestmentEthSwap = false;
}
constructor () {
_rOwned[_msgSender()] = _rTotal;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008); // Uniswap V2
// Create a uniswap pair for this new token
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
// set the rest of the contract variables
uniswapV2Router = _uniswapV2Router;
//exclude owner and this contract from fee
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalReflectionFees() public view returns (uint256) {
return _tReflectionFeeTotal;
}
function totalBurnFees() public view returns (uint256) {
return _tBurnFeeTotal;
}
/**
* @dev Returns the Number of tokens in contract that are needed to be reached before swapping to ETH and sending to Investment Wallet. .
*/
function numTokensSwapToETHForInvestment() public view returns (uint256) {
return _numTokensSwapToETHForInvestment;
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
uint256 rAmount = _getValues(tAmount).rAmount;
return rAmount;
} else {
uint256 rTransferAmount = _getValues(tAmount).rTransferAmount;
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return rAmount.div(currentRate);
}
function excludeFromReward(address account) public onlyOwner() {
require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
require(!_isExcluded[account], "Account already excluded");
require(_excluded.length < 100, "Excluded list is too long");
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
function _distributeFee(uint256 rReflectionFee, uint256 rBurnFee, uint256 rinvestmentTokenFee, uint256 tReflectionFee, uint256 tBurnFee, uint256 tinvestmentTokenFee) private {
_rTotal = _rTotal.sub(rReflectionFee).sub(rBurnFee);
_tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee);
_tTotal = _tTotal.sub(tBurnFee);
_tBurnFeeTotal = _tBurnFeeTotal.add(tBurnFee);
_rOwned[investmentTokenFeeWallet] = _rOwned[investmentTokenFeeWallet].add(rinvestmentTokenFee);
if (_isExcluded[investmentTokenFeeWallet]) {
_tOwned[investmentTokenFeeWallet] = _tOwned[investmentTokenFeeWallet].add(tinvestmentTokenFee);
}
_rOwned[burnAddress] = _rOwned[burnAddress].add(rBurnFee);
if (_isExcluded[burnAddress]) {
_tOwned[burnAddress] = _tOwned[burnAddress].add(tBurnFee);
}
}
function _getValues(uint256 tAmount) private view returns (ValuesStruct memory) {
TValuesStruct memory tvs = _getTValues(tAmount);
RValuesStruct memory rvs = _getRValues(tAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tinvestmentTokenFee, tvs.tInvestmentETHFee, _getRate());
return ValuesStruct(
rvs.rAmount,
rvs.rTransferAmount,
rvs.rReflectionFee,
rvs.rBurnFee,
rvs.rinvestmentTokenFee,
rvs.rInvestmentETHFee,
tvs.tTransferAmount,
tvs.tReflectionFee,
tvs.tBurnFee,
tvs.tinvestmentTokenFee,
tvs.tInvestmentETHFee
);
}
function _getTValues(uint256 tAmount) private view returns (TValuesStruct memory) {
uint256 tReflectionFee = calculateReflectionFee(tAmount);
uint256 tBurnFee = calculateBurnFee(tAmount);
uint256 tinvestmentTokenFee = calculateinvestmentTokenFee(tAmount);
uint256 tInvestmentETHFee = calculateInvestmentETHFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tBurnFee).sub(tinvestmentTokenFee).sub(tInvestmentETHFee);
return TValuesStruct(tTransferAmount, tReflectionFee, tBurnFee, tinvestmentTokenFee, tInvestmentETHFee);
}
function _getRValues(uint256 tAmount, uint256 tReflectionFee, uint256 tBurnFee, uint256 tinvestmentTokenFee, uint256 tInvestmentETHFee, uint256 currentRate) private pure returns (RValuesStruct memory) {
uint256 rAmount = tAmount.mul(currentRate);
uint256 rReflectionFee = tReflectionFee.mul(currentRate);
uint256 rBurnFee = tBurnFee.mul(currentRate);
uint256 rinvestmentTokenFee = tinvestmentTokenFee.mul(currentRate);
uint256 rInvestmentETHFee = tInvestmentETHFee.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rInvestmentETHFee).sub(rBurnFee).sub(rinvestmentTokenFee);
return RValuesStruct(rAmount, rTransferAmount, rReflectionFee, rBurnFee, rinvestmentTokenFee, rInvestmentETHFee);
}
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply.sub(_rOwned[_excluded[i]]);
tSupply = tSupply.sub(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _takeInvestmentETHFee(uint256 rInvestmentETHFee, uint256 tInvestmentETHFee) private {
_rOwned[address(this)] = _rOwned[address(this)].add(rInvestmentETHFee);
if(_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)].add(tInvestmentETHFee);
}
function calculateReflectionFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_reflectionFee).div(
10**2
);
}
function calculateBurnFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_burnFee).div(
10**2
);
}
function calculateinvestmentTokenFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_investmentTokenFee).div(
10**2
);
}
function calculateInvestmentETHFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(_investmentETHFee).div(
10**2
);
}
function removeAllFee() private {
_reflectionFee = 0;
_investmentETHFee = 0;
_burnFee = 0;
_investmentTokenFee = 0;
}
function restoreAllFee() private {
_reflectionFee = 1;
_investmentETHFee = 0;
_investmentTokenFee = 1;
_burnFee = 1;
}
function isExcludedFromFee(address account) public view returns(bool) {
return _isExcludedFromFee[account];
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
// block trading until owner has added liquidity and enabled trading
if(!_tradingEnabled && from != owner()) {
revert("Trading is not enabled!");
}
// is the token balance of this contract address over the min number of
// tokens that we need to initiate a swaptoEth lock?
// also, don't get caught in a circular liquidity event.
// also, don't SwapInvestmentAndSendETH if sender is uniswap pair.
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >= _numTokensSwapToETHForInvestment;
if (
overMinTokenBalance &&
!inInvestmentEthSwap &&
from != uniswapV2Pair &&
_investmentConverttoETH
) {
contractTokenBalance = _numTokensSwapToETHForInvestment;
//Perform a Swap of Token for ETH Portion of Investment Fees
swapInvestmentAndSendEth(contractTokenBalance);
}
//transfer amount, it will take tax, burn, liquidity fee
_tokenTransfer(from,to,amount);
}
function swapInvestmentAndSendEth(uint256 tokenAmount) private lockTheSwap {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
investmentETHFeeWallet,
block.timestamp
);
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(address sender, address recipient, uint256 amount) private {
if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
removeAllFee();
}
else{
require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
}
ValuesStruct memory vs = _getValues(amount);
_takeInvestmentETHFee(vs.rInvestmentETHFee, vs.tInvestmentETHFee);
_distributeFee(vs.rReflectionFee, vs.rBurnFee, vs.rinvestmentTokenFee, vs.tReflectionFee, vs.tBurnFee, vs.tinvestmentTokenFee);
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount, vs);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, vs);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, vs);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount, vs);
}
if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
restoreAllFee();
}
function _transferStandard(address sender, address recipient, ValuesStruct memory vs) private {
_rOwned[sender] = _rOwned[sender].sub(vs.rAmount);
_rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount);
emit Transfer(sender, recipient, vs.tTransferAmount);
}
function _transferToExcluded(address sender, address recipient, ValuesStruct memory vs) private {
_rOwned[sender] = _rOwned[sender].sub(vs.rAmount);
_tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount);
emit Transfer(sender, recipient, vs.tTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private {
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(vs.rAmount);
_rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount);
emit Transfer(sender, recipient, vs.tTransferAmount);
}
function _transferBothExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private {
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(vs.rAmount);
_tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount);
emit Transfer(sender, recipient, vs.tTransferAmount);
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function enableAllFees() external onlyOwner() {
_reflectionFee = 1;
_burnFee = 1;
_investmentTokenFee = 1;
_investmentETHFee = 0;
_investmentConverttoETH = true;
}
function disableAllFees() external onlyOwner() {
_reflectionFee = 0;
_burnFee = 0;
_investmentTokenFee = 0;
_investmentETHFee = 0;
_investmentConverttoETH = false;
}
function setReflectionFee(uint256 FeeAmount) external onlyOwner() {
_reflectionFee = FeeAmount;
}
function setBurnFee(uint256 FeeAmount) external onlyOwner() {
_burnFee = FeeAmount;
}
function setInvestmenTokenFee(uint256 FeeAmount) external onlyOwner() {
_investmentTokenFee = FeeAmount;
}
function setInvestmenETHFee(uint256 FeeAmount) external onlyOwner() {
_investmentETHFee = FeeAmount;
}
function setInvestmentETHWallet(address newWallet) external onlyOwner() {
investmentETHFeeWallet = newWallet;
}
function setInvestmentTokenWallet(address newWallet) external onlyOwner() {
investmentTokenFeeWallet = newWallet;
}
function setMaxTxAmount(uint256 maxAmountInTokensWithDecimals) external onlyOwner() {
require(maxAmountInTokensWithDecimals > 100 * 10**6 * 10**9, "Cannot set transaction amount less than 0.1 percent of initial Total Supply!");
_maxTxAmount = maxAmountInTokensWithDecimals;
}
function enableTrading() public onlyOwner {
require(!_tradingEnabled, "Trading already enabled!");
_tradingEnabled = true;
}
function disableTrading() public onlyOwner {
require(_tradingEnabled, "Trading already disabled!");
_tradingEnabled = false;
}
function setinvestmentConverttoETH(bool _enabled) public onlyOwner {
_investmentConverttoETH = _enabled;
}
// Number of Tokens to Accrue before Selling To Add to Investment
function setnumTokensSwapToETHForInvestment(uint256 tokenAmount) external onlyOwner() {
_numTokensSwapToETHForInvestment = tokenAmount;
}
/**
* @dev Function to recover any ETH sent to Contract by Mistake.
*/
function recoverETHFromContract(uint256 weiAmount) external onlyOwner{
require(address(this).balance >= weiAmount, "insufficient ETH balance");
payable(owner()).transfer(weiAmount);
}
/**
* @dev Function to recover any ERC20 Tokens sent to Contract by Mistake.
*/
function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner {
IERC20(_tokenAddr).transfer(_to, _amount);
}
}Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentConverttoETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentETHFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_investmentTokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentETHFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentTokenFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSwapToETHForInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"recoverETHFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setInvestmenETHFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setInvestmenTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setInvestmentETHWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setInvestmentTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmountInTokensWithDecimals","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"FeeAmount","type":"uint256"}],"name":"setReflectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setinvestmentConverttoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setnumTokensSwapToETHForInvestment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405268056bc75e2d63100000600981905562000020905f19620003a3565b6200002d905f19620003c3565b600a5560408051808201909152600781526613995e15195cdd60ca1b6020820152600d906200005d908262000487565b5060408051808201909152600781526613995e15195cdd60ca1b6020820152600e906200008b908262000487565b50600f805460ff191660091790556001601081905560118190556012555f601355601480546001600160a01b031990811673f18db3ff2595332e293cbbaec8cf380194d3dbf6908117909255601580549091169091179055601680546001600160b81b031916750100000000000000000000000000000000000000dead17905567016345785d8a0000601755668e1bc9bf0400006018553480156200012e575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54335f9081526003602090815260409182902092909255805163c45a015560e01b8152905173c532a74256d3db42d0bf7a0400fefdbad769400892839263c45a015592600480830193928290030181865afa158015620001d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000553565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000245573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026b919062000553565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002b6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002dc919062000553565b6001600160a01b0390811660a0528116608052600160065f620003065f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff1995861617905530815260069092529020805490911660011790556200034d3390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200039491815260200190565b60405180910390a35062000582565b5f82620003be57634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115620003e357634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200041257607f821691505b6020821081036200043157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200048257805f5260205f20601f840160051c810160208510156200045e5750805b601f840160051c820191505b818110156200047f575f81556001016200046a565b50505b505050565b81516001600160401b03811115620004a357620004a3620003e9565b620004bb81620004b48454620003fd565b8462000437565b602080601f831160018114620004f1575f8415620004d95750858301515b5f19600386901b1c1916600185901b1785556200054b565b5f85815260208120601f198616915b82811015620005215788860151825594840194600190910190840162000500565b50858210156200053f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000564575f80fd5b81516001600160a01b03811681146200057b575f80fd5b9392505050565b60805160a051612c6f620005c05f395f818161050701526118d501525f818161038801528181611b9e01528181611c550152611c940152612c6f5ff3fe6080604052600436106102dc575f3560e01c8063715018a611610189578063b8d36b50116100d8578063e547be6911610092578063ec28438a1161006d578063ec28438a146108bf578063f2fde38b146108de578063f7095945146108fd578063ffc786351461091d575f80fd5b8063e547be691461086c578063ea2f0b371461088b578063ec09e106146108aa575f80fd5b8063b8d36b5014610797578063c0b0fda2146107b6578063c9e9ed8b146107cb578063caf8ce3a146107ea578063da0257ba14610809578063dd62ed3e14610828575f80fd5b80638c8f8c0411610143578063a457c2d71161011e578063a457c2d714610725578063a9059cbb14610744578063adbede7214610763578063b7dd16ea14610777575f80fd5b80638c8f8c04146106d65780638da5cb5b146106f557806395d89b4114610711575f80fd5b8063715018a61461062f578063741af87f14610643578063761ebaac146106575780637d1db4a51461067657806388f820201461068b5780638a8c523c146106c2575f80fd5b80633950935111610245578063517a7950116101ff5780636953c15a116101da5780636953c15a146105bd5780637099ba4d146105d257806370a08231146105f157806370d5ae0514610610575f80fd5b8063517a79501461054857806352390c02146105675780635342acb414610586575f80fd5b806339509351146104855780633cfbf556146104a4578063437823ec146104b85780634549b039146104d757806349bd5a5e146104f65780634bf2c7c914610529575f80fd5b80631e826530116102965780631e826530146103de57806323b872dd146103fd5780632d8381191461041c578063313ce5671461043b578063317653e01461045c5780633206b4aa14610470575f80fd5b806306fdde03146102e7578063095ea7b3146103115780630fba1814146103405780631694505e1461037757806317700f01146103aa57806318160ddd146103c0575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb610931565b60405161030891906128d5565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612938565b6109c1565b6040519015158152602001610308565b34801561034b575f80fd5b5060155461035f906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b348015610382575f80fd5b5061035f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b5575f80fd5b506103be6109d7565b005b3480156103cb575f80fd5b506009545b604051908152602001610308565b3480156103e9575f80fd5b506103be6103f836600461296f565b610a71565b348015610408575f80fd5b5061033061041736600461298a565b610ab8565b348015610427575f80fd5b506103d06104363660046129c8565b610b1f565b348015610446575f80fd5b50600f5460405160ff9091168152602001610308565b348015610467575f80fd5b50600c546103d0565b34801561047b575f80fd5b506103d060105481565b348015610490575f80fd5b5061033061049f366004612938565b610ba1565b3480156104af575f80fd5b506018546103d0565b3480156104c3575f80fd5b506103be6104d23660046129df565b610bd6565b3480156104e2575f80fd5b506103d06104f13660046129fa565b610c22565b348015610501575f80fd5b5061035f7f000000000000000000000000000000000000000000000000000000000000000081565b348015610534575f80fd5b506103be6105433660046129c8565b610ca5565b348015610553575f80fd5b506103be6105623660046129df565b610cd3565b348015610572575f80fd5b506103be6105813660046129df565b610d1e565b348015610591575f80fd5b506103306105a03660046129df565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156105c8575f80fd5b506103d060125481565b3480156105dd575f80fd5b506103be6105ec3660046129c8565b610f34565b3480156105fc575f80fd5b506103d061060b3660046129df565b610f62565b34801561061b575f80fd5b5060165461035f906001600160a01b031681565b34801561063a575f80fd5b506103be610fbe565b34801561064e575f80fd5b506103be61102f565b348015610662575f80fd5b5060145461035f906001600160a01b031681565b348015610681575f80fd5b506103d060175481565b348015610696575f80fd5b506103306106a53660046129df565b6001600160a01b03165f9081526007602052604090205460ff1690565b3480156106cd575f80fd5b506103be61107a565b3480156106e1575f80fd5b506103be6106f036600461298a565b611112565b348015610700575f80fd5b505f546001600160a01b031661035f565b34801561071c575f80fd5b506102fb6111b1565b348015610730575f80fd5b5061033061073f366004612938565b6111c0565b34801561074f575f80fd5b5061033061075e366004612938565b61120d565b34801561076e575f80fd5b50600b546103d0565b348015610782575f80fd5b5060165461033090600160a81b900460ff1681565b3480156107a2575f80fd5b506103be6107b13660046129c8565b611219565b3480156107c1575f80fd5b506103d060115481565b3480156107d6575f80fd5b506103be6107e53660046129c8565b6112cc565b3480156107f5575f80fd5b506103be6108043660046129df565b6112fa565b348015610814575f80fd5b506103be6108233660046129c8565b611345565b348015610833575f80fd5b506103d0610842366004612a28565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610877575f80fd5b506103be6108863660046129c8565b611373565b348015610896575f80fd5b506103be6108a53660046129df565b6113a1565b3480156108b5575f80fd5b506103d060135481565b3480156108ca575f80fd5b506103be6108d93660046129c8565b6113ea565b3480156108e9575f80fd5b506103be6108f83660046129df565b6114aa565b348015610908575f80fd5b5060165461033090600160b01b900460ff1681565b348015610928575f80fd5b506103be611591565b6060600d805461094090612a54565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612a54565b80156109b75780601f1061098e576101008083540402835291602001916109b7565b820191905f5260205f20905b81548152906001019060200180831161099a57829003601f168201915b5050505050905090565b5f6109cd3384846115e2565b5060015b92915050565b5f546001600160a01b03163314610a095760405162461bcd60e51b8152600401610a0090612a8c565b60405180910390fd5b601654600160b01b900460ff16610a625760405162461bcd60e51b815260206004820152601960248201527f54726164696e6720616c72656164792064697361626c656421000000000000006044820152606401610a00565b6016805460ff60b01b19169055565b5f546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a0090612a8c565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f610ac4848484611706565b610b158433610b1085604051806060016040528060288152602001612bed602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190611944565b6115e2565b5060019392505050565b5f600a54821115610b855760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a00565b5f610b8e61197c565b9050610b9a838261199d565b9392505050565b335f8181526005602090815260408083206001600160a01b038716845290915281205490916109cd918590610b1090866119de565b5f546001600160a01b03163314610bff5760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b5f600954831115610c755760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a00565b81610c8e575f610c8484611a3c565b5191506109d19050565b5f610c9884611a3c565b6020015191506109d19050565b5f546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610a0090612a8c565b601155565b5f546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610a0090612a8c565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610d475760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610dbe5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b6064820152608401610a00565b6001600160a01b0381165f9081526007602052604090205460ff1615610e265760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c7265616479206578636c7564656400000000000000006044820152606401610a00565b600854606411610e785760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e67000000000000006044820152606401610a00565b6001600160a01b0381165f9081526003602052604090205415610ecf576001600160a01b0381165f90815260036020526040902054610eb690610b1f565b6001600160a01b0382165f908152600460205260409020555b6001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b5f546001600160a01b03163314610f5d5760405162461bcd60e51b8152600401610a0090612a8c565b601355565b6001600160a01b0381165f9081526007602052604081205460ff1615610f9d57506001600160a01b03165f9081526004602052604090205490565b6001600160a01b0382165f908152600360205260409020546109d190610b1f565b5f546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610a0090612a8c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146110585760405162461bcd60e51b8152600401610a0090612a8c565b5f6010819055601181905560128190556013556016805460ff60a81b19169055565b5f546001600160a01b031633146110a35760405162461bcd60e51b8152600401610a0090612a8c565b601654600160b01b900460ff16156110fd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a00565b6016805460ff60b01b1916600160b01b179055565b5f546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610a0090612a8c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab9190612ac1565b50505050565b6060600e805461094090612a54565b5f6109cd3384610b1085604051806060016040528060258152602001612c1560259139335f9081526005602090815260408083206001600160a01b038d1684529091529020549190611944565b5f6109cd338484611706565b5f546001600160a01b031633146112425760405162461bcd60e51b8152600401610a0090612a8c565b804710156112925760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610a00565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156112c8573d5f803e3d5ffd5b5050565b5f546001600160a01b031633146112f55760405162461bcd60e51b8152600401610a0090612a8c565b601255565b5f546001600160a01b031633146113235760405162461bcd60e51b8152600401610a0090612a8c565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610a0090612a8c565b601855565b5f546001600160a01b0316331461139c5760405162461bcd60e51b8152600401610a0090612a8c565b601055565b5f546001600160a01b031633146113ca5760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b03165f908152600660205260409020805460ff19169055565b5f546001600160a01b031633146114135760405162461bcd60e51b8152600401610a0090612a8c565b67016345785d8a000081116114a55760405162461bcd60e51b815260206004820152604c60248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560448201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460648201526b6f74616c20537570706c792160a01b608482015260a401610a00565b601755565b5f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a00565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610a0090612a8c565b6001601081905560118190556012555f6013556016805460ff60a81b1916600160a81b179055565b6001600160a01b0383166116445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a00565b6001600160a01b0382166116a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a00565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661176a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a00565b6001600160a01b0382166117cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a00565b5f811161182d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a00565b601654600160b01b900460ff1615801561185457505f546001600160a01b03848116911614155b156118a15760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610a00565b5f6118ab30610f62565b601854909150811080159081906118cc5750601654600160a01b900460ff16155b801561190a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561191f5750601654600160a81b900460ff165b1561193257601854915061193282611b36565b61193d858585611d13565b5050505050565b5f81848411156119675760405162461bcd60e51b8152600401610a0091906128d5565b505f6119738486612af0565b95945050505050565b5f805f611987611fb9565b9092509050611996828261199d565b9250505090565b5f610b9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612128565b5f806119ea8385612b03565b905083811015610b9a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a00565b611a8e6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f611a9883612154565b90505f611ac0848360200151846040015185606001518660800151611abb61197c565b6121fa565b604080516101608101825282518152602080840151818301528284015182840152606080850151818401526080808601518185015260a09586015195840195909552865160c08401529086015160e083015291850151610100820152908401516101208201529201516101408301525092915050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b7c57611b7c612b16565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190612b2a565b81600181518110611c2f57611c2f612b16565b60200260200101906001600160a01b031690816001600160a01b031681525050611c7a307f0000000000000000000000000000000000000000000000000000000000000000846115e2565b60155460405163791ac94760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263791ac94792611cd59287925f92889291909116904290600401612b45565b5f604051808303815f87803b158015611cec575f80fd5b505af1158015611cfe573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6001600160a01b0383165f9081526006602052604090205460ff1680611d5057506001600160a01b0382165f9081526006602052604090205460ff165b15611d7257611d6d5f601081905560138190556011819055601255565b611dd5565b601754811115611dd55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a00565b5f611ddf82611a3c565b9050611df48160a001518261014001516122ba565b611e1c8160400151826060015183608001518460e00151856101000151866101200151612322565b6001600160a01b0384165f9081526007602052604090205460ff168015611e5b57506001600160a01b0383165f9081526007602052604090205460ff16155b15611e7157611e6c848484846124ae565b611f5f565b6001600160a01b0384165f9081526007602052604090205460ff16158015611eb057506001600160a01b0383165f9081526007602052604090205460ff165b15611ec057611e6c84848361259e565b6001600160a01b0384165f9081526007602052604090205460ff16158015611f0057506001600160a01b0383165f9081526007602052604090205460ff16155b15611f1057611e6c848483612689565b6001600160a01b0384165f9081526007602052604090205460ff168015611f4e57506001600160a01b0383165f9081526007602052604090205460ff165b15611f5f57611f5f848484846126e1565b6001600160a01b0384165f9081526006602052604090205460ff1680611f9c57506001600160a01b0383165f9081526006602052604090205460ff165b156111ab576111ab600160108190555f6013556012819055601155565b600a546009545f918291825b6008548110156120f8578260035f60088481548110611fe657611fe6612b16565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061204e57508160045f6008848154811061202857612028612b16565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561206457600a54600954945094505050509091565b6120a860035f6008848154811061207d5761207d612b16565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906127a4565b92506120ee60045f600884815481106120c3576120c3612b16565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906127a4565b9150600101611fc5565b50600954600a546121089161199d565b82101561211f57600a546009549350935050509091565b90939092509050565b5f81836121485760405162461bcd60e51b8152600401610a0091906128d5565b505f6119738486612bb6565b6121816040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b5f61218b836127e5565b90505f61219784612806565b90505f6121a385612821565b90505f6121af8661283c565b90505f6121ca826121c4858188818d8c6127a4565b906127a4565b6040805160a081018252918252602082019690965294850193909352606084019190915260808301525092915050565b61222d6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6122388884612857565b90505f6122458885612857565b90505f6122528886612857565b90505f61225f8887612857565b90505f61226c8888612857565b90505f612281836121c4868186818c8c6127a4565b6040805160c08101825297885260208801919091528601949094526060850192909252608084015260a083015250979650505050505050565b305f908152600360205260409020546122d390836119de565b305f9081526003602090815260408083209390935560079052205460ff16156112c857305f9081526004602052604090205461230f90826119de565b305f908152600460205260409020555050565b61233b856121c488600a546127a490919063ffffffff16565b600a55600b5461234b90846119de565b600b5560095461235b90836127a4565b600955600c5461236b90836119de565b600c556014546001600160a01b03165f9081526003602052604090205461239290856119de565b601480546001600160a01b039081165f90815260036020908152604080832095909555925490911681526007909152205460ff161561240a576014546001600160a01b03165f908152600460205260409020546123ef90826119de565b6014546001600160a01b03165f908152600460205260409020555b6016546001600160a01b03165f9081526003602052604090205461242e90866119de565b601680546001600160a01b039081165f90815260036020908152604080832095909555925490911681526007909152205460ff16156124a6576016546001600160a01b03165f9081526004602052604090205461248b90836119de565b6016546001600160a01b03165f908152600460205260409020555b505050505050565b6001600160a01b0384165f908152600460205260409020546124d090836127a4565b6001600160a01b0385165f908152600460209081526040808320939093558351600390915291902054612502916127a4565b6001600160a01b038086165f9081526003602090815260408083209490945584015191861681529190912054612537916119de565b6001600160a01b038085165f81815260036020526040908190209390935560c084015192519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161259091815260200190565b60405180910390a350505050565b80516001600160a01b0384165f908152600360205260409020546125c1916127a4565b6001600160a01b038085165f9081526003602090815260408083209490945560c085015192861682526004905291909120546125fc916119de565b6001600160a01b0383165f9081526004602090815260408083209390935583810151600390915291902054612630916119de565b6001600160a01b038084165f81815260036020526040908190209390935560c084015192519092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916116f991815260200190565b80516001600160a01b0384165f908152600360205260409020546126ac916127a4565b6001600160a01b038085165f9081526003602090815260408083209490945584015191851681529190912054612630916119de565b6001600160a01b0384165f9081526004602052604090205461270390836127a4565b6001600160a01b0385165f908152600460209081526040808320939093558351600390915291902054612735916127a4565b6001600160a01b038086165f9081526003602090815260408083209490945560c08501519287168252600490529190912054612770916119de565b6001600160a01b0384165f9081526004602090815260408083209390935583810151600390915291902054612537916119de565b5f610b9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611944565b5f6109d160646128006010548561285790919063ffffffff16565b9061199d565b5f6109d160646128006011548561285790919063ffffffff16565b5f6109d160646128006012548561285790919063ffffffff16565b5f6109d160646128006013548561285790919063ffffffff16565b5f825f0361286657505f6109d1565b5f6128718385612bd5565b90508261287e8583612bb6565b14610b9a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a00565b5f602080835283518060208501525f5b81811015612901578581018301518582016040015282016128e5565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612935575f80fd5b50565b5f8060408385031215612949575f80fd5b823561295481612921565b946020939093013593505050565b8015158114612935575f80fd5b5f6020828403121561297f575f80fd5b8135610b9a81612962565b5f805f6060848603121561299c575f80fd5b83356129a781612921565b925060208401356129b781612921565b929592945050506040919091013590565b5f602082840312156129d8575f80fd5b5035919050565b5f602082840312156129ef575f80fd5b8135610b9a81612921565b5f8060408385031215612a0b575f80fd5b823591506020830135612a1d81612962565b809150509250929050565b5f8060408385031215612a39575f80fd5b8235612a4481612921565b91506020830135612a1d81612921565b600181811c90821680612a6857607f821691505b602082108103612a8657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612ad1575f80fd5b8151610b9a81612962565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109d1576109d1612adc565b808201808211156109d1576109d1612adc565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612b3a575f80fd5b8151610b9a81612921565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612b955784516001600160a01b031683529383019391830191600101612b70565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612bd057634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176109d1576109d1612adc56fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220175f54dc554d569bc51e2381e8dbf9a6b1c36517423efe2814c4ee645158f89f64736f6c63430008170033
Deployed Bytecode
0x6080604052600436106102dc575f3560e01c8063715018a611610189578063b8d36b50116100d8578063e547be6911610092578063ec28438a1161006d578063ec28438a146108bf578063f2fde38b146108de578063f7095945146108fd578063ffc786351461091d575f80fd5b8063e547be691461086c578063ea2f0b371461088b578063ec09e106146108aa575f80fd5b8063b8d36b5014610797578063c0b0fda2146107b6578063c9e9ed8b146107cb578063caf8ce3a146107ea578063da0257ba14610809578063dd62ed3e14610828575f80fd5b80638c8f8c0411610143578063a457c2d71161011e578063a457c2d714610725578063a9059cbb14610744578063adbede7214610763578063b7dd16ea14610777575f80fd5b80638c8f8c04146106d65780638da5cb5b146106f557806395d89b4114610711575f80fd5b8063715018a61461062f578063741af87f14610643578063761ebaac146106575780637d1db4a51461067657806388f820201461068b5780638a8c523c146106c2575f80fd5b80633950935111610245578063517a7950116101ff5780636953c15a116101da5780636953c15a146105bd5780637099ba4d146105d257806370a08231146105f157806370d5ae0514610610575f80fd5b8063517a79501461054857806352390c02146105675780635342acb414610586575f80fd5b806339509351146104855780633cfbf556146104a4578063437823ec146104b85780634549b039146104d757806349bd5a5e146104f65780634bf2c7c914610529575f80fd5b80631e826530116102965780631e826530146103de57806323b872dd146103fd5780632d8381191461041c578063313ce5671461043b578063317653e01461045c5780633206b4aa14610470575f80fd5b806306fdde03146102e7578063095ea7b3146103115780630fba1814146103405780631694505e1461037757806317700f01146103aa57806318160ddd146103c0575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fb610931565b60405161030891906128d5565b60405180910390f35b34801561031c575f80fd5b5061033061032b366004612938565b6109c1565b6040519015158152602001610308565b34801561034b575f80fd5b5060155461035f906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b348015610382575f80fd5b5061035f7f000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad769400881565b3480156103b5575f80fd5b506103be6109d7565b005b3480156103cb575f80fd5b506009545b604051908152602001610308565b3480156103e9575f80fd5b506103be6103f836600461296f565b610a71565b348015610408575f80fd5b5061033061041736600461298a565b610ab8565b348015610427575f80fd5b506103d06104363660046129c8565b610b1f565b348015610446575f80fd5b50600f5460405160ff9091168152602001610308565b348015610467575f80fd5b50600c546103d0565b34801561047b575f80fd5b506103d060105481565b348015610490575f80fd5b5061033061049f366004612938565b610ba1565b3480156104af575f80fd5b506018546103d0565b3480156104c3575f80fd5b506103be6104d23660046129df565b610bd6565b3480156104e2575f80fd5b506103d06104f13660046129fa565b610c22565b348015610501575f80fd5b5061035f7f0000000000000000000000009dc295d14af3f325d75e3afdc72b8e50ee9fde0e81565b348015610534575f80fd5b506103be6105433660046129c8565b610ca5565b348015610553575f80fd5b506103be6105623660046129df565b610cd3565b348015610572575f80fd5b506103be6105813660046129df565b610d1e565b348015610591575f80fd5b506103306105a03660046129df565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156105c8575f80fd5b506103d060125481565b3480156105dd575f80fd5b506103be6105ec3660046129c8565b610f34565b3480156105fc575f80fd5b506103d061060b3660046129df565b610f62565b34801561061b575f80fd5b5060165461035f906001600160a01b031681565b34801561063a575f80fd5b506103be610fbe565b34801561064e575f80fd5b506103be61102f565b348015610662575f80fd5b5060145461035f906001600160a01b031681565b348015610681575f80fd5b506103d060175481565b348015610696575f80fd5b506103306106a53660046129df565b6001600160a01b03165f9081526007602052604090205460ff1690565b3480156106cd575f80fd5b506103be61107a565b3480156106e1575f80fd5b506103be6106f036600461298a565b611112565b348015610700575f80fd5b505f546001600160a01b031661035f565b34801561071c575f80fd5b506102fb6111b1565b348015610730575f80fd5b5061033061073f366004612938565b6111c0565b34801561074f575f80fd5b5061033061075e366004612938565b61120d565b34801561076e575f80fd5b50600b546103d0565b348015610782575f80fd5b5060165461033090600160a81b900460ff1681565b3480156107a2575f80fd5b506103be6107b13660046129c8565b611219565b3480156107c1575f80fd5b506103d060115481565b3480156107d6575f80fd5b506103be6107e53660046129c8565b6112cc565b3480156107f5575f80fd5b506103be6108043660046129df565b6112fa565b348015610814575f80fd5b506103be6108233660046129c8565b611345565b348015610833575f80fd5b506103d0610842366004612a28565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205490565b348015610877575f80fd5b506103be6108863660046129c8565b611373565b348015610896575f80fd5b506103be6108a53660046129df565b6113a1565b3480156108b5575f80fd5b506103d060135481565b3480156108ca575f80fd5b506103be6108d93660046129c8565b6113ea565b3480156108e9575f80fd5b506103be6108f83660046129df565b6114aa565b348015610908575f80fd5b5060165461033090600160b01b900460ff1681565b348015610928575f80fd5b506103be611591565b6060600d805461094090612a54565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90612a54565b80156109b75780601f1061098e576101008083540402835291602001916109b7565b820191905f5260205f20905b81548152906001019060200180831161099a57829003601f168201915b5050505050905090565b5f6109cd3384846115e2565b5060015b92915050565b5f546001600160a01b03163314610a095760405162461bcd60e51b8152600401610a0090612a8c565b60405180910390fd5b601654600160b01b900460ff16610a625760405162461bcd60e51b815260206004820152601960248201527f54726164696e6720616c72656164792064697361626c656421000000000000006044820152606401610a00565b6016805460ff60b01b19169055565b5f546001600160a01b03163314610a9a5760405162461bcd60e51b8152600401610a0090612a8c565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f610ac4848484611706565b610b158433610b1085604051806060016040528060288152602001612bed602891396001600160a01b038a165f9081526005602090815260408083203384529091529020549190611944565b6115e2565b5060019392505050565b5f600a54821115610b855760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a00565b5f610b8e61197c565b9050610b9a838261199d565b9392505050565b335f8181526005602090815260408083206001600160a01b038716845290915281205490916109cd918590610b1090866119de565b5f546001600160a01b03163314610bff5760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b03165f908152600660205260409020805460ff19166001179055565b5f600954831115610c755760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610a00565b81610c8e575f610c8484611a3c565b5191506109d19050565b5f610c9884611a3c565b6020015191506109d19050565b5f546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610a0090612a8c565b601155565b5f546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610a0090612a8c565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610d475760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d03610dbe5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b6064820152608401610a00565b6001600160a01b0381165f9081526007602052604090205460ff1615610e265760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c7265616479206578636c7564656400000000000000006044820152606401610a00565b600854606411610e785760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e67000000000000006044820152606401610a00565b6001600160a01b0381165f9081526003602052604090205415610ecf576001600160a01b0381165f90815260036020526040902054610eb690610b1f565b6001600160a01b0382165f908152600460205260409020555b6001600160a01b03165f818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b5f546001600160a01b03163314610f5d5760405162461bcd60e51b8152600401610a0090612a8c565b601355565b6001600160a01b0381165f9081526007602052604081205460ff1615610f9d57506001600160a01b03165f9081526004602052604090205490565b6001600160a01b0382165f908152600360205260409020546109d190610b1f565b5f546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610a0090612a8c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146110585760405162461bcd60e51b8152600401610a0090612a8c565b5f6010819055601181905560128190556013556016805460ff60a81b19169055565b5f546001600160a01b031633146110a35760405162461bcd60e51b8152600401610a0090612a8c565b601654600160b01b900460ff16156110fd5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a00565b6016805460ff60b01b1916600160b01b179055565b5f546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610a0090612a8c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab9190612ac1565b50505050565b6060600e805461094090612a54565b5f6109cd3384610b1085604051806060016040528060258152602001612c1560259139335f9081526005602090815260408083206001600160a01b038d1684529091529020549190611944565b5f6109cd338484611706565b5f546001600160a01b031633146112425760405162461bcd60e51b8152600401610a0090612a8c565b804710156112925760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610a00565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156112c8573d5f803e3d5ffd5b5050565b5f546001600160a01b031633146112f55760405162461bcd60e51b8152600401610a0090612a8c565b601255565b5f546001600160a01b031633146113235760405162461bcd60e51b8152600401610a0090612a8c565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610a0090612a8c565b601855565b5f546001600160a01b0316331461139c5760405162461bcd60e51b8152600401610a0090612a8c565b601055565b5f546001600160a01b031633146113ca5760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b03165f908152600660205260409020805460ff19169055565b5f546001600160a01b031633146114135760405162461bcd60e51b8152600401610a0090612a8c565b67016345785d8a000081116114a55760405162461bcd60e51b815260206004820152604c60248201527f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560448201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460648201526b6f74616c20537570706c792160a01b608482015260a401610a00565b601755565b5f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610a0090612a8c565b6001600160a01b0381166115385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a00565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610a0090612a8c565b6001601081905560118190556012555f6013556016805460ff60a81b1916600160a81b179055565b6001600160a01b0383166116445760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a00565b6001600160a01b0382166116a55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a00565b6001600160a01b038381165f8181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661176a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a00565b6001600160a01b0382166117cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a00565b5f811161182d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a00565b601654600160b01b900460ff1615801561185457505f546001600160a01b03848116911614155b156118a15760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206973206e6f7420656e61626c6564210000000000000000006044820152606401610a00565b5f6118ab30610f62565b601854909150811080159081906118cc5750601654600160a01b900460ff16155b801561190a57507f0000000000000000000000009dc295d14af3f325d75e3afdc72b8e50ee9fde0e6001600160a01b0316856001600160a01b031614155b801561191f5750601654600160a81b900460ff165b1561193257601854915061193282611b36565b61193d858585611d13565b5050505050565b5f81848411156119675760405162461bcd60e51b8152600401610a0091906128d5565b505f6119738486612af0565b95945050505050565b5f805f611987611fb9565b9092509050611996828261199d565b9250505090565b5f610b9a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612128565b5f806119ea8385612b03565b905083811015610b9a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a00565b611a8e6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f611a9883612154565b90505f611ac0848360200151846040015185606001518660800151611abb61197c565b6121fa565b604080516101608101825282518152602080840151818301528284015182840152606080850151818401526080808601518185015260a09586015195840195909552865160c08401529086015160e083015291850151610100820152908401516101208201529201516101408301525092915050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611b7c57611b7c612b16565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad76940086001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190612b2a565b81600181518110611c2f57611c2f612b16565b60200260200101906001600160a01b031690816001600160a01b031681525050611c7a307f000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad7694008846115e2565b60155460405163791ac94760e01b81526001600160a01b037f000000000000000000000000c532a74256d3db42d0bf7a0400fefdbad769400881169263791ac94792611cd59287925f92889291909116904290600401612b45565b5f604051808303815f87803b158015611cec575f80fd5b505af1158015611cfe573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6001600160a01b0383165f9081526006602052604090205460ff1680611d5057506001600160a01b0382165f9081526006602052604090205460ff165b15611d7257611d6d5f601081905560138190556011819055601255565b611dd5565b601754811115611dd55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a00565b5f611ddf82611a3c565b9050611df48160a001518261014001516122ba565b611e1c8160400151826060015183608001518460e00151856101000151866101200151612322565b6001600160a01b0384165f9081526007602052604090205460ff168015611e5b57506001600160a01b0383165f9081526007602052604090205460ff16155b15611e7157611e6c848484846124ae565b611f5f565b6001600160a01b0384165f9081526007602052604090205460ff16158015611eb057506001600160a01b0383165f9081526007602052604090205460ff165b15611ec057611e6c84848361259e565b6001600160a01b0384165f9081526007602052604090205460ff16158015611f0057506001600160a01b0383165f9081526007602052604090205460ff16155b15611f1057611e6c848483612689565b6001600160a01b0384165f9081526007602052604090205460ff168015611f4e57506001600160a01b0383165f9081526007602052604090205460ff165b15611f5f57611f5f848484846126e1565b6001600160a01b0384165f9081526006602052604090205460ff1680611f9c57506001600160a01b0383165f9081526006602052604090205460ff165b156111ab576111ab600160108190555f6013556012819055601155565b600a546009545f918291825b6008548110156120f8578260035f60088481548110611fe657611fe6612b16565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054118061204e57508160045f6008848154811061202857612028612b16565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561206457600a54600954945094505050509091565b6120a860035f6008848154811061207d5761207d612b16565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906127a4565b92506120ee60045f600884815481106120c3576120c3612b16565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906127a4565b9150600101611fc5565b50600954600a546121089161199d565b82101561211f57600a546009549350935050509091565b90939092509050565b5f81836121485760405162461bcd60e51b8152600401610a0091906128d5565b505f6119738486612bb6565b6121816040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b5f61218b836127e5565b90505f61219784612806565b90505f6121a385612821565b90505f6121af8661283c565b90505f6121ca826121c4858188818d8c6127a4565b906127a4565b6040805160a081018252918252602082019690965294850193909352606084019190915260808301525092915050565b61222d6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6122388884612857565b90505f6122458885612857565b90505f6122528886612857565b90505f61225f8887612857565b90505f61226c8888612857565b90505f612281836121c4868186818c8c6127a4565b6040805160c08101825297885260208801919091528601949094526060850192909252608084015260a083015250979650505050505050565b305f908152600360205260409020546122d390836119de565b305f9081526003602090815260408083209390935560079052205460ff16156112c857305f9081526004602052604090205461230f90826119de565b305f908152600460205260409020555050565b61233b856121c488600a546127a490919063ffffffff16565b600a55600b5461234b90846119de565b600b5560095461235b90836127a4565b600955600c5461236b90836119de565b600c556014546001600160a01b03165f9081526003602052604090205461239290856119de565b601480546001600160a01b039081165f90815260036020908152604080832095909555925490911681526007909152205460ff161561240a576014546001600160a01b03165f908152600460205260409020546123ef90826119de565b6014546001600160a01b03165f908152600460205260409020555b6016546001600160a01b03165f9081526003602052604090205461242e90866119de565b601680546001600160a01b039081165f90815260036020908152604080832095909555925490911681526007909152205460ff16156124a6576016546001600160a01b03165f9081526004602052604090205461248b90836119de565b6016546001600160a01b03165f908152600460205260409020555b505050505050565b6001600160a01b0384165f908152600460205260409020546124d090836127a4565b6001600160a01b0385165f908152600460209081526040808320939093558351600390915291902054612502916127a4565b6001600160a01b038086165f9081526003602090815260408083209490945584015191861681529190912054612537916119de565b6001600160a01b038085165f81815260036020526040908190209390935560c084015192519092918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161259091815260200190565b60405180910390a350505050565b80516001600160a01b0384165f908152600360205260409020546125c1916127a4565b6001600160a01b038085165f9081526003602090815260408083209490945560c085015192861682526004905291909120546125fc916119de565b6001600160a01b0383165f9081526004602090815260408083209390935583810151600390915291902054612630916119de565b6001600160a01b038084165f81815260036020526040908190209390935560c084015192519092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916116f991815260200190565b80516001600160a01b0384165f908152600360205260409020546126ac916127a4565b6001600160a01b038085165f9081526003602090815260408083209490945584015191851681529190912054612630916119de565b6001600160a01b0384165f9081526004602052604090205461270390836127a4565b6001600160a01b0385165f908152600460209081526040808320939093558351600390915291902054612735916127a4565b6001600160a01b038086165f9081526003602090815260408083209490945560c08501519287168252600490529190912054612770916119de565b6001600160a01b0384165f9081526004602090815260408083209390935583810151600390915291902054612537916119de565b5f610b9a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611944565b5f6109d160646128006010548561285790919063ffffffff16565b9061199d565b5f6109d160646128006011548561285790919063ffffffff16565b5f6109d160646128006012548561285790919063ffffffff16565b5f6109d160646128006013548561285790919063ffffffff16565b5f825f0361286657505f6109d1565b5f6128718385612bd5565b90508261287e8583612bb6565b14610b9a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a00565b5f602080835283518060208501525f5b81811015612901578581018301518582016040015282016128e5565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612935575f80fd5b50565b5f8060408385031215612949575f80fd5b823561295481612921565b946020939093013593505050565b8015158114612935575f80fd5b5f6020828403121561297f575f80fd5b8135610b9a81612962565b5f805f6060848603121561299c575f80fd5b83356129a781612921565b925060208401356129b781612921565b929592945050506040919091013590565b5f602082840312156129d8575f80fd5b5035919050565b5f602082840312156129ef575f80fd5b8135610b9a81612921565b5f8060408385031215612a0b575f80fd5b823591506020830135612a1d81612962565b809150509250929050565b5f8060408385031215612a39575f80fd5b8235612a4481612921565b91506020830135612a1d81612921565b600181811c90821680612a6857607f821691505b602082108103612a8657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612ad1575f80fd5b8151610b9a81612962565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109d1576109d1612adc565b808201808211156109d1576109d1612adc565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612b3a575f80fd5b8151610b9a81612921565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612b955784516001600160a01b031683529383019391830191600101612b70565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82612bd057634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176109d1576109d1612adc56fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220175f54dc554d569bc51e2381e8dbf9a6b1c36517423efe2814c4ee645158f89f64736f6c63430008170033
Deployed Bytecode Sourcemap
24813:20746:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28151:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29063:161;;;;;;;;;;-1:-1:-1;29063:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;29063:161:0;1023:187:1;26713:82:0;;;;;;;;;;-1:-1:-1;26713:82:0;;;;-1:-1:-1;;;;;26713:82:0;;;;;;-1:-1:-1;;;;;1379:32:1;;;1361:51;;1349:2;1334:18;26713:82:0;1215:203:1;26884:51:0;;;;;;;;;;;;;;;44467:149;;;;;;;;;;;;;:::i;:::-;;28428:95;;;;;;;;;;-1:-1:-1;28508:7:0;;28428:95;;;1804:25:1;;;1792:2;1777:18;28428:95:0;1658:177:1;44624:120:0;;;;;;;;;;-1:-1:-1;44624:120:0;;;;;:::i;:::-;;:::i;29232:313::-;;;;;;;;;;-1:-1:-1;29232:313:0;;;;;:::i;:::-;;:::i;31156:253::-;;;;;;;;;;-1:-1:-1;31156:253:0;;;;;:::i;:::-;;:::i;28337:83::-;;;;;;;;;;-1:-1:-1;28403:9:0;;28337:83;;28403:9;;;;2997:36:1;;2985:2;2970:18;28337:83:0;2855:184:1;30299:95:0;;;;;;;;;;-1:-1:-1;30372:14:0;;30299:95;;26452:33;;;;;;;;;;;;;;;;29553:218;;;;;;;;;;-1:-1:-1;29553:218:0;;;;;:::i;:::-;;:::i;30563:131::-;;;;;;;;;;-1:-1:-1;30654:32:0;;30563:131;;42577:111;;;;;;;;;;-1:-1:-1;42577:111:0;;;;;:::i;:::-;;:::i;30702:446::-;;;;;;;;;;-1:-1:-1;30702:446:0;;;;;:::i;:::-;;:::i;26942:38::-;;;;;;;;;;;;;;;43377:99;;;;;;;;;;-1:-1:-1;43377:99:0;;;;;:::i;:::-;;:::i;43869:129::-;;;;;;;;;;-1:-1:-1;43869:129:0;;;;;:::i;:::-;;:::i;31417:512::-;;;;;;;;;;-1:-1:-1;31417:512:0;;;;;:::i;:::-;;:::i;37131:123::-;;;;;;;;;;-1:-1:-1;37131:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;37219:27:0;37195:4;37219:27;;;:18;:27;;;;;;;;;37131:123;26530:38;;;;;;;;;;;;;;;;43612:116;;;;;;;;;;-1:-1:-1;43612:116:0;;;;;:::i;:::-;;:::i;28531:198::-;;;;;;;;;;-1:-1:-1;28531:198:0;;;;;:::i;:::-;;:::i;26802:71::-;;;;;;;;;;-1:-1:-1;26802:71:0;;;;-1:-1:-1;;;;;26802:71:0;;;16206:148;;;;;;;;;;;;;:::i;43035:215::-;;;;;;;;;;;;;:::i;26622:84::-;;;;;;;;;;-1:-1:-1;26622:84:0;;;;-1:-1:-1;;;;;26622:84:0;;;27125:49;;;;;;;;;;;;;;;;30056:120;;;;;;;;;;-1:-1:-1;30056:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30148:20:0;30124:4;30148:20;;;:11;:20;;;;;;;;;30056:120;44312:147;;;;;;;;;;;;;:::i;45387:167::-;;;;;;;;;;-1:-1:-1;45387:167:0;;;;;:::i;:::-;;:::i;15570:79::-;;;;;;;;;;-1:-1:-1;15608:7:0;15635:6;-1:-1:-1;;;;;15635:6:0;15570:79;;28242:87;;;;;;;;;;;;;:::i;29779:269::-;;;;;;;;;;-1:-1:-1;29779:269:0;;;;;:::i;:::-;;:::i;28737:167::-;;;;;;;;;;-1:-1:-1;28737:167:0;;;;;:::i;:::-;;:::i;30184:107::-;;;;;;;;;;-1:-1:-1;30263:20:0;;30184:107;;27028:42;;;;;;;;;;-1:-1:-1;27028:42:0;;;;-1:-1:-1;;;27028:42:0;;;;;;45070:206;;;;;;;;;;-1:-1:-1;45070:206:0;;;;;:::i;:::-;;:::i;26494:27::-;;;;;;;;;;;;;;;;43484:120;;;;;;;;;;-1:-1:-1;43484:120:0;;;;;:::i;:::-;;:::i;43736:125::-;;;;;;;;;;-1:-1:-1;43736:125:0;;;;;:::i;:::-;;:::i;44823:150::-;;;;;;;;;;-1:-1:-1;44823:150:0;;;;;:::i;:::-;;:::i;28912:143::-;;;;;;;;;;-1:-1:-1;28912:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29020:18:0;;;28993:7;29020:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28912:143;43258:111;;;;;;;;;;-1:-1:-1;43258:111:0;;;;;:::i;:::-;;:::i;42696:110::-;;;;;;;;;;-1:-1:-1;42696:110:0;;;;;:::i;:::-;;:::i;26577:36::-;;;;;;;;;;;;;;;;44006:298;;;;;;;;;;-1:-1:-1;44006:298:0;;;;;:::i;:::-;;:::i;16509:244::-;;;;;;;;;;-1:-1:-1;16509:244:0;;;;;:::i;:::-;;:::i;27077:35::-;;;;;;;;;;-1:-1:-1;27077:35:0;;;;-1:-1:-1;;;27077:35:0;;;;;;42814:213;;;;;;;;;;;;;:::i;28151:83::-;28188:13;28221:5;28214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28151:83;:::o;29063:161::-;29138:4;29155:39;8072:10;29178:7;29187:6;29155:8;:39::i;:::-;-1:-1:-1;29212:4:0;29063:161;;;;;:::o;44467:149::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;;;;;;;;;44529:15:::1;::::0;-1:-1:-1;;;44529:15:0;::::1;;;44521:53;;;::::0;-1:-1:-1;;;44521:53:0;;4951:2:1;44521:53:0::1;::::0;::::1;4933:21:1::0;4990:2;4970:18;;;4963:30;5029:27;5009:18;;;5002:55;5074:18;;44521:53:0::1;4749:349:1::0;44521:53:0::1;44585:15;:23:::0;;-1:-1:-1;;;;44585:23:0::1;::::0;;44467:149::o;44624:120::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;44702:23:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;44702:34:0::1;-1:-1:-1::0;;;;44702:34:0;;::::1;::::0;;;::::1;::::0;;44624:120::o;29232:313::-;29330:4;29347:36;29357:6;29365:9;29376:6;29347:9;:36::i;:::-;29394:121;29403:6;8072:10;29425:89;29463:6;29425:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29425:19:0;;;;;;:11;:19;;;;;;;;8072:10;29425:33;;;;;;;;;;:37;:89::i;:::-;29394:8;:121::i;:::-;-1:-1:-1;29533:4:0;29232:313;;;;;:::o;31156:253::-;31222:7;31261;;31250;:18;;31242:73;;;;-1:-1:-1;;;31242:73:0;;5305:2:1;31242:73:0;;;5287:21:1;5344:2;5324:18;;;5317:30;5383:34;5363:18;;;5356:62;-1:-1:-1;;;5434:18:1;;;5427:40;5484:19;;31242:73:0;5103:406:1;31242:73:0;31326:19;31349:10;:8;:10::i;:::-;31326:33;-1:-1:-1;31377:24:0;:7;31326:33;31377:11;:24::i;:::-;31370:31;31156:253;-1:-1:-1;;;31156:253:0:o;29553:218::-;8072:10;29641:4;29690:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29690:34:0;;;;;;;;;;29641:4;;29658:83;;29681:7;;29690:50;;29729:10;29690:38;:50::i;42577:111::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42646:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;42646:34:0::1;42676:4;42646:34;::::0;;42577:111::o;30702:446::-;30792:7;30831;;30820;:18;;30812:62;;;;-1:-1:-1;;;30812:62:0;;5716:2:1;30812:62:0;;;5698:21:1;5755:2;5735:18;;;5728:30;5794:33;5774:18;;;5767:61;5845:18;;30812:62:0;5514:355:1;30812:62:0;30890:17;30885:256;;30924:15;30942:19;30953:7;30942:10;:19::i;:::-;:27;;-1:-1:-1;30984:14:0;;-1:-1:-1;30984:14:0;30885:256;31031:23;31057:19;31068:7;31057:10;:19::i;:::-;:35;;;;-1:-1:-1;31107:22:0;;-1:-1:-1;31107:22:0;43377:99;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43448:8:::1;:20:::0;43377:99::o;43869:129::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43954:24:::1;:36:::0;;-1:-1:-1;;;;;;43954:36:0::1;-1:-1:-1::0;;;;;43954:36:0;;;::::1;::::0;;;::::1;::::0;;43869:129::o;31417:512::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31499:53:0;::::1;31510:42;31499:53:::0;31491:100:::1;;;::::0;-1:-1:-1;;;31491:100:0;;6076:2:1;31491:100:0::1;::::0;::::1;6058:21:1::0;6115:2;6095:18;;;6088:30;6154:34;6134:18;;;6127:62;-1:-1:-1;;;6205:18:1;;;6198:32;6247:19;;31491:100:0::1;5874:398:1::0;31491:100:0::1;-1:-1:-1::0;;;;;31611:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31610:21;31602:58;;;::::0;-1:-1:-1;;;31602:58:0;;6479:2:1;31602:58:0::1;::::0;::::1;6461:21:1::0;6518:2;6498:18;;;6491:30;6557:26;6537:18;;;6530:54;6601:18;;31602:58:0::1;6277:348:1::0;31602:58:0::1;31679:9;:16:::0;31698:3:::1;-1:-1:-1::0;31671:60:0::1;;;::::0;-1:-1:-1;;;31671:60:0;;6832:2:1;31671:60:0::1;::::0;::::1;6814:21:1::0;6871:2;6851:18;;;6844:30;6910:27;6890:18;;;6883:55;6955:18;;31671:60:0::1;6630:349:1::0;31671:60:0::1;-1:-1:-1::0;;;;;31745:16:0;::::1;31764:1;31745:16:::0;;;:7:::1;:16;::::0;;;;;:20;31742:108:::1;;-1:-1:-1::0;;;;;31821:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;31801:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31782:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31742:108:::1;-1:-1:-1::0;;;;;31860:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31860:27:0::1;31883:4;31860:27:::0;;::::1;::::0;;;31898:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31898:23:0::1;::::0;;::::1;::::0;;31417:512::o;43612:116::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43691:17:::1;:29:::0;43612:116::o;28531:198::-;-1:-1:-1;;;;;28621:20:0;;28597:7;28621:20;;;:11;:20;;;;;;;;28617:49;;;-1:-1:-1;;;;;;28650:16:0;;;;;:7;:16;;;;;;;28531:198::o;28617:49::-;-1:-1:-1;;;;;28704:16:0;;;;;;:7;:16;;;;;;28684:37;;:19;:37::i;16206:148::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;16313:1:::1;16297:6:::0;;16276:40:::1;::::0;-1:-1:-1;;;;;16297:6:0;;::::1;::::0;16276:40:::1;::::0;16313:1;;16276:40:::1;16344:1;16327:19:::0;;-1:-1:-1;;;;;;16327:19:0::1;::::0;;16206:148::o;43035:215::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43110:1:::1;43093:14;:18:::0;;;43122:8:::1;:12:::0;;;43145:19:::1;:23:::0;;;43179:17:::1;:21:::0;43211:23:::1;:31:::0;;-1:-1:-1;;;;43211:31:0::1;::::0;;43035:215::o;44312:147::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;44374:15:::1;::::0;-1:-1:-1;;;44374:15:0;::::1;;;44373:16;44365:53;;;::::0;-1:-1:-1;;;44365:53:0;;7186:2:1;44365:53:0::1;::::0;::::1;7168:21:1::0;7225:2;7205:18;;;7198:30;7264:26;7244:18;;;7237:54;7308:18;;44365:53:0::1;6984:348:1::0;44365:53:0::1;44429:15;:22:::0;;-1:-1:-1;;;;44429:22:0::1;-1:-1:-1::0;;;44429:22:0::1;::::0;;44312:147::o;45387:167::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;45505:41:::1;::::0;-1:-1:-1;;;45505:41:0;;-1:-1:-1;;;;;7529:32:1;;;45505:41:0::1;::::0;::::1;7511:51:1::0;7578:18;;;7571:34;;;45505:27:0;::::1;::::0;::::1;::::0;7484:18:1;;45505:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45387:167:::0;;;:::o;28242:87::-;28281:13;28314:7;28307:14;;;;;:::i;29779:269::-;29872:4;29889:129;8072:10;29912:7;29921:96;29960:15;29921:96;;;;;;;;;;;;;;;;;8072:10;29921:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29921:34:0;;;;;;;;;;;;:38;:96::i;28737:167::-;28815:4;28832:42;8072:10;28856:9;28867:6;28832:9;:42::i;45070:206::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;45183:9:::1;45158:21;:34;;45150:71;;;::::0;-1:-1:-1;;;45150:71:0;;8068:2:1;45150:71:0::1;::::0;::::1;8050:21:1::0;8107:2;8087:18;;;8080:30;8146:26;8126:18;;;8119:54;8190:18;;45150:71:0::1;7866:348:1::0;45150:71:0::1;15608:7:::0;15635:6;;45232:36:::1;::::0;-1:-1:-1;;;;;15635:6:0;;;;45232:36;::::1;;;::::0;45258:9;;45232:36;15608:7;45232:36;45258:9;15635:6;45232:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;45070:206:::0;:::o;43484:120::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43565:19:::1;:31:::0;43484:120::o;43736:125::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43819:22:::1;:34:::0;;-1:-1:-1;;;;;;43819:34:0::1;-1:-1:-1::0;;;;;43819:34:0;;;::::1;::::0;;;::::1;::::0;;43736:125::o;44823:150::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;44919:32:::1;:46:::0;44823:150::o;43258:111::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;43335:14:::1;:26:::0;43258:111::o;42696:110::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42763:27:0::1;42793:5;42763:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;42763:35:0::1;::::0;;42696:110::o;44006:298::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;44141:19:::1;44109:29;:51;44101:140;;;::::0;-1:-1:-1;;;44101:140:0;;8421:2:1;44101:140:0::1;::::0;::::1;8403:21:1::0;8460:2;8440:18;;;8433:30;8499:34;8479:18;;;8472:62;8570:34;8550:18;;;8543:62;-1:-1:-1;;;8621:19:1;;;8614:43;8674:19;;44101:140:0::1;8219:480:1::0;44101:140:0::1;44252:12;:44:::0;44006:298::o;16509:244::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16598:22:0;::::1;16590:73;;;::::0;-1:-1:-1;;;16590:73:0;;8906:2:1;16590:73:0::1;::::0;::::1;8888:21:1::0;8945:2;8925:18;;;8918:30;8984:34;8964:18;;;8957:62;-1:-1:-1;;;9035:18:1;;;9028:36;9081:19;;16590:73:0::1;8704:402:1::0;16590:73:0::1;16700:6;::::0;;16679:38:::1;::::0;-1:-1:-1;;;;;16679:38:0;;::::1;::::0;16700:6;::::1;::::0;16679:38:::1;::::0;::::1;16728:6;:17:::0;;-1:-1:-1;;;;;;16728:17:0::1;-1:-1:-1::0;;;;;16728:17:0;;;::::1;::::0;;;::::1;::::0;;16509:244::o;42814:213::-;15782:6;;-1:-1:-1;;;;;15782:6:0;8072:10;15782:22;15774:67;;;;-1:-1:-1;;;15774:67:0;;;;;;;:::i;:::-;42888:1:::1;42871:14;:18:::0;;;42900:8:::1;:12:::0;;;42923:19:::1;:23:::0;-1:-1:-1;42957:17:0::1;:21:::0;42989:23:::1;:30:::0;;-1:-1:-1;;;;42989:30:0::1;-1:-1:-1::0;;;42989:30:0::1;::::0;;42814:213::o;37262:335::-;-1:-1:-1;;;;;37355:19:0;;37347:68;;;;-1:-1:-1;;;37347:68:0;;9313:2:1;37347:68:0;;;9295:21:1;9352:2;9332:18;;;9325:30;9391:34;9371:18;;;9364:62;-1:-1:-1;;;9442:18:1;;;9435:34;9486:19;;37347:68:0;9111:400:1;37347:68:0;-1:-1:-1;;;;;37434:21:0;;37426:68;;;;-1:-1:-1;;;37426:68:0;;9718:2:1;37426:68:0;;;9700:21:1;9757:2;9737:18;;;9730:30;9796:34;9776:18;;;9769:62;-1:-1:-1;;;9847:18:1;;;9840:32;9889:19;;37426:68:0;9516:398:1;37426:68:0;-1:-1:-1;;;;;37505:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37557:32;;1804:25:1;;;37557:32:0;;1777:18:1;37557:32:0;;;;;;;;37262:335;;;:::o;37605:1495::-;-1:-1:-1;;;;;37727:18:0;;37719:68;;;;-1:-1:-1;;;37719:68:0;;10121:2:1;37719:68:0;;;10103:21:1;10160:2;10140:18;;;10133:30;10199:34;10179:18;;;10172:62;-1:-1:-1;;;10250:18:1;;;10243:35;10295:19;;37719:68:0;9919:401:1;37719:68:0;-1:-1:-1;;;;;37806:16:0;;37798:64;;;;-1:-1:-1;;;37798:64:0;;10527:2:1;37798:64:0;;;10509:21:1;10566:2;10546:18;;;10539:30;10605:34;10585:18;;;10578:62;-1:-1:-1;;;10656:18:1;;;10649:33;10699:19;;37798:64:0;10325:399:1;37798:64:0;37890:1;37881:6;:10;37873:64;;;;-1:-1:-1;;;37873:64:0;;10931:2:1;37873:64:0;;;10913:21:1;10970:2;10950:18;;;10943:30;11009:34;10989:18;;;10982:62;-1:-1:-1;;;11060:18:1;;;11053:39;11109:19;;37873:64:0;10729:405:1;37873:64:0;38040:15;;-1:-1:-1;;;38040:15:0;;;;38039:16;:35;;;;-1:-1:-1;15608:7:0;15635:6;-1:-1:-1;;;;;38059:15:0;;;15635:6;;38059:15;;38039:35;38036:100;;;38091:33;;-1:-1:-1;;;38091:33:0;;11341:2:1;38091:33:0;;;11323:21:1;11380:2;11360:18;;;11353:30;11419:25;11399:18;;;11392:53;11462:18;;38091:33:0;11139:347:1;38036:100:0;38441:28;38472:24;38490:4;38472:9;:24::i;:::-;38558:32;;38441:55;;-1:-1:-1;38534:56:0;;;;;;;38619;;-1:-1:-1;38656:19:0;;-1:-1:-1;;;38656:19:0;;;;38655:20;38619:56;:94;;;;;38700:13;-1:-1:-1;;;;;38692:21:0;:4;-1:-1:-1;;;;;38692:21:0;;;38619:94;:134;;;;-1:-1:-1;38730:23:0;;-1:-1:-1;;;38730:23:0;;;;38619:134;38601:381;;;38803:32;;38780:55;;38924:46;38949:20;38924:24;:46::i;:::-;39060:30;39075:4;39080:2;39083:6;39060:14;:30::i;:::-;37708:1392;;37605:1495;;;:::o;4386:192::-;4472:7;4508:12;4500:6;;;;4492:29;;;;-1:-1:-1;;;4492:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4532:9:0;4544:5;4548:1;4544;:5;:::i;:::-;4532:17;4386:192;-1:-1:-1;;;;;4386:192:0:o;35041:163::-;35082:7;35103:15;35120;35139:19;:17;:19::i;:::-;35102:56;;-1:-1:-1;35102:56:0;-1:-1:-1;35176:20:0;35102:56;;35176:11;:20::i;:::-;35169:27;;;;35041:163;:::o;5784:132::-;5842:7;5869:39;5873:1;5876;5869:39;;;;;;;;;;;;;;;;;:3;:39::i;3483:181::-;3541:7;;3573:5;3577:1;3573;:5;:::i;:::-;3561:17;;3602:1;3597;:6;;3589:46;;;;-1:-1:-1;;;3589:46:0;;12088:2:1;3589:46:0;;;12070:21:1;12127:2;12107:18;;;12100:30;12166:29;12146:18;;;12139:57;12213:18;;3589:46:0;11886:351:1;32929:703:0;32988:19;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32988:19:0;33020:24;33047:20;33059:7;33047:11;:20::i;:::-;33020:47;;33078:24;33105:114;33117:7;33126:3;:18;;;33146:3;:12;;;33160:3;:23;;;33185:3;:21;;;33208:10;:8;:10::i;:::-;33105:11;:114::i;:::-;33239:385;;;;;;;;33266:11;;33239:385;;;33292:19;;;;33239:385;;;;33326:18;;;;33239:385;;;;;33359:12;;;;33239:385;;;;;33386:23;;;;33239:385;;;;;33424:21;;;;33239:385;;;;;;;33460:19;;33239:385;;;;33494:18;;;;33239:385;;;;33527:12;;;;33239:385;;;;33554:23;;;;33239:385;;;;33592:21;;;33239:385;;;;-1:-1:-1;33239:385:0;32929:703;-1:-1:-1;;32929:703:0:o;39109:618::-;27362:19;:26;;-1:-1:-1;;;;27362:26:0;-1:-1:-1;;;27362:26:0;;;39279:16:::1;::::0;;39293:1:::1;39279:16:::0;;;;;::::1;::::0;;-1:-1:-1;;39279:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39279:16:0::1;39255:40;;39324:4;39306;39311:1;39306:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;39306:23:0::1;;;-1:-1:-1::0;;;;;39306:23:0::1;;;::::0;::::1;39350:15;-1:-1:-1::0;;;;;39350:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39340:4;39345:1;39340:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;39340:32:0::1;;;-1:-1:-1::0;;;;;39340:32:0::1;;;::::0;::::1;39385:62;39402:4;39417:15;39435:11;39385:8;:62::i;:::-;39656:22;::::0;39486:233:::1;::::0;-1:-1:-1;;;39486:233:0;;-1:-1:-1;;;;;39486:15:0::1;:66:::0;::::1;::::0;::::1;::::0;:233:::1;::::0;39567:11;;39593:1:::1;::::0;39637:4;;39656:22;;;::::1;::::0;39693:15:::1;::::0;39486:233:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27411:19:0;:27;;-1:-1:-1;;;;27411:27:0;;;-1:-1:-1;;;;39109:618:0:o;39808:1227::-;-1:-1:-1;;;;;39905:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;39935:29:0;;;;;;:18;:29;;;;;;;;39905:59;39902:220;;;39980:14;36858:1;36841:14;:18;;;36870:17;:21;;;36902:8;:12;;;36925:19;:23;36798:158;39980:14;39902:220;;;40053:12;;40043:6;:22;;40035:75;;;;-1:-1:-1;;;40035:75:0;;13949:2:1;40035:75:0;;;13931:21:1;13988:2;13968:18;;;13961:30;14027:34;14007:18;;;14000:62;-1:-1:-1;;;14078:18:1;;;14071:38;14126:19;;40035:75:0;13747:404:1;40035:75:0;40134:22;40159:18;40170:6;40159:10;:18::i;:::-;40134:43;;40188:65;40210:2;:20;;;40232:2;:20;;;40188:21;:65::i;:::-;40264:126;40279:2;:17;;;40298:2;:11;;;40311:2;:22;;;40335:2;:17;;;40354:2;:11;;;40367:2;:22;;;40264:14;:126::i;:::-;-1:-1:-1;;;;;40407:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40431:22:0;;;;;;:11;:22;;;;;;;;40430:23;40407:46;40403:520;;;40470:52;40492:6;40500:9;40511:6;40519:2;40470:21;:52::i;:::-;40403:520;;;-1:-1:-1;;;;;40545:19:0;;;;;;:11;:19;;;;;;;;40544:20;:46;;;;-1:-1:-1;;;;;;40568:22:0;;;;;;:11;:22;;;;;;;;40544:46;40540:383;;;40607:42;40627:6;40635:9;40646:2;40607:19;:42::i;40540:383::-;-1:-1:-1;;;;;40672:19:0;;;;;;:11;:19;;;;;;;;40671:20;:47;;;;-1:-1:-1;;;;;;40696:22:0;;;;;;:11;:22;;;;;;;;40695:23;40671:47;40667:256;;;40735:40;40753:6;40761:9;40772:2;40735:17;:40::i;40667:256::-;-1:-1:-1;;;;;40797:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40820:22:0;;;;;;:11;:22;;;;;;;;40797:45;40793:130;;;40859:52;40881:6;40889:9;40900:6;40908:2;40859:21;:52::i;:::-;-1:-1:-1;;;;;40938:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;40968:29:0;;;;;;:18;:29;;;;;;;;40938:59;40935:92;;;41012:15;37025:1;37008:14;:18;;;37057:1;37037:17;:21;37069:19;:23;;;37103:8;:12;36964:159;35212:555;35309:7;;35345;;35262;;;;;35363:289;35387:9;:16;35383:20;;35363:289;;;35453:7;35429;:21;35437:9;35447:1;35437:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35437:12:0;35429:21;;;;;;;;;;;;;:31;;:66;;;35488:7;35464;:21;35472:9;35482:1;35472:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35472:12:0;35464:21;;;;;;;;;;;;;:31;35429:66;35425:97;;;35505:7;;35514;;35497:25;;;;;;;35212:555;;:::o;35425:97::-;35547:34;35559:7;:21;35567:9;35577:1;35567:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35567:12:0;35559:21;;;;;;;;;;;;;35547:7;;:11;:34::i;:::-;35537:44;;35606:34;35618:7;:21;35626:9;35636:1;35626:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35626:12:0;35618:21;;;;;;;;;;;;;35606:7;;:11;:34::i;:::-;35596:44;-1:-1:-1;35405:3:0;;35363:289;;;-1:-1:-1;35688:7:0;;35676;;:20;;:11;:20::i;:::-;35666:7;:30;35662:61;;;35706:7;;35715;;35698:25;;;;;;35212:555;;:::o;35662:61::-;35742:7;;35751;;-1:-1:-1;35212:555:0;-1:-1:-1;35212:555:0:o;6412:278::-;6498:7;6533:12;6526:5;6518:28;;;;-1:-1:-1;;;6518:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6557:9:0;6569:5;6573:1;6569;:5;:::i;33640:602::-;33700:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33700:20:0;33733:22;33758:31;33781:7;33758:22;:31::i;:::-;33733:56;;33800:16;33819:25;33836:7;33819:16;:25::i;:::-;33800:44;;33855:27;33885:36;33913:7;33885:27;:36::i;:::-;33855:66;;33932:25;33960:34;33986:7;33960:25;:34::i;:::-;33932:62;-1:-1:-1;34005:23:0;34031:89;33932:62;34031:66;34077:19;34031:66;34063:8;34031:66;:7;34043:14;34031:11;:27::i;:::-;:31;;:41::i;:89::-;34138:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34138:96:0;33640:602;-1:-1:-1;;33640:602:0:o;34250:783::-;34429:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34429:20:0;34462:15;34480:24;:7;34492:11;34480;:24::i;:::-;34462:42;-1:-1:-1;34515:22:0;34540:31;:14;34559:11;34540:18;:31::i;:::-;34515:56;-1:-1:-1;34582:16:0;34601:25;:8;34614:11;34601:12;:25::i;:::-;34582:44;-1:-1:-1;34637:27:0;34667:36;:19;34691:11;34667:23;:36::i;:::-;34637:66;-1:-1:-1;34714:25:0;34742:34;:17;34764:11;34742:21;:34::i;:::-;34714:62;-1:-1:-1;34787:23:0;34813:89;34882:19;34813:64;34868:8;34813:64;34714:62;34813:64;:7;34825:14;34813:11;:27::i;:89::-;34920:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34920:105:0;34250:783;-1:-1:-1;;;;;;;34250:783:0:o;35775:307::-;35920:4;35904:22;;;;:7;:22;;;;;;:45;;35931:17;35904:26;:45::i;:::-;35895:4;35879:22;;;;:7;:22;;;;;;;;:70;;;;35963:11;:26;;;;;;35960:114;;;36045:4;36029:22;;;;:7;:22;;;;;;:45;;36056:17;36029:26;:45::i;:::-;36020:4;36004:22;;;;:7;:22;;;;;:70;35775:307;;:::o;32030:891::-;32225:41;32257:8;32225:27;32237:14;32225:7;;:11;;:27;;;;:::i;:41::-;32215:7;:51;32300:20;;:40;;32325:14;32300:24;:40::i;:::-;32277:20;:63;32361:7;;:21;;32373:8;32361:11;:21::i;:::-;32351:7;:31;32410:14;;:28;;32429:8;32410:18;:28::i;:::-;32393:14;:45;32495:24;;-1:-1:-1;;;;;32495:24:0;32487:33;;;;:7;:33;;;;;;:58;;32525:19;32487:37;:58::i;:::-;32459:24;;;-1:-1:-1;;;;;32459:24:0;;;32451:33;;;;:7;:33;;;;;;;;:94;;;;32572:24;;;;;32560:37;;:11;:37;;;;;;;32556:164;;;32658:24;;-1:-1:-1;;;;;32658:24:0;32650:33;;;;:7;:33;;;;;;:58;;32688:19;32650:37;:58::i;:::-;32622:24;;-1:-1:-1;;;;;32622:24:0;32614:33;;;;:7;:33;;;;;:94;32556:164;32763:11;;-1:-1:-1;;;;;32763:11:0;32755:20;;;;:7;:20;;;;;;:34;;32780:8;32755:24;:34::i;:::-;32740:11;;;-1:-1:-1;;;;;32740:11:0;;;32732:20;;;;:7;:20;;;;;;;;:57;;;;32816:11;;;;;32804:24;;:11;:24;;;;;;;32800:114;;;32876:11;;-1:-1:-1;;;;;32876:11:0;32868:20;;;;:7;:20;;;;;;:34;;32893:8;32868:24;:34::i;:::-;32853:11;;-1:-1:-1;;;;;32853:11:0;32845:20;;;;:7;:20;;;;;:57;32800:114;32030:891;;;;;;:::o;41733:377::-;-1:-1:-1;;;;;41877:15:0;;;;;;:7;:15;;;;;;:28;;41897:7;41877:19;:28::i;:::-;-1:-1:-1;;;;;41859:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41954:10;;41934:7;:15;;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41916:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;42020:18;;;41997;;;;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41976:18:0;;;;;;;:7;:18;;;;;;;:63;;;;42083:18;;;;42055:47;;41976:18;;42055:47;;;;;;;;1804:25:1;;1792:2;1777:18;;1658:177;42055:47:0;;;;;;;;41733:377;;;;:::o;41350:375::-;41495:10;;-1:-1:-1;;;;;41475:15:0;;41495:10;41475:15;;;:7;:15;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41457:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;41561:18;;;;41538;;;;;:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41517:18:0;;;;;;:7;:18;;;;;;;;:63;;;;41635:18;;;;41612:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;41591:18:0;;;;;;;:7;:18;;;;;;;:63;;;;41698:18;;;;41670:47;;41591:18;;41670:47;;;;;;;;1804:25:1;;1792:2;1777:18;;1658:177;41043:299:0;41186:10;;-1:-1:-1;;;;;41166:15:0;;41186:10;41166:15;;;:7;:15;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;41148:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;41252:18;;;41229;;;;;;;;;;:42;;:22;:42::i;42118:451::-;-1:-1:-1;;;;;42262:15:0;;;;;;:7;:15;;;;;;:28;;42282:7;42262:19;:28::i;:::-;-1:-1:-1;;;;;42244:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42339:10;;42319:7;:15;;;;;;;:31;;:19;:31::i;:::-;-1:-1:-1;;;;;42301:15:0;;;;;;;:7;:15;;;;;;;;:49;;;;42405:18;;;;42382;;;;;:7;:18;;;;;;;:42;;:22;:42::i;:::-;-1:-1:-1;;;;;42361:18:0;;;;;;:7;:18;;;;;;;;:63;;;;42479:18;;;;42456:7;:18;;;;;;;:42;;:22;:42::i;3947:136::-;4005:7;4032:43;4036:1;4039;4032:43;;;;;;;;;;;;;;;;;:3;:43::i;36090:168::-;36161:7;36188:62;36234:5;36188:27;36200:14;;36188:7;:11;;:27;;;;:::i;:::-;:31;;:62::i;36266:156::-;36331:7;36358:56;36398:5;36358:21;36370:8;;36358:7;:11;;:21;;;;:::i;36430:178::-;36506:7;36533:67;36584:5;36533:32;36545:19;;36533:7;:11;;:32;;;;:::i;36616:174::-;36690:7;36717:65;36766:5;36717:30;36729:17;;36717:7;:11;;:30;;;;:::i;4837:471::-;4895:7;5140:1;5145;5140:6;5136:47;;-1:-1:-1;5170:1:0;5163:8;;5136:47;5195:9;5207:5;5211:1;5207;:5;:::i;:::-;5195:17;-1:-1:-1;5240:1:0;5231:5;5235:1;5195:17;5231:5;:::i;:::-;:10;5223:56;;;;-1:-1:-1;;;5223:56:0;;14753:2:1;5223:56:0;;;14735:21:1;14792:2;14772:18;;;14765:30;14831:34;14811:18;;;14804:62;-1:-1:-1;;;14882:18:1;;;14875:31;14923:19;;5223:56:0;14551:397:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1840:118::-;1926:5;1919:13;1912:21;1905:5;1902:32;1892:60;;1948:1;1945;1938:12;1963:241;2019:6;2072:2;2060:9;2051:7;2047:23;2043:32;2040:52;;;2088:1;2085;2078:12;2040:52;2127:9;2114:23;2146:28;2168:5;2146:28;:::i;2209:456::-;2286:6;2294;2302;2355:2;2343:9;2334:7;2330:23;2326:32;2323:52;;;2371:1;2368;2361:12;2323:52;2410:9;2397:23;2429:31;2454:5;2429:31;:::i;:::-;2479:5;-1:-1:-1;2536:2:1;2521:18;;2508:32;2549:33;2508:32;2549:33;:::i;:::-;2209:456;;2601:7;;-1:-1:-1;;;2655:2:1;2640:18;;;;2627:32;;2209:456::o;2670:180::-;2729:6;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;-1:-1:-1;2821:23:1;;2670:180;-1:-1:-1;2670:180:1:o;3044:247::-;3103:6;3156:2;3144:9;3135:7;3131:23;3127:32;3124:52;;;3172:1;3169;3162:12;3124:52;3211:9;3198:23;3230:31;3255:5;3230:31;:::i;3296:309::-;3361:6;3369;3422:2;3410:9;3401:7;3397:23;3393:32;3390:52;;;3438:1;3435;3428:12;3390:52;3474:9;3461:23;3451:33;;3534:2;3523:9;3519:18;3506:32;3547:28;3569:5;3547:28;:::i;:::-;3594:5;3584:15;;;3296:309;;;;;:::o;3610:388::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3794:9;3781:23;3813:31;3838:5;3813:31;:::i;:::-;3863:5;-1:-1:-1;3920:2:1;3905:18;;3892:32;3933:33;3892:32;3933:33;:::i;4003:380::-;4082:1;4078:12;;;;4125;;;4146:61;;4200:4;4192:6;4188:17;4178:27;;4146:61;4253:2;4245:6;4242:14;4222:18;4219:38;4216:161;;4299:10;4294:3;4290:20;4287:1;4280:31;4334:4;4331:1;4324:15;4362:4;4359:1;4352:15;4216:161;;4003:380;;;:::o;4388:356::-;4590:2;4572:21;;;4609:18;;;4602:30;4668:34;4663:2;4648:18;;4641:62;4735:2;4720:18;;4388:356::o;7616:245::-;7683:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:52;;;7752:1;7749;7742:12;7704:52;7784:9;7778:16;7803:28;7825:5;7803:28;:::i;11491:127::-;11552:10;11547:3;11543:20;11540:1;11533:31;11583:4;11580:1;11573:15;11607:4;11604:1;11597:15;11623:128;11690:9;;;11711:11;;;11708:37;;;11725:18;;:::i;11756:125::-;11821:9;;;11842:10;;;11839:36;;;11855:18;;:::i;12374:127::-;12435:10;12430:3;12426:20;12423:1;12416:31;12466:4;12463:1;12456:15;12490:4;12487:1;12480:15;12506:251;12576:6;12629:2;12617:9;12608:7;12604:23;12600:32;12597:52;;;12645:1;12642;12635:12;12597:52;12677:9;12671:16;12696:31;12721:5;12696:31;:::i;12762:980::-;13024:4;13072:3;13061:9;13057:19;13103:6;13092:9;13085:25;13129:2;13167:6;13162:2;13151:9;13147:18;13140:34;13210:3;13205:2;13194:9;13190:18;13183:31;13234:6;13269;13263:13;13300:6;13292;13285:22;13338:3;13327:9;13323:19;13316:26;;13377:2;13369:6;13365:15;13351:29;;13398:1;13408:195;13422:6;13419:1;13416:13;13408:195;;;13487:13;;-1:-1:-1;;;;;13483:39:1;13471:52;;13578:15;;;;13543:12;;;;13519:1;13437:9;13408:195;;;-1:-1:-1;;;;;;;13659:32:1;;;;13654:2;13639:18;;13632:60;-1:-1:-1;;;13723:3:1;13708:19;13701:35;13620:3;12762:980;-1:-1:-1;;;12762:980:1:o;14156:217::-;14196:1;14222;14212:132;;14266:10;14261:3;14257:20;14254:1;14247:31;14301:4;14298:1;14291:15;14329:4;14326:1;14319:15;14212:132;-1:-1:-1;14358:9:1;;14156:217::o;14378:168::-;14451:9;;;14482;;14499:15;;;14493:22;;14479:37;14469:71;;14520:18;;:::i
Swarm Source
ipfs://175f54dc554d569bc51e2381e8dbf9a6b1c36517423efe2814c4ee645158f89f
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.