Source Code
Overview
MON Balance
MON Value
$0.00Loading...
Loading
Contract Name:
KewiTokenFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-12-06
*/
/**
██╗░░██╗███████╗░██╗░░░░░░░██╗██╗ ██╗░░░░░░█████╗░██╗░░░██╗███╗░░██╗░█████╗░██╗░░██╗██████╗░░█████╗░██████╗░
██║░██╔╝██╔════╝░██║░░██╗░░██║██║ ██║░░░░░██╔══██╗██║░░░██║████╗░██║██╔══██╗██║░░██║██╔══██╗██╔══██╗██╔══██╗
█████═╝░█████╗░░░╚██╗████╗██╔╝██║ ██║░░░░░███████║██║░░░██║██╔██╗██║██║░░╚═╝███████║██████╔╝███████║██║░░██║
██╔═██╗░██╔══╝░░░░████╔═████║░██║ ██║░░░░░██╔══██║██║░░░██║██║╚████║██║░░██╗██╔══██║██╔═══╝░██╔══██║██║░░██║
██║░╚██╗███████╗░░╚██╔╝░╚██╔╝░██║ ███████╗██║░░██║╚██████╔╝██║░╚███║╚█████╔╝██║░░██║██║░░░░░██║░░██║██████╔╝
╚═╝░░╚═╝╚══════╝░░░╚═╝░░░╚═╝░░╚═╝ ╚══════╝╚═╝░░╚═╝░╚═════╝░╚═╝░░╚══╝░╚════╝░╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚═════╝░
// Website: https://kewi.io
// Telegram: https://t.me/KewiLabs
// Twitter: https://x.com/KewiLabs
*/
// SPDX-License-Identifier: MIT
// File: Token.sol
pragma solidity ^0.8.24;
/// @title Meme Token used by TokenFactory bonding curve + Uniswap launch
/// @notice Minimal ERC20 with controlled mint/burn by factory only and a hard maxSupply
contract Token {
// --- ERC20 storage ---
string public name;
string public symbol;
uint8 public constant decimals = 18;
uint256 public immutable maxSupply;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
// --- Access control ---
address public factory;
bool private factoryLocked; // once setFactory is called successfully, it locks
// --- Events (ERC20 standard + extras) ---
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event FactorySet(address indexed factory);
event Minted(address indexed to, uint256 amount);
event Burned(address indexed from, uint256 amount);
// --- Modifiers ---
modifier onlyFactory() {
require(msg.sender == factory, "Not factory");
_;
}
// --- Constructor ---
/// @param _name ERC20 name
/// @param _symbol ERC20 symbol
/// @param _maxSupply Maximum supply in raw units (18 decimals)
/// @param _initialLpSupply Amount to mint immediately to the factory (LP tokens)
constructor(
string memory _name,
string memory _symbol,
uint256 _maxSupply,
uint256 _initialLpSupply
) {
require(_maxSupply > 0, "maxSupply zero");
require(_initialLpSupply <= _maxSupply, "init > max");
name = _name;
symbol = _symbol;
maxSupply = _maxSupply;
// Mint initial LP supply to deployer (TokenFactory)
_mint(msg.sender, _initialLpSupply);
}
// ======================================================
// ERC20 PUBLIC VIEW
// ======================================================
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
// ======================================================
// ERC20 MUTATING
// ======================================================
function transfer(address to, uint256 amount) public returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
uint256 currentAllowance = _allowances[from][msg.sender];
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(from, msg.sender, currentAllowance - amount);
}
_transfer(from, to, amount);
return true;
}
// ======================================================
// FACTORY MANAGEMENT + BONDING CURVE API
// ======================================================
/// @notice One-time link between this token and its TokenFactory.
function setFactory(address _factory) external {
require(!factoryLocked, "Factory already set");
require(_factory != address(0), "Zero factory");
factory = _factory;
factoryLocked = true;
emit FactorySet(_factory);
}
/// @notice Mint new tokens to `to`.
/// @dev Only callable by the bonded curve / TokenFactory.
function mint(uint256 amount, address to) external onlyFactory {
_mint(to, amount);
emit Minted(to, amount);
}
/// @notice Burn tokens from `from`.
/// @dev Only callable by the TokenFactory on user sell.
function burn(uint256 amount, address from) external onlyFactory {
_burn(from, amount);
emit Burned(from, amount);
}
// ======================================================
// INTERNAL CORE LOGIC
// ======================================================
function _transfer(address from, address to, uint256 amount) internal {
require(from != address(0), "ERC20: transfer from zero");
require(to != address(0), "ERC20: transfer to zero");
uint256 fromBal = _balances[from];
require(fromBal >= amount, "ERC20: transfer > balance");
unchecked {
_balances[from] = fromBal - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function _mint(address to, uint256 amount) internal {
require(to != address(0), "ERC20: mint to zero");
require(totalSupply + amount <= maxSupply, "max supply exceeded");
totalSupply += amount;
_balances[to] += amount;
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal {
require(from != address(0), "ERC20: burn from zero");
uint256 fromBal = _balances[from];
require(fromBal >= amount, "ERC20: burn > balance");
unchecked {
_balances[from] = fromBal - amount;
}
totalSupply -= amount;
emit Transfer(from, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from zero");
require(spender != address(0), "ERC20: approve to zero");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}
//https://chatgpt.com/c/691efff4-198c-8322-9edd-e38c0628d8c3
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
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;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol
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;
}
// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol
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);
}
// File: BondingCurve.sol
pragma solidity ^0.8.24;
/// @title Meme Token Factory with Exponential Bonding Curve + Uniswap Launch
/// @notice Production-style version with 1% trading fee, listing fee, and safety hardening.
/// @dev IMPORTANT: For production, REMOVE withdrawFees() and only use withdrawProtocolFees().
contract KewiTokenFactory {
// --- Events ---
event MemeTokenCreated(
address indexed tokenAddress,
address indexed creator,
uint256 timestamp
);
event TokenBought(
address indexed tokenAddress,
address indexed buyer,
uint256 tokenQty,
uint256 totalPaid, // includes fee
uint256 timestamp
);
event TokenSold(
address indexed tokenAddress,
address indexed seller,
uint256 tokenQty,
uint256 netRefund, // after fee
uint256 timestamp
);
event TokenLaunched(
address indexed tokenAddress,
uint256 ethForLP,
uint256 listingFeeTaken,
uint256 timestamp
);
event ListingFeeUpdated(uint256 newListingFee);
// --- Structs ---
struct MemeToken {
string name;
string symbol;
string description;
string tokenImageUrl;
uint256 fundingRaised; // ETH reserved for LP (net of trading fees)
address tokenAddress;
address creatorAddress;
bool isLaunched;
}
// --- State ---
address public immutable owner;
address public immutable uniswapFactory;
address public immutable uniswapRouter;
address[] public memeTokenAddresses;
mapping(address => MemeToken) public addressToMemeToken;
mapping(address => uint256) public curveSupply; // raw units sold via curve (1e18-based)
// --- Fees ---
uint256 public constant MEMETOKEN_CREATION_FEE = 0.000001 ether;
uint256 public constant FEE_BPS = 100; // 1% in basis points
uint256 public constant BPS_DENOMINATOR = 10_000;
/// @notice Listing fee charged at launch, taken from fundingRaised and added to protocolFeeBalance.
uint256 public listingFee;
/// @notice All protocol fees accumulated (creation + trading + listing) withdrawable by owner.
uint256 public protocolFeeBalance;
// --- Tokenomics Constants ---
uint256 public constant DECIMALS = 10 ** 18;
uint256 public constant MAX_SUPPLY = 1_000_000 * DECIMALS;
uint256 public constant INIT_SUPPLY = (MAX_SUPPLY * 20) / 100; // 20% for LP, minted at token creation
// Bonding curve parameters (must be calibrated off-chain for your target market cap)
// uint256 public constant INITIAL_PRICE = 30_000 * 10 ** 9;
// uint256 public constant K = 8 * 10 ** 15; // curvature (Q18). LOWER THIS IN PRODUCTION.
// Bonding curve parameters (calibrated off-chain)
uint256 public constant INITIAL_PRICE = 991_370_064; // wei per token at s = 0 (~9.9137e-10 ETH)
uint256 public constant K = 4_900_862_993_591; // curvature, Q18-scaled
/// @notice ETH goal at which token graduates to Uniswap.
uint256 public constant MEMECOIN_FUNDING_GOAL = 0.01 ether;
// --- Reentrancy Guard ---
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
// Uniswap Sepolia
// address public constant UNISWAP_FACTORY = 0xF62c03E08ada871A0bEb309762E260a7a6a880E6;
// address public constant UNISWAP_ROUTER = 0xeE567Fe1712Faf6149d80dA1E6934E354124CfE3;
// --- Constructor ---
constructor(
address _uniswapFactory,
address _uniswapRouter,
uint256 _listingFee
) {
require(_uniswapFactory != address(0), "zero factory");
require(_uniswapRouter != address(0), "zero router");
owner = msg.sender;
uniswapFactory = _uniswapFactory;
uniswapRouter = _uniswapRouter;
listingFee = _listingFee;
_status = _NOT_ENTERED;
}
// --- Admin configuration ---
function setListingFee(uint256 _listingFee) external onlyOwner {
listingFee = _listingFee;
emit ListingFeeUpdated(_listingFee);
}
// --- Token Creation ---
function createMemeToken(
string memory name,
string memory symbol,
string memory imageUrl,
string memory description
) external payable nonReentrant returns (address) {
require(msg.value >= MEMETOKEN_CREATION_FEE, "Creation fee required");
// Creation fee is part of protocol fees
protocolFeeBalance += msg.value;
// Mint 20% LP supply to this factory; remaining 80% will be minted via bonding curve
Token token = new Token(name, symbol, MAX_SUPPLY, INIT_SUPPLY);
token.setFactory(address(this));
address tokenAddr = address(token);
memeTokenAddresses.push(tokenAddr);
addressToMemeToken[tokenAddr] = MemeToken({
name: name,
symbol: symbol,
description: description,
tokenImageUrl: imageUrl,
fundingRaised: 0,
tokenAddress: tokenAddr,
creatorAddress: msg.sender,
isLaunched: false
});
emit MemeTokenCreated(tokenAddr, msg.sender, block.timestamp);
return tokenAddr;
}
function getAllMemeTokens() external view returns (MemeToken[] memory) {
uint256 len = memeTokenAddresses.length;
MemeToken[] memory list = new MemeToken[](len);
for (uint256 i = 0; i < len; i++) {
list[i] = addressToMemeToken[memeTokenAddresses[i]];
}
return list;
}
// --- Bonding Curve Math ---
function calculateCost(
uint256 currentRaw,
uint256 amountRaw
) public pure returns (uint256) {
uint256 exponent1 = (K * (currentRaw + amountRaw)) / DECIMALS;
uint256 exponent0 = (K * currentRaw) / DECIMALS;
uint256 exp1 = exp(exponent1);
uint256 exp0 = exp(exponent0);
return (INITIAL_PRICE * (exp1 - exp0)) / K;
}
/// @notice Given `ethAmount` (total, including 1% fee) returns max whole tokens you can buy on the curve.
/// @dev Uses binary search and never reverts even if calculateCost would overflow for too-large mid.
function calculateTokenAmountFromEth(
address tokenAddr,
uint256 ethAmount
) external view returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Already launched");
uint256 currentRaw = curveSupply[tokenAddr];
uint256 availRaw = MAX_SUPPLY - INIT_SUPPLY - currentRaw;
uint256 maxTokens = availRaw / DECIMALS;
if (maxTokens == 0 || ethAmount == 0) {
return 0;
}
// Only (1 - fee%) of ethAmount actually goes to the curve
uint256 effectiveEth = (ethAmount * (BPS_DENOMINATOR - FEE_BPS)) /
BPS_DENOMINATOR;
uint256 low = 0;
uint256 high = maxTokens;
while (low < high) {
uint256 mid = (low + high + 1) / 2;
uint256 amountRaw = mid * DECIMALS;
(bool ok, bytes memory data) = address(this).staticcall(
abi.encodeWithSelector(
this.calculateCost.selector,
currentRaw,
amountRaw
)
);
if (ok) {
uint256 cost = abi.decode(data, (uint256));
if (cost <= effectiveEth) {
low = mid;
continue;
}
}
high = mid - 1;
}
return low;
}
function calculateRefund(
uint256 currentRaw,
uint256 amountRaw
) public pure returns (uint256) {
uint256 exponent1 = (K * currentRaw) / DECIMALS;
uint256 exponent0 = (K * (currentRaw - amountRaw)) / DECIMALS;
uint256 exp1 = exp(exponent1);
uint256 exp0 = exp(exponent0);
return (INITIAL_PRICE * (exp1 - exp0)) / K;
}
/// @dev Fixed-point exp with Q18 scaling: x is exponent * 1e18, result is e^(x/1e18) * 1e18.
/// MUST choose K and supply bounds so this does not overflow in practice.
function exp(uint256 x) internal pure returns (uint256) {
uint256 sum = DECIMALS; // 1.0
uint256 term = DECIMALS;
for (uint256 i = 1; i <= 20; i++) {
term = (term * x) / (uint256(i) * DECIMALS);
sum += term;
if (term < 1) break;
}
return sum;
}
// --- Pre-launch Buy & Sell ---
/// @notice Buy `tokenQty` whole tokens from the bonding curve for `tokenAddr`.
/// @dev msg.value must equal curve cost + 1% fee. Reverts if token already launched.
function buyMemeToken(
address tokenAddr,
uint256 tokenQty
) external payable nonReentrant returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Launched: use Uniswap");
Token token = Token(tokenAddr);
uint256 qtyRaw = tokenQty * DECIMALS;
uint256 currentRaw = curveSupply[tokenAddr];
uint256 available = MAX_SUPPLY - INIT_SUPPLY - currentRaw;
require(qtyRaw <= available, "Insufficient supply");
uint256 curveCost = calculateCost(currentRaw, qtyRaw);
uint256 fee = (curveCost * FEE_BPS) / BPS_DENOMINATOR;
uint256 total = curveCost + fee;
require(msg.value == total, "Incorrect ETH amount");
protocolFeeBalance += fee;
mt.fundingRaised += curveCost;
curveSupply[tokenAddr] = currentRaw + qtyRaw;
token.mint(qtyRaw, msg.sender);
emit TokenBought(
tokenAddr,
msg.sender,
tokenQty,
total,
block.timestamp
);
// Graduation condition (based on ETH earmarked for LP, not counting fees)
if (!mt.isLaunched && mt.fundingRaised >= MEMECOIN_FUNDING_GOAL) {
uint256 lpEth = mt.fundingRaised;
uint256 takenListingFee = 0;
if (listingFee > 0 && lpEth > listingFee) {
lpEth -= listingFee;
protocolFeeBalance += listingFee;
takenListingFee = listingFee;
}
mt.isLaunched = true;
mt.fundingRaised = 0;
_launchOnUniswap(tokenAddr, lpEth);
emit TokenLaunched(
tokenAddr,
lpEth,
takenListingFee,
block.timestamp
);
}
return total;
}
/// @notice Sell `tokenQty` whole tokens back to the bonding curve.
/// @dev Returns NET ETH refunded (after 1% fee). Reverts if already launched.
function sellMemeToken(
address tokenAddr,
uint256 tokenQty
) external nonReentrant returns (uint256) {
MemeToken storage mt = addressToMemeToken[tokenAddr];
require(
mt.tokenAddress == tokenAddr && tokenAddr != address(0),
"Unknown token"
);
require(!mt.isLaunched, "Launched: use Uniswap");
Token token = Token(tokenAddr);
uint256 qtyRaw = tokenQty * DECIMALS;
uint256 currentRaw = curveSupply[tokenAddr];
require(token.balanceOf(msg.sender) >= qtyRaw, "Insufficient balance");
require(currentRaw >= qtyRaw, "Curve supply too low");
uint256 refund = calculateRefund(currentRaw, qtyRaw);
require(mt.fundingRaised >= refund, "Insufficient curve ETH");
uint256 fee = (refund * FEE_BPS) / BPS_DENOMINATOR;
uint256 netRefund = refund - fee;
protocolFeeBalance += fee;
mt.fundingRaised -= refund;
curveSupply[tokenAddr] = currentRaw - qtyRaw;
token.burn(qtyRaw, msg.sender);
(bool success, ) = msg.sender.call{value: netRefund}("");
require(success, "ETH transfer failed");
emit TokenSold(
tokenAddr,
msg.sender,
tokenQty,
netRefund,
block.timestamp
);
return netRefund;
}
// --- Uniswap Launch Helpers ---
function _launchOnUniswap(address tokenAddr, uint256 ethAmount) internal {
require(ethAmount > 0, "No ETH for LP");
IUniswapV2Factory factory = IUniswapV2Factory(uniswapFactory);
IUniswapV2Router01 router = IUniswapV2Router01(uniswapRouter);
address weth = router.WETH();
address pair = factory.getPair(tokenAddr, weth);
if (pair == address(0)) {
pair = factory.createPair(tokenAddr, weth);
}
// Ensure we actually have INIT_SUPPLY tokens available for LP
require(
Token(tokenAddr).balanceOf(address(this)) >= INIT_SUPPLY,
"Insufficient LP tokens"
);
Token(tokenAddr).approve(address(router), INIT_SUPPLY);
(, , uint256 liquidity) = router.addLiquidityETH{value: ethAmount}(
tokenAddr,
INIT_SUPPLY,
INIT_SUPPLY, // min tokens
ethAmount, // min ETH
address(this),
block.timestamp
);
require(liquidity > 0, "No liquidity minted");
// Burn LP to lock liquidity
IUniswapV2Pair(pair).transfer(address(0), liquidity);
}
// --- Admin helpers ---
/// @notice Withdraw only accumulated protocol fees (creation, trading, listing).
function withdrawProtocolFees(
address payable to
) external onlyOwner nonReentrant {
require(to != address(0), "zero");
uint256 amount = protocolFeeBalance;
require(amount > 0, "no fees");
protocolFeeBalance = 0;
(bool success, ) = to.call{value: amount}("");
require(success, "ETH transfer failed");
}
/// @notice TESTING ONLY: withdraw ALL ETH from the contract (including LP ETH).
/// @dev DO NOT SHIP THIS IN PRODUCTION.
function withdrawFees(address payable to) external onlyOwner nonReentrant {
require(to != address(0), "zero");
uint256 bal = address(this).balance;
require(bal > 0, "no balance");
(bool success, ) = to.call{value: bal}("");
require(success, "ETH transfer failed");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_uniswapFactory","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"uint256","name":"_listingFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newListingFee","type":"uint256"}],"name":"ListingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"MemeTokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethForLP","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listingFeeTaken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"netRefund","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenSold","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INIT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"K","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEMECOIN_FUNDING_GOAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEMETOKEN_CREATION_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMemeToken","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"tokenImageUrl","type":"string"},{"internalType":"uint256","name":"fundingRaised","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"creatorAddress","type":"address"},{"internalType":"bool","name":"isLaunched","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"tokenQty","type":"uint256"}],"name":"buyMemeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentRaw","type":"uint256"},{"internalType":"uint256","name":"amountRaw","type":"uint256"}],"name":"calculateCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentRaw","type":"uint256"},{"internalType":"uint256","name":"amountRaw","type":"uint256"}],"name":"calculateRefund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateTokenAmountFromEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"imageUrl","type":"string"},{"internalType":"string","name":"description","type":"string"}],"name":"createMemeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"curveSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMemeTokens","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"tokenImageUrl","type":"string"},{"internalType":"uint256","name":"fundingRaised","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"creatorAddress","type":"address"},{"internalType":"bool","name":"isLaunched","type":"bool"}],"internalType":"struct KewiTokenFactory.MemeToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"memeTokenAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"tokenQty","type":"uint256"}],"name":"sellMemeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_listingFee","type":"uint256"}],"name":"setListingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60e060405234801562000010575f80fd5b5060405162003f6f38038062003f6f833981016040819052620000339162000105565b6001600160a01b0383166200007e5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f20666163746f727960a01b60448201526064015b60405180910390fd5b6001600160a01b038216620000c45760405162461bcd60e51b815260206004820152600b60248201526a3d32b937903937baba32b960a91b604482015260640162000075565b336080526001600160a01b0392831660a052911660c052600355600160055562000143565b80516001600160a01b038116811462000100575f80fd5b919050565b5f805f6060848603121562000118575f80fd5b6200012384620000e9565b92506200013360208501620000e9565b9150604084015190509250925092565b60805160a05160c051613dde620001915f395f81816103340152611fad01525f81816103820152611f8901525f81816103b701528181610897015281816109450152610adc0152613dde5ff3fe608060405260043610620001b7575f3560e01c80638da5cb5b11620000fa578063d65f284e1162000092578063e1a45218116200006a578063e1a4521814620004ff578063e38abd0f1462000516578063e823bfd5146200053a578063fb08d6c01462000551575f80fd5b8063d65f284e14620004a5578063d9972d5314620004bf578063dd5988cd14620004db575f80fd5b8063a932492f11620000d2578063a932492f146200042a578063bcfeed9a1462000445578063bf333f2c146200046b578063ce3946961462000481575f80fd5b80638da5cb5b14620003a4578063956cc85914620003d9578063977ccd5b14620003f0575f80fd5b80632d80caa5116200016e5780636a1b7ecc11620001465780636a1b7ecc146200030a578063735de9f714620003215780637c5e279514620003565780638bdb2afa146200036f575f80fd5b80632d80caa514620002b25780632e0f262514620002d657806332cb6b0c14620002f3575f80fd5b8063075bb17d14620001bb5780630a22d68c14620001ef578063131dbd09146200021557806313cb5ad6146200023b578063164e68de146200025f5780631eecf7881462000283575b5f80fd5b620001d2620001cc36600462002542565b62000575565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620001fb575f80fd5b506200020660045481565b604051908152602001620001e6565b34801562000221575f80fd5b506200023962000233366004620025f5565b6200088c565b005b34801562000247575f80fd5b50620001d262000259366004620025f5565b62000912565b3480156200026b575f80fd5b50620002396200027d36600462002625565b6200093a565b3480156200028f575f80fd5b5062000206620002a136600462002625565b60026020525f908152604090205481565b348015620002be575f80fd5b5062000239620002d036600462002625565b62000ad1565b348015620002e2575f80fd5b5062000206670de0b6b3a764000081565b348015620002ff575f80fd5b506200020662000bdf565b34801562000316575f80fd5b506200020660035481565b3480156200032d575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b34801562000362575f80fd5b5062000206633b171b5081565b3480156200037b575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b348015620003b0575f80fd5b50620001d27f000000000000000000000000000000000000000000000000000000000000000081565b348015620003e5575f80fd5b506200020662000bf9565b348015620003fc575f80fd5b50620004146200040e36600462002625565b62000c2b565b604051620001e69897969594939291906200269b565b34801562000436575f80fd5b50620002066504751232a4b781565b34801562000451575f80fd5b506200045c62000eb6565b604051620001e6919062002726565b34801562000477575f80fd5b5062000206606481565b3480156200048d575f80fd5b50620002066200049f36600462002832565b6200128a565b348015620004b1575f80fd5b506200020664e8d4a5100081565b348015620004cb575f80fd5b5062000206662386f26fc1000081565b348015620004e7575f80fd5b5062000206620004f936600462002853565b62001343565b3480156200050b575f80fd5b506200020661271081565b34801562000522575f80fd5b50620002066200053436600462002832565b6200176f565b620002066200054b36600462002853565b620017c2565b3480156200055d575f80fd5b50620002066200056f36600462002853565b62001c02565b5f600260055403620005a45760405162461bcd60e51b81526004016200059b9062002880565b60405180910390fd5b600260055564e8d4a51000341015620005f85760405162461bcd60e51b815260206004820152601560248201527410dc99585d1a5bdb88199959481c995c5d5a5c9959605a1b60448201526064016200059b565b3460045f8282546200060b9190620028cb565b909155505f905085856200062b670de0b6b3a7640000620f4240620028e1565b606462000644670de0b6b3a7640000620f4240620028e1565b62000651906014620028e1565b6200065d9190620028fb565b6040516200066b906200248f565b6200067a94939291906200291b565b604051809103905ff08015801562000694573d5f803e3d5ffd5b50604051630b768f0160e31b81523060048201529091506001600160a01b03821690635bb47808906024015f604051808303815f87803b158015620006d7575f80fd5b505af1158015620006ea573d5f803e3d5ffd5b50505f8054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390910180546001600160a01b0319166001600160a01b03871690811790915560408051610100810182528c815260208082018d90528183018b9052606082018c90526080820186905260a082018490523360c083015260e08201869052928552929091529091208151859450919250908190620007959082620029e1565b5060208201516001820190620007ac9082620029e1565b5060408201516002820190620007c39082620029e1565b5060608201516003820190620007da9082620029e1565b506080820151600482015560a08201516005820180546001600160a01b039283166001600160a01b031990911617905560c08301516006909201805460e0909401511515600160a01b026001600160a81b03199094169282169290921792909217905560405133918316907f096627c8a73b9cd80e060634e86d64ccb00710637ab5b294c82d1ce416a23c8d90620008759042815260200190565b60405180910390a360016005559695505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620008d75760405162461bcd60e51b81526004016200059b9062002aae565b60038190556040518181527f5fb4654f1efe30c6141eaa6855ffcb27e0b361d899b05e21b1a4d0b3e71e14db9060200160405180910390a150565b5f818154811062000921575f80fd5b5f918252602090912001546001600160a01b0316905081565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620009855760405162461bcd60e51b81526004016200059b9062002aae565b600260055403620009aa5760405162461bcd60e51b81526004016200059b9062002880565b60026005556001600160a01b038116620009f05760405162461bcd60e51b81526004016200059b906020808252600490820152637a65726f60e01b604082015260600190565b478062000a2d5760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b60448201526064016200059b565b5f826001600160a01b0316826040515b5f6040518083038185875af1925050503d805f811462000a79576040519150601f19603f3d011682016040523d82523d5f602084013e62000a7e565b606091505b505090508062000ac75760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059b565b5050600160055550565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161462000b1c5760405162461bcd60e51b81526004016200059b9062002aae565b60026005540362000b415760405162461bcd60e51b81526004016200059b9062002880565b60026005556001600160a01b03811662000b875760405162461bcd60e51b81526004016200059b906020808252600490820152637a65726f60e01b604082015260600190565b6004548062000bc35760405162461bcd60e51b81526020600482015260076024820152666e6f206665657360c81b60448201526064016200059b565b5f6004819055505f826001600160a01b03168260405162000a3d565b62000bf6670de0b6b3a7640000620f4240620028e1565b81565b606462000c12670de0b6b3a7640000620f4240620028e1565b62000c1f906014620028e1565b62000bf69190620028fb565b60016020525f908152604090208054819062000c479062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000c759062002957565b801562000cc45780601f1062000c9a5761010080835404028352916020019162000cc4565b820191905f5260205f20905b81548152906001019060200180831162000ca657829003601f168201915b50505050509080600101805462000cdb9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000d099062002957565b801562000d585780601f1062000d2e5761010080835404028352916020019162000d58565b820191905f5260205f20905b81548152906001019060200180831162000d3a57829003601f168201915b50505050509080600201805462000d6f9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000d9d9062002957565b801562000dec5780601f1062000dc25761010080835404028352916020019162000dec565b820191905f5260205f20905b81548152906001019060200180831162000dce57829003601f168201915b50505050509080600301805462000e039062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000e319062002957565b801562000e805780601f1062000e565761010080835404028352916020019162000e80565b820191905f5260205f20905b81548152906001019060200180831162000e6257829003601f168201915b5050505060048301546005840154600690940154929390926001600160a01b03918216925090811690600160a01b900460ff1688565b5f80546060918167ffffffffffffffff81111562000ed85762000ed86200249d565b60405190808252806020026020018201604052801562000f6457816020015b62000f50604051806101000160405280606081526020016060815260200160608152602001606081526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f151581525090565b81526020019060019003908162000ef75790505b5090505f5b82811015620012835760015f80838154811062000f8a5762000f8a62002ad1565b5f9182526020808320909101546001600160a01b0316835282019290925260409081019091208151610100810190925280548290829062000fcb9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000ff99062002957565b8015620010485780601f106200101e5761010080835404028352916020019162001048565b820191905f5260205f20905b8154815290600101906020018083116200102a57829003601f168201915b50505050508152602001600182018054620010639062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620010919062002957565b8015620010e05780601f10620010b657610100808354040283529160200191620010e0565b820191905f5260205f20905b815481529060010190602001808311620010c257829003601f168201915b50505050508152602001600282018054620010fb9062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620011299062002957565b8015620011785780601f106200114e5761010080835404028352916020019162001178565b820191905f5260205f20905b8154815290600101906020018083116200115a57829003601f168201915b50505050508152602001600382018054620011939062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c19062002957565b8015620012105780601f10620011e65761010080835404028352916020019162001210565b820191905f5260205f20905b815481529060010190602001808311620011f257829003601f168201915b50505091835250506004820154602082015260058201546001600160a01b0390811660408301526006909201549182166060820152600160a01b90910460ff16151560809091015282518390839081106200126f576200126f62002ad1565b602090810291909101015260010162000f69565b5092915050565b5f80670de0b6b3a7640000620012a18486620028cb565b620012b3906504751232a4b7620028e1565b620012bf9190620028fb565b90505f670de0b6b3a7640000620012dd866504751232a4b7620028e1565b620012e99190620028fb565b90505f620012f78362001ecb565b90505f620013058362001ecb565b90506504751232a4b76200131a828462002ae5565b6200132a90633b171b50620028e1565b620013369190620028fb565b9450505050505b92915050565b5f600260055403620013695760405162461bcd60e51b81526004016200059b9062002880565b600260059081556001600160a01b038085165f81815260016020526040902092830154909116148015620013a557506001600160a01b03841615155b620013c45760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff16156200141a5760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059b565b835f62001430670de0b6b3a764000086620028e1565b6001600160a01b038781165f90815260026020526040908190205490516370a0823160e01b81523360048201529293509183918516906370a0823190602401602060405180830381865afa1580156200148b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014b1919062002b22565b1015620014f85760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016200059b565b81811015620015415760405162461bcd60e51b8152602060048201526014602482015273437572766520737570706c7920746f6f206c6f7760601b60448201526064016200059b565b5f6200154e82846200176f565b905080856004015410156200159f5760405162461bcd60e51b8152602060048201526016602482015275092dce6eaccccd2c6d2cadce840c6eae4ecca408aa8960531b60448201526064016200059b565b5f612710620015b0606484620028e1565b620015bc9190620028fb565b90505f620015cb828462002ae5565b90508160045f828254620015e09190620028cb565b9250508190555082876004015f828254620015fc919062002ae5565b909155506200160e9050858562002ae5565b6001600160a01b038b81165f9081526002602052604090819020929092559051633f34d4cf60e21b8152600481018790523360248201529087169063fcd3533c906044015f604051808303815f87803b1580156200166a575f80fd5b505af11580156200167d573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f8114620016c2576040519150601f19603f3d011682016040523d82523d5f602084013e620016c7565b606091505b5050905080620017105760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059b565b604080518b8152602081018490524281830152905133916001600160a01b038e16917f9387a595ac4be9038bbb9751abad8baa3dcf219dd9e19abb81552bd521fe35469181900360600190a35060016005559998505050505050505050565b5f80670de0b6b3a76400006200178c856504751232a4b7620028e1565b620017989190620028fb565b90505f670de0b6b3a7640000620017b0858762002ae5565b620012dd906504751232a4b7620028e1565b5f600260055403620017e85760405162461bcd60e51b81526004016200059b9062002880565b600260059081556001600160a01b038085165f818152600160205260409020928301549091161480156200182457506001600160a01b03841615155b620018435760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff1615620018995760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059b565b835f620018af670de0b6b3a764000086620028e1565b6001600160a01b0387165f90815260026020526040812054919250816064620018e4670de0b6b3a7640000620f4240620028e1565b620018f1906014620028e1565b620018fd9190620028fb565b62001914670de0b6b3a7640000620f4240620028e1565b62001920919062002ae5565b6200192c919062002ae5565b905080831115620019765760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420737570706c7960681b60448201526064016200059b565b5f6200198383856200128a565b90505f61271062001996606484620028e1565b620019a29190620028fb565b90505f620019b18284620028cb565b9050803414620019fb5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b60448201526064016200059b565b8160045f82825462001a0e9190620028cb565b9250508190555082886004015f82825462001a2a9190620028cb565b9091555062001a3c90508686620028cb565b6001600160a01b038c81165f90815260026020526040908190209290925590516394bf804d60e01b815260048101889052336024820152908816906394bf804d906044015f604051808303815f87803b15801562001a98575f80fd5b505af115801562001aab573d5f803e3d5ffd5b5050604080518d815260208101859052428183015290513393506001600160a01b038f1692507f8692cf5ba66abd64f88cdc1ffa0ee9d9c21ee2d999322a20445ae32393394e3e9181900360600190a36006880154600160a01b900460ff1615801562001b235750662386f26fc10000886004015410155b1562001bef5760048801546003545f901580159062001b43575060035482115b1562001b7a5760035462001b58908362002ae5565b915060035460045f82825462001b6f9190620028cb565b909155505060035490505b60068a01805460ff60a01b1916600160a01b1790555f60048b015562001ba18d8362001f45565b6040805183815260208101839052428183015290516001600160a01b038f16917fc5f40890b27f261001f50fb37aefc207cb219df4346046729dd64b33f6be95cf919081900360600190a250505b60016005559a9950505050505050505050565b6001600160a01b038083165f818152600160205260408120600581015491939092911614801562001c3b57506001600160a01b03841615155b62001c5a5760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff161562001cab5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016200059b565b6001600160a01b0384165f908152600260205260408120549081606462001cde670de0b6b3a7640000620f4240620028e1565b62001ceb906014620028e1565b62001cf79190620028fb565b62001d0e670de0b6b3a7640000620f4240620028e1565b62001d1a919062002ae5565b62001d26919062002ae5565b90505f62001d3d670de0b6b3a764000083620028fb565b905080158062001d4b575085155b1562001d5e575f9450505050506200133d565b5f61271062001d6f60648262002ae5565b62001d7b9089620028e1565b62001d879190620028fb565b90505f825b8082101562001ebe575f600262001da48385620028cb565b62001db1906001620028cb565b62001dbd9190620028fb565b90505f62001dd4670de0b6b3a764000083620028e1565b60408051602481018b9052604480820184905282518083039091018152606490910182526020810180516001600160e01b031663671ca34b60e11b17905290519192505f918291309162001e29919062002b3a565b5f60405180830381855afa9150503d805f811462001e63576040519150601f19603f3d011682016040523d82523d5f602084013e62001e68565b606091505b5091509150811562001ea5575f8180602001905181019062001e8b919062002b22565b905087811162001ea357849650505050505062001d8c565b505b62001eb260018562002ae5565b94505050505062001d8c565b5098975050505050505050565b5f670de0b6b3a76400008060015b6014811162001f3c5762001ef6670de0b6b3a764000082620028e1565b62001f028684620028e1565b62001f0e9190620028fb565b915062001f1c8284620028cb565b92506001821062001f3c578062001f338162002b57565b91505062001ed9565b50909392505050565b5f811162001f865760405162461bcd60e51b815260206004820152600d60248201526c04e6f2045544820666f72204c5609c1b60448201526064016200059b565b5f7f000000000000000000000000000000000000000000000000000000000000000090505f7f000000000000000000000000000000000000000000000000000000000000000090505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200200c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002032919062002b72565b60405163e6a4390560e01b81526001600160a01b03878116600483015280831660248301529192505f9185169063e6a4390590604401602060405180830381865afa15801562002084573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020aa919062002b72565b90506001600160a01b03811662002132576040516364e329cb60e11b81526001600160a01b038781166004830152838116602483015285169063c9c65396906044016020604051808303815f875af115801562002109573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200212f919062002b72565b90505b60646200214b670de0b6b3a7640000620f4240620028e1565b62002158906014620028e1565b620021649190620028fb565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015620021a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021cd919062002b22565b1015620022165760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74204c5020746f6b656e7360501b60448201526064016200059b565b6001600160a01b03861663095ea7b38460646200223f670de0b6b3a7640000620f4240620028e1565b6200224c906014620028e1565b620022589190620028fb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015620022a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620022c7919062002b90565b505f6001600160a01b03841663f305d71987896064620022f3670de0b6b3a7640000620f4240620028e1565b62002300906014620028e1565b6200230c9190620028fb565b606462002325670de0b6b3a7640000620f4240620028e1565b62002332906014620028e1565b6200233e9190620028fb565b6040516001600160e01b031960e087901b1681526001600160a01b03909316600484015260248301919091526044820152606481018a90523060848201524260a482015260c40160606040518083038185885af1158015620023a2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190620023c9919062002bb1565b925050505f8111620024145760405162461bcd60e51b8152602060048201526013602482015272139bc81b1a5c5d5a591a5d1e481b5a5b9d1959606a1b60448201526064016200059b565b60405163a9059cbb60e01b81525f6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156200245f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002485919062002b90565b5050505050505050565b6111cb8062002bde83390190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620024c1575f80fd5b813567ffffffffffffffff80821115620024df57620024df6200249d565b604051601f8301601f19908116603f011681019082821181831017156200250a576200250a6200249d565b8160405283815286602085880101111562002523575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f806080858703121562002556575f80fd5b843567ffffffffffffffff808211156200256e575f80fd5b6200257c88838901620024b1565b9550602087013591508082111562002592575f80fd5b620025a088838901620024b1565b94506040870135915080821115620025b6575f80fd5b620025c488838901620024b1565b93506060870135915080821115620025da575f80fd5b50620025e987828801620024b1565b91505092959194509250565b5f6020828403121562002606575f80fd5b5035919050565b6001600160a01b038116811462002622575f80fd5b50565b5f6020828403121562002636575f80fd5b813562002643816200260d565b9392505050565b5f5b83811015620026665781810151838201526020016200264c565b50505f910152565b5f8151808452620026878160208601602086016200264a565b601f01601f19169290920160200192915050565b5f610100808352620026b08184018c6200266e565b90508281036020840152620026c6818b6200266e565b90508281036040840152620026dc818a6200266e565b90508281036060840152620026f281896200266e565b608084019790975250506001600160a01b0393841660a08201529190921660c082015290151560e090910152949350505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200282457603f198984030185528151610100815181865262002777828701826200266e565b915050888201518582038a8701526200279182826200266e565b9150508782015185820389870152620027ab82826200266e565b91505060608083015186830382880152620027c783826200266e565b92505050608080830151818701525060a080830151620027f1828801826001600160a01b03169052565b505060c0828101516001600160a01b03169086015260e0918201511515919094015293860193908601906001016200274d565b509098975050505050505050565b5f806040838503121562002844575f80fd5b50508035926020909101359150565b5f806040838503121562002865575f80fd5b823562002872816200260d565b946020939093013593505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156200133d576200133d620028b7565b80820281158282048414176200133d576200133d620028b7565b5f826200291657634e487b7160e01b5f52601260045260245ffd5b500490565b608081525f6200292f60808301876200266e565b82810360208401526200294381876200266e565b604084019590955250506060015292915050565b600181811c908216806200296c57607f821691505b6020821081036200298b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620029dc57805f5260205f20601f840160051c81016020851015620029b85750805b601f840160051c820191505b81811015620029d9575f8155600101620029c4565b50505b505050565b815167ffffffffffffffff811115620029fe57620029fe6200249d565b62002a168162002a0f845462002957565b8462002991565b602080601f83116001811462002a4c575f841562002a345750858301515b5f19600386901b1c1916600185901b17855562002aa6565b5f85815260208120601f198616915b8281101562002a7c5788860151825594840194600190910190840162002a5b565b508582101562002a9a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b818103818111156200133d576200133d620028b7565b6020808252600d908201526c2ab735b737bbb7103a37b5b2b760991b604082015260600190565b5f6020828403121562002b33575f80fd5b5051919050565b5f825162002b4d8184602087016200264a565b9190910192915050565b5f6001820162002b6b5762002b6b620028b7565b5060010190565b5f6020828403121562002b83575f80fd5b815162002643816200260d565b5f6020828403121562002ba1575f80fd5b8151801515811462002643575f80fd5b5f805f6060848603121562002bc4575f80fd5b835192506020840151915060408401519050925092509256fe60a060405234801562000010575f80fd5b50604051620011cb380380620011cb8339810160408190526200003391620002f6565b5f8211620000795760405162461bcd60e51b815260206004820152600e60248201526d6d6178537570706c79207a65726f60901b60448201526064015b60405180910390fd5b81811115620000b85760405162461bcd60e51b815260206004820152600a6024820152690d2dcd2e8407c40dac2f60b31b604482015260640162000070565b5f620000c58582620003f5565b506001620000d48482620003f5565b506080829052620000e63382620000f0565b50505050620004e7565b6001600160a01b038216620001485760405162461bcd60e51b815260206004820152601360248201527f45524332303a206d696e7420746f207a65726f00000000000000000000000000604482015260640162000070565b608051816002546200015b9190620004c1565b1115620001ab5760405162461bcd60e51b815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015260640162000070565b8060025f828254620001be9190620004c1565b90915550506001600160a01b0382165f9081526003602052604081208054839290620001ec908490620004c1565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000259575f80fd5b81516001600160401b038082111562000276576200027662000235565b604051601f8301601f19908116603f01168101908282118183101715620002a157620002a162000235565b8160405283815260209250866020858801011115620002be575f80fd5b5f91505b83821015620002e15785820183015181830184015290820190620002c2565b5f602085830101528094505050505092915050565b5f805f80608085870312156200030a575f80fd5b84516001600160401b038082111562000321575f80fd5b6200032f8883890162000249565b9550602087015191508082111562000345575f80fd5b50620003548782880162000249565b604087015160609097015195989097509350505050565b600181811c908216806200038057607f821691505b6020821081036200039f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f057805f5260205f20601f840160051c81016020851015620003cc5750805b601f840160051c820191505b81811015620003ed575f8155600101620003d8565b50505b505050565b81516001600160401b0381111562000411576200041162000235565b62000429816200042284546200036b565b84620003a5565b602080601f8311600181146200045f575f8415620004475750858301515b5f19600386901b1c1916600185901b178555620004b9565b5f85815260208120601f198616915b828110156200048f578886015182559484019460019091019084016200046e565b5085821015620004ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115620004e157634e487b7160e01b5f52601160045260245ffd5b92915050565b608051610cc4620005075f395f818161020901526108cd0152610cc45ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806394bf804d11610088578063c45a015511610063578063c45a0155146101d9578063d5abeb0114610204578063dd62ed3e1461022b578063fcd3533c14610263575f80fd5b806394bf804d146101ab57806395d89b41146101be578063a9059cbb146101c6575f80fd5b806323b872dd116100c357806323b872dd14610141578063313ce567146101545780635bb478081461016e57806370a0823114610183575f80fd5b806306fdde03146100e9578063095ea7b31461010757806318160ddd1461012a575b5f80fd5b6100f1610276565b6040516100fe9190610ae2565b60405180910390f35b61011a610115366004610b49565b610301565b60405190151581526020016100fe565b61013360025481565b6040519081526020016100fe565b61011a61014f366004610b71565b610317565b61015c601281565b60405160ff90911681526020016100fe565b61018161017c366004610baa565b6103b2565b005b610133610191366004610baa565b6001600160a01b03165f9081526003602052604090205490565b6101816101b9366004610bca565b610496565b6100f161052f565b61011a6101d4366004610b49565b61053c565b6005546101ec906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b610133610239366004610bf4565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b610181610271366004610bca565b610548565b5f805461028290610c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610c1c565b80156102f95780601f106102d0576101008083540402835291602001916102f9565b820191905f5260205f20905b8154815290600101906020018083116102dc57829003601f168201915b505050505081565b5f61030d3384846105d5565b5060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120548281101561038f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b61039c85338584036105d5565b6103a78585856106db565b506001949350505050565b600554600160a01b900460ff16156104025760405162461bcd60e51b8152602060048201526013602482015272119858dd1bdc9e48185b1c9958591e481cd95d606a1b6044820152606401610386565b6001600160a01b0381166104475760405162461bcd60e51b815260206004820152600c60248201526b5a65726f20666163746f727960a01b6044820152606401610386565b600580546001600160a81b0319166001600160a01b038316908117600160a01b179091556040517f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b1905f90a250565b6005546001600160a01b031633146104de5760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b6104e8818361087f565b806001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161052391815260200190565b60405180910390a25050565b6001805461028290610c1c565b5f61030d3384846106db565b6005546001600160a01b031633146105905760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b61059a81836109c4565b806001600160a01b03167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78360405161052391815260200190565b6001600160a01b03831661062b5760405162461bcd60e51b815260206004820152601860248201527f45524332303a20617070726f76652066726f6d207a65726f00000000000000006044820152606401610386565b6001600160a01b03821661067a5760405162461bcd60e51b815260206004820152601660248201527545524332303a20617070726f766520746f207a65726f60501b6044820152606401610386565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107315760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e736665722066726f6d207a65726f000000000000006044820152606401610386565b6001600160a01b0382166107875760405162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e7366657220746f207a65726f0000000000000000006044820152606401610386565b6001600160a01b0383165f90815260036020526040902054818110156107ef5760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e73666572203e2062616c616e6365000000000000006044820152606401610386565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290610825908490610c68565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087191815260200190565b60405180910390a350505050565b6001600160a01b0382166108cb5760405162461bcd60e51b815260206004820152601360248201527245524332303a206d696e7420746f207a65726f60681b6044820152606401610386565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108fa9190610c68565b111561093e5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610386565b8060025f82825461094f9190610c68565b90915550506001600160a01b0382165f908152600360205260408120805483929061097b908490610c68565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610a125760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e2066726f6d207a65726f60581b6044820152606401610386565b6001600160a01b0382165f9081526003602052604090205481811015610a725760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e203e2062616c616e636560581b6044820152606401610386565b6001600160a01b0383165f908152600360205260408120838303905560028054849290610aa0908490610c7b565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ce565b5f602080835283518060208501525f5b81811015610b0e57858101830151858201604001528201610af2565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b44575f80fd5b919050565b5f8060408385031215610b5a575f80fd5b610b6383610b2e565b946020939093013593505050565b5f805f60608486031215610b83575f80fd5b610b8c84610b2e565b9250610b9a60208501610b2e565b9150604084013590509250925092565b5f60208284031215610bba575f80fd5b610bc382610b2e565b9392505050565b5f8060408385031215610bdb575f80fd5b82359150610beb60208401610b2e565b90509250929050565b5f8060408385031215610c05575f80fd5b610c0e83610b2e565b9150610beb60208401610b2e565b600181811c90821680610c3057607f821691505b602082108103610c4e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561031157610311610c54565b8181038181111561031157610311610c5456fea264697066735822122095f97c776c5b082f905e1484d3ec0eadd65b5a0214f9b61d9a88c282606c208064736f6c63430008180033a26469706673582212209e76329aee158da492d1a0d77d42ae670e1bfb7e11ae7db01f1c4bcda17018c864736f6c63430008180033000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405260043610620001b7575f3560e01c80638da5cb5b11620000fa578063d65f284e1162000092578063e1a45218116200006a578063e1a4521814620004ff578063e38abd0f1462000516578063e823bfd5146200053a578063fb08d6c01462000551575f80fd5b8063d65f284e14620004a5578063d9972d5314620004bf578063dd5988cd14620004db575f80fd5b8063a932492f11620000d2578063a932492f146200042a578063bcfeed9a1462000445578063bf333f2c146200046b578063ce3946961462000481575f80fd5b80638da5cb5b14620003a4578063956cc85914620003d9578063977ccd5b14620003f0575f80fd5b80632d80caa5116200016e5780636a1b7ecc11620001465780636a1b7ecc146200030a578063735de9f714620003215780637c5e279514620003565780638bdb2afa146200036f575f80fd5b80632d80caa514620002b25780632e0f262514620002d657806332cb6b0c14620002f3575f80fd5b8063075bb17d14620001bb5780630a22d68c14620001ef578063131dbd09146200021557806313cb5ad6146200023b578063164e68de146200025f5780631eecf7881462000283575b5f80fd5b620001d2620001cc36600462002542565b62000575565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620001fb575f80fd5b506200020660045481565b604051908152602001620001e6565b34801562000221575f80fd5b506200023962000233366004620025f5565b6200088c565b005b34801562000247575f80fd5b50620001d262000259366004620025f5565b62000912565b3480156200026b575f80fd5b50620002396200027d36600462002625565b6200093a565b3480156200028f575f80fd5b5062000206620002a136600462002625565b60026020525f908152604090205481565b348015620002be575f80fd5b5062000239620002d036600462002625565b62000ad1565b348015620002e2575f80fd5b5062000206670de0b6b3a764000081565b348015620002ff575f80fd5b506200020662000bdf565b34801562000316575f80fd5b506200020660035481565b3480156200032d575f80fd5b50620001d27f000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c81565b34801562000362575f80fd5b5062000206633b171b5081565b3480156200037b575f80fd5b50620001d27f000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c6981565b348015620003b0575f80fd5b50620001d27f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b81565b348015620003e5575f80fd5b506200020662000bf9565b348015620003fc575f80fd5b50620004146200040e36600462002625565b62000c2b565b604051620001e69897969594939291906200269b565b34801562000436575f80fd5b50620002066504751232a4b781565b34801562000451575f80fd5b506200045c62000eb6565b604051620001e6919062002726565b34801562000477575f80fd5b5062000206606481565b3480156200048d575f80fd5b50620002066200049f36600462002832565b6200128a565b348015620004b1575f80fd5b506200020664e8d4a5100081565b348015620004cb575f80fd5b5062000206662386f26fc1000081565b348015620004e7575f80fd5b5062000206620004f936600462002853565b62001343565b3480156200050b575f80fd5b506200020661271081565b34801562000522575f80fd5b50620002066200053436600462002832565b6200176f565b620002066200054b36600462002853565b620017c2565b3480156200055d575f80fd5b50620002066200056f36600462002853565b62001c02565b5f600260055403620005a45760405162461bcd60e51b81526004016200059b9062002880565b60405180910390fd5b600260055564e8d4a51000341015620005f85760405162461bcd60e51b815260206004820152601560248201527410dc99585d1a5bdb88199959481c995c5d5a5c9959605a1b60448201526064016200059b565b3460045f8282546200060b9190620028cb565b909155505f905085856200062b670de0b6b3a7640000620f4240620028e1565b606462000644670de0b6b3a7640000620f4240620028e1565b62000651906014620028e1565b6200065d9190620028fb565b6040516200066b906200248f565b6200067a94939291906200291b565b604051809103905ff08015801562000694573d5f803e3d5ffd5b50604051630b768f0160e31b81523060048201529091506001600160a01b03821690635bb47808906024015f604051808303815f87803b158015620006d7575f80fd5b505af1158015620006ea573d5f803e3d5ffd5b50505f8054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390910180546001600160a01b0319166001600160a01b03871690811790915560408051610100810182528c815260208082018d90528183018b9052606082018c90526080820186905260a082018490523360c083015260e08201869052928552929091529091208151859450919250908190620007959082620029e1565b5060208201516001820190620007ac9082620029e1565b5060408201516002820190620007c39082620029e1565b5060608201516003820190620007da9082620029e1565b506080820151600482015560a08201516005820180546001600160a01b039283166001600160a01b031990911617905560c08301516006909201805460e0909401511515600160a01b026001600160a81b03199094169282169290921792909217905560405133918316907f096627c8a73b9cd80e060634e86d64ccb00710637ab5b294c82d1ce416a23c8d90620008759042815260200190565b60405180910390a360016005559695505050505050565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b1614620008d75760405162461bcd60e51b81526004016200059b9062002aae565b60038190556040518181527f5fb4654f1efe30c6141eaa6855ffcb27e0b361d899b05e21b1a4d0b3e71e14db9060200160405180910390a150565b5f818154811062000921575f80fd5b5f918252602090912001546001600160a01b0316905081565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b1614620009855760405162461bcd60e51b81526004016200059b9062002aae565b600260055403620009aa5760405162461bcd60e51b81526004016200059b9062002880565b60026005556001600160a01b038116620009f05760405162461bcd60e51b81526004016200059b906020808252600490820152637a65726f60e01b604082015260600190565b478062000a2d5760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b60448201526064016200059b565b5f826001600160a01b0316826040515b5f6040518083038185875af1925050503d805f811462000a79576040519150601f19603f3d011682016040523d82523d5f602084013e62000a7e565b606091505b505090508062000ac75760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059b565b5050600160055550565b336001600160a01b037f000000000000000000000000ab973dba7e466ad1dde704ee16bfe4d36d0a597b161462000b1c5760405162461bcd60e51b81526004016200059b9062002aae565b60026005540362000b415760405162461bcd60e51b81526004016200059b9062002880565b60026005556001600160a01b03811662000b875760405162461bcd60e51b81526004016200059b906020808252600490820152637a65726f60e01b604082015260600190565b6004548062000bc35760405162461bcd60e51b81526020600482015260076024820152666e6f206665657360c81b60448201526064016200059b565b5f6004819055505f826001600160a01b03168260405162000a3d565b62000bf6670de0b6b3a7640000620f4240620028e1565b81565b606462000c12670de0b6b3a7640000620f4240620028e1565b62000c1f906014620028e1565b62000bf69190620028fb565b60016020525f908152604090208054819062000c479062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000c759062002957565b801562000cc45780601f1062000c9a5761010080835404028352916020019162000cc4565b820191905f5260205f20905b81548152906001019060200180831162000ca657829003601f168201915b50505050509080600101805462000cdb9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000d099062002957565b801562000d585780601f1062000d2e5761010080835404028352916020019162000d58565b820191905f5260205f20905b81548152906001019060200180831162000d3a57829003601f168201915b50505050509080600201805462000d6f9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000d9d9062002957565b801562000dec5780601f1062000dc25761010080835404028352916020019162000dec565b820191905f5260205f20905b81548152906001019060200180831162000dce57829003601f168201915b50505050509080600301805462000e039062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000e319062002957565b801562000e805780601f1062000e565761010080835404028352916020019162000e80565b820191905f5260205f20905b81548152906001019060200180831162000e6257829003601f168201915b5050505060048301546005840154600690940154929390926001600160a01b03918216925090811690600160a01b900460ff1688565b5f80546060918167ffffffffffffffff81111562000ed85762000ed86200249d565b60405190808252806020026020018201604052801562000f6457816020015b62000f50604051806101000160405280606081526020016060815260200160608152602001606081526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f151581525090565b81526020019060019003908162000ef75790505b5090505f5b82811015620012835760015f80838154811062000f8a5762000f8a62002ad1565b5f9182526020808320909101546001600160a01b0316835282019290925260409081019091208151610100810190925280548290829062000fcb9062002957565b80601f016020809104026020016040519081016040528092919081815260200182805462000ff99062002957565b8015620010485780601f106200101e5761010080835404028352916020019162001048565b820191905f5260205f20905b8154815290600101906020018083116200102a57829003601f168201915b50505050508152602001600182018054620010639062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620010919062002957565b8015620010e05780601f10620010b657610100808354040283529160200191620010e0565b820191905f5260205f20905b815481529060010190602001808311620010c257829003601f168201915b50505050508152602001600282018054620010fb9062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620011299062002957565b8015620011785780601f106200114e5761010080835404028352916020019162001178565b820191905f5260205f20905b8154815290600101906020018083116200115a57829003601f168201915b50505050508152602001600382018054620011939062002957565b80601f0160208091040260200160405190810160405280929190818152602001828054620011c19062002957565b8015620012105780601f10620011e65761010080835404028352916020019162001210565b820191905f5260205f20905b815481529060010190602001808311620011f257829003601f168201915b50505091835250506004820154602082015260058201546001600160a01b0390811660408301526006909201549182166060820152600160a01b90910460ff16151560809091015282518390839081106200126f576200126f62002ad1565b602090810291909101015260010162000f69565b5092915050565b5f80670de0b6b3a7640000620012a18486620028cb565b620012b3906504751232a4b7620028e1565b620012bf9190620028fb565b90505f670de0b6b3a7640000620012dd866504751232a4b7620028e1565b620012e99190620028fb565b90505f620012f78362001ecb565b90505f620013058362001ecb565b90506504751232a4b76200131a828462002ae5565b6200132a90633b171b50620028e1565b620013369190620028fb565b9450505050505b92915050565b5f600260055403620013695760405162461bcd60e51b81526004016200059b9062002880565b600260059081556001600160a01b038085165f81815260016020526040902092830154909116148015620013a557506001600160a01b03841615155b620013c45760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff16156200141a5760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059b565b835f62001430670de0b6b3a764000086620028e1565b6001600160a01b038781165f90815260026020526040908190205490516370a0823160e01b81523360048201529293509183918516906370a0823190602401602060405180830381865afa1580156200148b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014b1919062002b22565b1015620014f85760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016200059b565b81811015620015415760405162461bcd60e51b8152602060048201526014602482015273437572766520737570706c7920746f6f206c6f7760601b60448201526064016200059b565b5f6200154e82846200176f565b905080856004015410156200159f5760405162461bcd60e51b8152602060048201526016602482015275092dce6eaccccd2c6d2cadce840c6eae4ecca408aa8960531b60448201526064016200059b565b5f612710620015b0606484620028e1565b620015bc9190620028fb565b90505f620015cb828462002ae5565b90508160045f828254620015e09190620028cb565b9250508190555082876004015f828254620015fc919062002ae5565b909155506200160e9050858562002ae5565b6001600160a01b038b81165f9081526002602052604090819020929092559051633f34d4cf60e21b8152600481018790523360248201529087169063fcd3533c906044015f604051808303815f87803b1580156200166a575f80fd5b505af11580156200167d573d5f803e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f8114620016c2576040519150601f19603f3d011682016040523d82523d5f602084013e620016c7565b606091505b5050905080620017105760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016200059b565b604080518b8152602081018490524281830152905133916001600160a01b038e16917f9387a595ac4be9038bbb9751abad8baa3dcf219dd9e19abb81552bd521fe35469181900360600190a35060016005559998505050505050505050565b5f80670de0b6b3a76400006200178c856504751232a4b7620028e1565b620017989190620028fb565b90505f670de0b6b3a7640000620017b0858762002ae5565b620012dd906504751232a4b7620028e1565b5f600260055403620017e85760405162461bcd60e51b81526004016200059b9062002880565b600260059081556001600160a01b038085165f818152600160205260409020928301549091161480156200182457506001600160a01b03841615155b620018435760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff1615620018995760405162461bcd60e51b815260206004820152601560248201527404c61756e636865643a2075736520556e697377617605c1b60448201526064016200059b565b835f620018af670de0b6b3a764000086620028e1565b6001600160a01b0387165f90815260026020526040812054919250816064620018e4670de0b6b3a7640000620f4240620028e1565b620018f1906014620028e1565b620018fd9190620028fb565b62001914670de0b6b3a7640000620f4240620028e1565b62001920919062002ae5565b6200192c919062002ae5565b905080831115620019765760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7420737570706c7960681b60448201526064016200059b565b5f6200198383856200128a565b90505f61271062001996606484620028e1565b620019a29190620028fb565b90505f620019b18284620028cb565b9050803414620019fb5760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b60448201526064016200059b565b8160045f82825462001a0e9190620028cb565b9250508190555082886004015f82825462001a2a9190620028cb565b9091555062001a3c90508686620028cb565b6001600160a01b038c81165f90815260026020526040908190209290925590516394bf804d60e01b815260048101889052336024820152908816906394bf804d906044015f604051808303815f87803b15801562001a98575f80fd5b505af115801562001aab573d5f803e3d5ffd5b5050604080518d815260208101859052428183015290513393506001600160a01b038f1692507f8692cf5ba66abd64f88cdc1ffa0ee9d9c21ee2d999322a20445ae32393394e3e9181900360600190a36006880154600160a01b900460ff1615801562001b235750662386f26fc10000886004015410155b1562001bef5760048801546003545f901580159062001b43575060035482115b1562001b7a5760035462001b58908362002ae5565b915060035460045f82825462001b6f9190620028cb565b909155505060035490505b60068a01805460ff60a01b1916600160a01b1790555f60048b015562001ba18d8362001f45565b6040805183815260208101839052428183015290516001600160a01b038f16917fc5f40890b27f261001f50fb37aefc207cb219df4346046729dd64b33f6be95cf919081900360600190a250505b60016005559a9950505050505050505050565b6001600160a01b038083165f818152600160205260408120600581015491939092911614801562001c3b57506001600160a01b03841615155b62001c5a5760405162461bcd60e51b81526004016200059b9062002afb565b6006810154600160a01b900460ff161562001cab5760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481b185d5b98da195960821b60448201526064016200059b565b6001600160a01b0384165f908152600260205260408120549081606462001cde670de0b6b3a7640000620f4240620028e1565b62001ceb906014620028e1565b62001cf79190620028fb565b62001d0e670de0b6b3a7640000620f4240620028e1565b62001d1a919062002ae5565b62001d26919062002ae5565b90505f62001d3d670de0b6b3a764000083620028fb565b905080158062001d4b575085155b1562001d5e575f9450505050506200133d565b5f61271062001d6f60648262002ae5565b62001d7b9089620028e1565b62001d879190620028fb565b90505f825b8082101562001ebe575f600262001da48385620028cb565b62001db1906001620028cb565b62001dbd9190620028fb565b90505f62001dd4670de0b6b3a764000083620028e1565b60408051602481018b9052604480820184905282518083039091018152606490910182526020810180516001600160e01b031663671ca34b60e11b17905290519192505f918291309162001e29919062002b3a565b5f60405180830381855afa9150503d805f811462001e63576040519150601f19603f3d011682016040523d82523d5f602084013e62001e68565b606091505b5091509150811562001ea5575f8180602001905181019062001e8b919062002b22565b905087811162001ea357849650505050505062001d8c565b505b62001eb260018562002ae5565b94505050505062001d8c565b5098975050505050505050565b5f670de0b6b3a76400008060015b6014811162001f3c5762001ef6670de0b6b3a764000082620028e1565b62001f028684620028e1565b62001f0e9190620028fb565b915062001f1c8284620028cb565b92506001821062001f3c578062001f338162002b57565b91505062001ed9565b50909392505050565b5f811162001f865760405162461bcd60e51b815260206004820152600d60248201526c04e6f2045544820666f72204c5609c1b60448201526064016200059b565b5f7f000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c6990505f7f000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c90505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200200c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002032919062002b72565b60405163e6a4390560e01b81526001600160a01b03878116600483015280831660248301529192505f9185169063e6a4390590604401602060405180830381865afa15801562002084573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020aa919062002b72565b90506001600160a01b03811662002132576040516364e329cb60e11b81526001600160a01b038781166004830152838116602483015285169063c9c65396906044016020604051808303815f875af115801562002109573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200212f919062002b72565b90505b60646200214b670de0b6b3a7640000620f4240620028e1565b62002158906014620028e1565b620021649190620028fb565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015620021a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021cd919062002b22565b1015620022165760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74204c5020746f6b656e7360501b60448201526064016200059b565b6001600160a01b03861663095ea7b38460646200223f670de0b6b3a7640000620f4240620028e1565b6200224c906014620028e1565b620022589190620028fb565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015620022a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620022c7919062002b90565b505f6001600160a01b03841663f305d71987896064620022f3670de0b6b3a7640000620f4240620028e1565b62002300906014620028e1565b6200230c9190620028fb565b606462002325670de0b6b3a7640000620f4240620028e1565b62002332906014620028e1565b6200233e9190620028fb565b6040516001600160e01b031960e087901b1681526001600160a01b03909316600484015260248301919091526044820152606481018a90523060848201524260a482015260c40160606040518083038185885af1158015620023a2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190620023c9919062002bb1565b925050505f8111620024145760405162461bcd60e51b8152602060048201526013602482015272139bc81b1a5c5d5a591a5d1e481b5a5b9d1959606a1b60448201526064016200059b565b60405163a9059cbb60e01b81525f6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156200245f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002485919062002b90565b5050505050505050565b6111cb8062002bde83390190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620024c1575f80fd5b813567ffffffffffffffff80821115620024df57620024df6200249d565b604051601f8301601f19908116603f011681019082821181831017156200250a576200250a6200249d565b8160405283815286602085880101111562002523575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f806080858703121562002556575f80fd5b843567ffffffffffffffff808211156200256e575f80fd5b6200257c88838901620024b1565b9550602087013591508082111562002592575f80fd5b620025a088838901620024b1565b94506040870135915080821115620025b6575f80fd5b620025c488838901620024b1565b93506060870135915080821115620025da575f80fd5b50620025e987828801620024b1565b91505092959194509250565b5f6020828403121562002606575f80fd5b5035919050565b6001600160a01b038116811462002622575f80fd5b50565b5f6020828403121562002636575f80fd5b813562002643816200260d565b9392505050565b5f5b83811015620026665781810151838201526020016200264c565b50505f910152565b5f8151808452620026878160208601602086016200264a565b601f01601f19169290920160200192915050565b5f610100808352620026b08184018c6200266e565b90508281036020840152620026c6818b6200266e565b90508281036040840152620026dc818a6200266e565b90508281036060840152620026f281896200266e565b608084019790975250506001600160a01b0393841660a08201529190921660c082015290151560e090910152949350505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200282457603f198984030185528151610100815181865262002777828701826200266e565b915050888201518582038a8701526200279182826200266e565b9150508782015185820389870152620027ab82826200266e565b91505060608083015186830382880152620027c783826200266e565b92505050608080830151818701525060a080830151620027f1828801826001600160a01b03169052565b505060c0828101516001600160a01b03169086015260e0918201511515919094015293860193908601906001016200274d565b509098975050505050505050565b5f806040838503121562002844575f80fd5b50508035926020909101359150565b5f806040838503121562002865575f80fd5b823562002872816200260d565b946020939093013593505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156200133d576200133d620028b7565b80820281158282048414176200133d576200133d620028b7565b5f826200291657634e487b7160e01b5f52601260045260245ffd5b500490565b608081525f6200292f60808301876200266e565b82810360208401526200294381876200266e565b604084019590955250506060015292915050565b600181811c908216806200296c57607f821691505b6020821081036200298b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620029dc57805f5260205f20601f840160051c81016020851015620029b85750805b601f840160051c820191505b81811015620029d9575f8155600101620029c4565b50505b505050565b815167ffffffffffffffff811115620029fe57620029fe6200249d565b62002a168162002a0f845462002957565b8462002991565b602080601f83116001811462002a4c575f841562002a345750858301515b5f19600386901b1c1916600185901b17855562002aa6565b5f85815260208120601f198616915b8281101562002a7c5788860151825594840194600190910190840162002a5b565b508582101562002a9a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b818103818111156200133d576200133d620028b7565b6020808252600d908201526c2ab735b737bbb7103a37b5b2b760991b604082015260600190565b5f6020828403121562002b33575f80fd5b5051919050565b5f825162002b4d8184602087016200264a565b9190910192915050565b5f6001820162002b6b5762002b6b620028b7565b5060010190565b5f6020828403121562002b83575f80fd5b815162002643816200260d565b5f6020828403121562002ba1575f80fd5b8151801515811462002643575f80fd5b5f805f6060848603121562002bc4575f80fd5b835192506020840151915060408401519050925092509256fe60a060405234801562000010575f80fd5b50604051620011cb380380620011cb8339810160408190526200003391620002f6565b5f8211620000795760405162461bcd60e51b815260206004820152600e60248201526d6d6178537570706c79207a65726f60901b60448201526064015b60405180910390fd5b81811115620000b85760405162461bcd60e51b815260206004820152600a6024820152690d2dcd2e8407c40dac2f60b31b604482015260640162000070565b5f620000c58582620003f5565b506001620000d48482620003f5565b506080829052620000e63382620000f0565b50505050620004e7565b6001600160a01b038216620001485760405162461bcd60e51b815260206004820152601360248201527f45524332303a206d696e7420746f207a65726f00000000000000000000000000604482015260640162000070565b608051816002546200015b9190620004c1565b1115620001ab5760405162461bcd60e51b815260206004820152601360248201527f6d617820737570706c7920657863656564656400000000000000000000000000604482015260640162000070565b8060025f828254620001be9190620004c1565b90915550506001600160a01b0382165f9081526003602052604081208054839290620001ec908490620004c1565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000259575f80fd5b81516001600160401b038082111562000276576200027662000235565b604051601f8301601f19908116603f01168101908282118183101715620002a157620002a162000235565b8160405283815260209250866020858801011115620002be575f80fd5b5f91505b83821015620002e15785820183015181830184015290820190620002c2565b5f602085830101528094505050505092915050565b5f805f80608085870312156200030a575f80fd5b84516001600160401b038082111562000321575f80fd5b6200032f8883890162000249565b9550602087015191508082111562000345575f80fd5b50620003548782880162000249565b604087015160609097015195989097509350505050565b600181811c908216806200038057607f821691505b6020821081036200039f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003f057805f5260205f20601f840160051c81016020851015620003cc5750805b601f840160051c820191505b81811015620003ed575f8155600101620003d8565b50505b505050565b81516001600160401b0381111562000411576200041162000235565b62000429816200042284546200036b565b84620003a5565b602080601f8311600181146200045f575f8415620004475750858301515b5f19600386901b1c1916600185901b178555620004b9565b5f85815260208120601f198616915b828110156200048f578886015182559484019460019091019084016200046e565b5085821015620004ad57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115620004e157634e487b7160e01b5f52601160045260245ffd5b92915050565b608051610cc4620005075f395f818161020901526108cd0152610cc45ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c806394bf804d11610088578063c45a015511610063578063c45a0155146101d9578063d5abeb0114610204578063dd62ed3e1461022b578063fcd3533c14610263575f80fd5b806394bf804d146101ab57806395d89b41146101be578063a9059cbb146101c6575f80fd5b806323b872dd116100c357806323b872dd14610141578063313ce567146101545780635bb478081461016e57806370a0823114610183575f80fd5b806306fdde03146100e9578063095ea7b31461010757806318160ddd1461012a575b5f80fd5b6100f1610276565b6040516100fe9190610ae2565b60405180910390f35b61011a610115366004610b49565b610301565b60405190151581526020016100fe565b61013360025481565b6040519081526020016100fe565b61011a61014f366004610b71565b610317565b61015c601281565b60405160ff90911681526020016100fe565b61018161017c366004610baa565b6103b2565b005b610133610191366004610baa565b6001600160a01b03165f9081526003602052604090205490565b6101816101b9366004610bca565b610496565b6100f161052f565b61011a6101d4366004610b49565b61053c565b6005546101ec906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101337f000000000000000000000000000000000000000000000000000000000000000081565b610133610239366004610bf4565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b610181610271366004610bca565b610548565b5f805461028290610c1c565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610c1c565b80156102f95780601f106102d0576101008083540402835291602001916102f9565b820191905f5260205f20905b8154815290600101906020018083116102dc57829003601f168201915b505050505081565b5f61030d3384846105d5565b5060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120548281101561038f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b61039c85338584036105d5565b6103a78585856106db565b506001949350505050565b600554600160a01b900460ff16156104025760405162461bcd60e51b8152602060048201526013602482015272119858dd1bdc9e48185b1c9958591e481cd95d606a1b6044820152606401610386565b6001600160a01b0381166104475760405162461bcd60e51b815260206004820152600c60248201526b5a65726f20666163746f727960a01b6044820152606401610386565b600580546001600160a81b0319166001600160a01b038316908117600160a01b179091556040517f1edf3afd4ac789736e00d216cd88be164ddcef26a6eedcc30cdb0cb62f3741b1905f90a250565b6005546001600160a01b031633146104de5760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b6104e8818361087f565b806001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8360405161052391815260200190565b60405180910390a25050565b6001805461028290610c1c565b5f61030d3384846106db565b6005546001600160a01b031633146105905760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420666163746f727960a81b6044820152606401610386565b61059a81836109c4565b806001600160a01b03167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df78360405161052391815260200190565b6001600160a01b03831661062b5760405162461bcd60e51b815260206004820152601860248201527f45524332303a20617070726f76652066726f6d207a65726f00000000000000006044820152606401610386565b6001600160a01b03821661067a5760405162461bcd60e51b815260206004820152601660248201527545524332303a20617070726f766520746f207a65726f60501b6044820152606401610386565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166107315760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e736665722066726f6d207a65726f000000000000006044820152606401610386565b6001600160a01b0382166107875760405162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e7366657220746f207a65726f0000000000000000006044820152606401610386565b6001600160a01b0383165f90815260036020526040902054818110156107ef5760405162461bcd60e51b815260206004820152601960248201527f45524332303a207472616e73666572203e2062616c616e6365000000000000006044820152606401610386565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290610825908490610c68565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161087191815260200190565b60405180910390a350505050565b6001600160a01b0382166108cb5760405162461bcd60e51b815260206004820152601360248201527245524332303a206d696e7420746f207a65726f60681b6044820152606401610386565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108fa9190610c68565b111561093e5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610386565b8060025f82825461094f9190610c68565b90915550506001600160a01b0382165f908152600360205260408120805483929061097b908490610c68565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610a125760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e2066726f6d207a65726f60581b6044820152606401610386565b6001600160a01b0382165f9081526003602052604090205481811015610a725760405162461bcd60e51b815260206004820152601560248201527445524332303a206275726e203e2062616c616e636560581b6044820152606401610386565b6001600160a01b0383165f908152600360205260408120838303905560028054849290610aa0908490610c7b565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016106ce565b5f602080835283518060208501525f5b81811015610b0e57858101830151858201604001528201610af2565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b44575f80fd5b919050565b5f8060408385031215610b5a575f80fd5b610b6383610b2e565b946020939093013593505050565b5f805f60608486031215610b83575f80fd5b610b8c84610b2e565b9250610b9a60208501610b2e565b9150604084013590509250925092565b5f60208284031215610bba575f80fd5b610bc382610b2e565b9392505050565b5f8060408385031215610bdb575f80fd5b82359150610beb60208401610b2e565b90509250929050565b5f8060408385031215610c05575f80fd5b610c0e83610b2e565b9150610beb60208401610b2e565b600181811c90821680610c3057607f821691505b602082108103610c4e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561031157610311610c54565b8181038181111561031157610311610c5456fea264697066735822122095f97c776c5b082f905e1484d3ec0eadd65b5a0214f9b61d9a88c282606c208064736f6c63430008180033a26469706673582212209e76329aee158da492d1a0d77d42ae670e1bfb7e11ae7db01f1c4bcda17018c864736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c0000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _uniswapFactory (address): 0xd7Be65A26f4279CCcD7c7be1bBd2253f293B9C69
Arg [1] : _uniswapRouter (address): 0xC6558C1699230e1f1f39abC40F2d9b56182FfB4C
Arg [2] : _listingFee (uint256): 100
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000d7be65a26f4279cccd7c7be1bbd2253f293b9c69
Arg [1] : 000000000000000000000000c6558c1699230e1f1f39abc40f2d9b56182ffb4c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
15542:14878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19772:1134;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2092:32:1;;;2074:51;;2062:2;2047:18;19772:1134:0;;;;;;;;17494:33;;;;;;;;;;;;;;;;;;;2282:25:1;;;2270:2;2255:18;17494:33:0;2136:177:1;19581:152:0;;;;;;;;;;-1:-1:-1;19581:152:0;;;;;:::i;:::-;;:::i;:::-;;16839:35;;;;;;;;;;-1:-1:-1;16839:35:0;;;;;:::i;:::-;;:::i;30099:318::-;;;;;;;;;;-1:-1:-1;30099:318:0;;;;;:::i;:::-;;:::i;16943:46::-;;;;;;;;;;-1:-1:-1;16943:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;29581:378;;;;;;;;;;-1:-1:-1;29581:378:0;;;;;:::i;:::-;;:::i;17573:43::-;;;;;;;;;;;;17608:8;17573:43;;17623:57;;;;;;;;;;;;;:::i;17359:25::-;;;;;;;;;;;;;;;;16792:38;;;;;;;;;;;;;;;18106:51;;;;;;;;;;;;18146:11;18106:51;;16746:39;;;;;;;;;;;;;;;16709:30;;;;;;;;;;;;;;;17687:61;;;;;;;;;;;;;:::i;16881:55::-;;;;;;;;;;-1:-1:-1;16881:55:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;18209:45::-;;;;;;;;;;;;18237:17;18209:45;;20914:330;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17130:37::-;;;;;;;;;;;;17164:3;17130:37;;21287:388;;;;;;;;;;-1:-1:-1;21287:388:0;;;;;:::i;:::-;;:::i;17060:63::-;;;;;;;;;;;;17109:14;17060:63;;18351:58;;;;;;;;;;;;18399:10;18351:58;;26811:1403;;;;;;;;;;-1:-1:-1;26811:1403:0;;;;;:::i;:::-;;:::i;17196:48::-;;;;;;;;;;;;17238:6;17196:48;;23476:390;;;;;;;;;;-1:-1:-1;23476:390:0;;;;;:::i;:::-;;:::i;24615:2031::-;;;;;;:::i;:::-;;:::i;21902:1566::-;;;;;;;;;;-1:-1:-1;21902:1566:0;;;;;:::i;:::-;;:::i;19772:1134::-;19972:7;18535:1;18618:7;;:19;18610:63;;;;-1:-1:-1;;;18610:63:0;;;;;;;:::i;:::-;;;;;;;;;18535:1;18684:7;:18;17109:14:::1;20000:9;:35;;19992:69;;;::::0;-1:-1:-1;;;19992:69:0;;8150:2:1;19992:69:0::1;::::0;::::1;8132:21:1::0;8189:2;8169:18;;;8162:30;-1:-1:-1;;;8208:18:1;;;8201:51;8269:18;;19992:69:0::1;7948:345:1::0;19992:69:0::1;20146:9;20124:18;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;20263:11:0::1;::::0;-1:-1:-1;20287:4:0;20293:6;17660:20:::1;17608:8;17660:9;:20;:::i;:::-;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;::::0;17739:2:::1;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;20277:48;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20336:31:0::1;::::0;-1:-1:-1;;;20336:31:0;;20361:4:::1;20336:31;::::0;::::1;2074:51:1::0;20263:62:0;;-1:-1:-1;;;;;;20336:16:0;::::1;::::0;::::1;::::0;2047:18:1;;20336:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20378:17:0::1;20425:34:::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20425:34:0::1;-1:-1:-1::0;;;;;20425:34:0;::::1;::::0;;::::1;::::0;;;20502:295:::1;::::0;;20425:34:::1;20502:295:::0;::::1;::::0;;;;;20425:34:::1;20502:295:::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;20743:10:::1;20502:295:::0;;;;;;;;;;20470:29;;;;;;;;;;:327;;20425:34;;-1:-1:-1;20502:295:0;;-1:-1:-1;20470:29:0;;;:327:::1;::::0;:29;:327:::1;:::i;:::-;-1:-1:-1::0;20470:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20470:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20470:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;20470:327:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20470:327:0;;::::1;-1:-1:-1::0;;;;;;20470:327:0;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;-1:-1:-1::0;;;20470:327:0::1;-1:-1:-1::0;;;;;;20470:327:0;;;;;::::1;::::0;;;;;;;::::1;::::0;;20815:56:::1;::::0;20843:10:::1;::::0;20815:56;::::1;::::0;::::1;::::0;::::1;::::0;20855:15:::1;2282:25:1::0;;2270:2;2255:18;;2136:177;20815:56:0::1;;;;;;;;18491:1:::0;18725:7;:22;20889:9;19772:1134;-1:-1:-1;;;;;;19772:1134:0:o;19581:152::-;18803:10;-1:-1:-1;;;;;18817:5:0;18803:19;;18795:41;;;;-1:-1:-1;;;18795:41:0;;;;;;;:::i;:::-;19655:10:::1;:24:::0;;;19695:30:::1;::::0;2282:25:1;;;19695:30:0::1;::::0;2270:2:1;2255:18;19695:30:0::1;;;;;;;19581:152:::0;:::o;16839:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16839:35:0;;-1:-1:-1;16839:35:0;:::o;30099:318::-;18803:10;-1:-1:-1;;;;;18817:5:0;18803:19;;18795:41;;;;-1:-1:-1;;;18795:41:0;;;;;;;:::i;:::-;18535:1:::1;18618:7;;:19:::0;18610:63:::1;;;;-1:-1:-1::0;;;18610:63:0::1;;;;;;;:::i;:::-;18535:1;18684:7;:18:::0;-1:-1:-1;;;;;30192:16:0;::::2;30184:33;;;;-1:-1:-1::0;;;30184:33:0::2;;;;;;12581:2:1::0;12563:21;;;12620:1;12600:18;;;12593:29;-1:-1:-1;;;12653:2:1;12638:18;;12631:34;12697:2;12682:18;;12379:327;30184:33:0::2;30242:21;30282:7:::0;30274:30:::2;;;::::0;-1:-1:-1;;;30274:30:0;;12913:2:1;30274:30:0::2;::::0;::::2;12895:21:1::0;12952:2;12932:18;;;12925:30;-1:-1:-1;;;12971:18:1;;;12964:40;13021:18;;30274:30:0::2;12711:334:1::0;30274:30:0::2;30318:12;30336:2;-1:-1:-1::0;;;;;30336:7:0::2;30351:3;30336:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30317:42;;;30378:7;30370:39;;;::::0;-1:-1:-1;;;30370:39:0;;13462:2:1;30370:39:0::2;::::0;::::2;13444:21:1::0;13501:2;13481:18;;;13474:30;-1:-1:-1;;;13520:18:1;;;13513:49;13579:18;;30370:39:0::2;13260:343:1::0;30370:39:0::2;-1:-1:-1::0;;18491:1:0::1;18725:7;:22:::0;-1:-1:-1;30099:318:0:o;29581:378::-;18803:10;-1:-1:-1;;;;;18817:5:0;18803:19;;18795:41;;;;-1:-1:-1;;;18795:41:0;;;;;;;:::i;:::-;18535:1:::1;18618:7;;:19:::0;18610:63:::1;;;;-1:-1:-1::0;;;18610:63:0::1;;;;;;;:::i;:::-;18535:1;18684:7;:18:::0;-1:-1:-1;;;;;29698:16:0;::::2;29690:33;;;;-1:-1:-1::0;;;29690:33:0::2;;;;;;12581:2:1::0;12563:21;;;12620:1;12600:18;;;12593:29;-1:-1:-1;;;12653:2:1;12638:18;;12631:34;12697:2;12682:18;;12379:327;29690:33:0::2;29751:18;::::0;29788:10;29780:30:::2;;;::::0;-1:-1:-1;;;29780:30:0;;13810:2:1;29780:30:0::2;::::0;::::2;13792:21:1::0;13849:1;13829:18;;;13822:29;-1:-1:-1;;;13867:18:1;;;13860:37;13914:18;;29780:30:0::2;13608:330:1::0;29780:30:0::2;29842:1;29821:18;:22;;;;29857:12;29875:2;-1:-1:-1::0;;;;;29875:7:0::2;29890:6;29875:26;;;13050:205:1::0;17623:57:0;17660:20;17608:8;17660:9;:20;:::i;:::-;17623:57;:::o;17687:61::-;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;16881:55::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;16881:55:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16881:55:0;;;;-1:-1:-1;16881:55:0;;;;-1:-1:-1;;;16881:55:0;;;;;:::o;20914:330::-;20996:11;21010:25;;20965:18;;21010:25;21072:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21072:20:0;;;;;;;;;;;;;;;;;21046:46;;21108:9;21103:112;21127:3;21123:1;:7;21103:112;;;21162:18;:41;21181:18;21200:1;21181:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21181:21:0;21162:41;;;;;;;;;;;;;;;21152:51;;21181:21;21152:51;;;;;;;;;21162:41;;21152:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21152:51:0;;;-1:-1:-1;;21152:51:0;;;;;;;;;;;;-1:-1:-1;;;;;21152:51:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21152:51:0;;;;;;;;;;;;:7;;;;21157:1;;21152:7;;;;;;:::i;:::-;;;;;;;;;;:51;21132:3;;21103:112;;;-1:-1:-1;21232:4:0;20914:330;-1:-1:-1;;20914:330:0:o;21287:388::-;21395:7;;17608:8;21441:22;21454:9;21441:10;:22;:::i;:::-;21436:28;;18237:17;21436:28;:::i;:::-;21435:41;;;;:::i;:::-;21415:61;-1:-1:-1;21487:17:0;17608:8;21508:14;21512:10;18237:17;21508:14;:::i;:::-;21507:27;;;;:::i;:::-;21487:47;;21545:12;21560:14;21564:9;21560:3;:14::i;:::-;21545:29;;21585:12;21600:14;21604:9;21600:3;:14::i;:::-;21585:29;-1:-1:-1;18237:17:0;21650:11;21585:29;21650:4;:11;:::i;:::-;21633:29;;18146:11;21633:29;:::i;:::-;21632:35;;;;:::i;:::-;21625:42;;;;;;21287:388;;;;;:::o;26811:1403::-;26927:7;18535:1;18618:7;;:19;18610:63;;;;-1:-1:-1;;;18610:63:0;;;;;;;:::i;:::-;18535:1;18684:7;:18;;;-1:-1:-1;;;;;26970:29:0;;::::1;26947:20;26970:29:::0;;;:18:::1;:29;::::0;;;;27032:15;;::::1;::::0;;;::::1;:28;:55:::0;::::1;;;-1:-1:-1::0;;;;;;27064:23:0;::::1;::::0;::::1;27032:55;27010:118;;;;-1:-1:-1::0;;;27010:118:0::1;;;;;;;:::i;:::-;27148:13;::::0;::::1;::::0;-1:-1:-1;;;27148:13:0;::::1;;;27147:14;27139:48;;;::::0;-1:-1:-1;;;27139:48:0;;14752:2:1;27139:48:0::1;::::0;::::1;14734:21:1::0;14791:2;14771:18;;;14764:30;-1:-1:-1;;;14810:18:1;;;14803:51;14871:18;;27139:48:0::1;14550:345:1::0;27139:48:0::1;27220:9:::0;27200:11:::1;27258:19;17608:8;27258::::0;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;27311:22:0;;::::1;27290:18;27311:22:::0;;;:11:::1;:22;::::0;;;;;;;27354:27;;-1:-1:-1;;;27354:27:0;;27370:10:::1;27354:27;::::0;::::1;2074:51:1::0;27241:36:0;;-1:-1:-1;27311:22:0;27241:36;;27354:15;::::1;::::0;::::1;::::0;2047:18:1;;27354:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;27346:70;;;::::0;-1:-1:-1;;;27346:70:0;;15291:2:1;27346:70:0::1;::::0;::::1;15273:21:1::0;15330:2;15310:18;;;15303:30;-1:-1:-1;;;15349:18:1;;;15342:50;15409:18;;27346:70:0::1;15089:344:1::0;27346:70:0::1;27449:6;27435:10;:20;;27427:53;;;::::0;-1:-1:-1;;;27427:53:0;;15640:2:1;27427:53:0::1;::::0;::::1;15622:21:1::0;15679:2;15659:18;;;15652:30;-1:-1:-1;;;15698:18:1;;;15691:50;15758:18;;27427:53:0::1;15438:344:1::0;27427:53:0::1;27493:14;27510:35;27526:10;27538:6;27510:15;:35::i;:::-;27493:52;;27584:6;27564:2;:16;;;:26;;27556:61;;;::::0;-1:-1:-1;;;27556:61:0;;15989:2:1;27556:61:0::1;::::0;::::1;15971:21:1::0;16028:2;16008:18;;;16001:30;-1:-1:-1;;;16047:18:1;;;16040:52;16109:18;;27556:61:0::1;15787:346:1::0;27556:61:0::1;27630:11;17238:6;27645:16;17164:3;27645:6:::0;:16:::1;:::i;:::-;27644:36;;;;:::i;:::-;27630:50:::0;-1:-1:-1;27691:17:0::1;27711:12;27630:50:::0;27711:6;:12:::1;:::i;:::-;27691:32;;27758:3;27736:18;;:25;;;;;;;:::i;:::-;;;;;;;;27792:6;27772:2;:16;;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;27834:19:0::1;::::0;-1:-1:-1;27847:6:0;27834:10;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;27809:22:0;;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;:44;;;;27866:30;;-1:-1:-1;;;27866:30:0;;::::1;::::0;::::1;16312:25:1::0;;;27885:10:0::1;16353:18:1::0;;;16346:60;27866:10:0;;::::1;::::0;::::1;::::0;16285:18:1;;27866:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27928:37:0::1;::::0;27910:12:::1;::::0;-1:-1:-1;27928:10:0::1;::::0;-1:-1:-1;27951:9:0;;27910:12;27928:37;27910:12;27928:37;27951:9;27928:10;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27909:56;;;27984:7;27976:39;;;::::0;-1:-1:-1;;;27976:39:0;;13462:2:1;27976:39:0::1;::::0;::::1;13444:21:1::0;13501:2;13481:18;;;13474:30;-1:-1:-1;;;13520:18:1;;;13513:49;13579:18;;27976:39:0::1;13260:343:1::0;27976:39:0::1;28033:146;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;28153:15:0::1;16703:18:1::0;;;16696:34;28033:146:0;;28081:10:::1;::::0;-1:-1:-1;;;;;28033:146:0;::::1;::::0;::::1;::::0;;;;16607:2:1;28033:146:0;;::::1;-1:-1:-1::0;18491:1:0;18725:7;:22;28197:9;26811:1403;-1:-1:-1;;;;;;;;;26811:1403:0:o;23476:390::-;23586:7;;17608:8;23627:14;23631:10;18237:17;23627:14;:::i;:::-;23626:27;;;;:::i;:::-;23606:47;-1:-1:-1;23664:17:0;17608:8;23690:22;23703:9;23690:10;:22;:::i;:::-;23685:28;;18237:17;23685:28;:::i;24615:2031::-;24738:7;18535:1;18618:7;;:19;18610:63;;;;-1:-1:-1;;;18610:63:0;;;;;;;:::i;:::-;18535:1;18684:7;:18;;;-1:-1:-1;;;;;24781:29:0;;::::1;24758:20;24781:29:::0;;;:18:::1;:29;::::0;;;;24843:15;;::::1;::::0;;;::::1;:28;:55:::0;::::1;;;-1:-1:-1::0;;;;;;24875:23:0;::::1;::::0;::::1;24843:55;24821:118;;;;-1:-1:-1::0;;;24821:118:0::1;;;;;;;:::i;:::-;24959:13;::::0;::::1;::::0;-1:-1:-1;;;24959:13:0;::::1;;;24958:14;24950:48;;;::::0;-1:-1:-1;;;24950:48:0;;14752:2:1;24950:48:0::1;::::0;::::1;14734:21:1::0;14791:2;14771:18;;;14764:30;-1:-1:-1;;;14810:18:1;;;14803:51;14871:18;;24950:48:0::1;14550:345:1::0;24950:48:0::1;25031:9:::0;25011:11:::1;25069:19;17608:8;25069::::0;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;25122:22:0;::::1;25101:18;25122:22:::0;;;:11:::1;:22;::::0;;;;;25052:36;;-1:-1:-1;25122:22:0;17745:3:::1;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;::::0;17739:2:::1;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;17660:20;17608:8;17660:9;:20;:::i;:::-;25175:24;;;;:::i;:::-;:37;;;;:::i;:::-;25155:57;;25241:9;25231:6;:19;;25223:51;;;::::0;-1:-1:-1;;;25223:51:0;;16943:2:1;25223:51:0::1;::::0;::::1;16925:21:1::0;16982:2;16962:18;;;16955:30;-1:-1:-1;;;17001:18:1;;;16994:49;17060:18;;25223:51:0::1;16741:343:1::0;25223:51:0::1;25287:17;25307:33;25321:10;25333:6;25307:13;:33::i;:::-;25287:53:::0;-1:-1:-1;25351:11:0::1;17238:6;25366:19;17164:3;25287:53:::0;25366:19:::1;:::i;:::-;25365:39;;;;:::i;:::-;25351:53:::0;-1:-1:-1;25415:13:0::1;25431:15;25351:53:::0;25431:9;:15:::1;:::i;:::-;25415:31;;25480:5;25467:9;:18;25459:51;;;::::0;-1:-1:-1;;;25459:51:0;;17291:2:1;25459:51:0::1;::::0;::::1;17273:21:1::0;17330:2;17310:18;;;17303:30;-1:-1:-1;;;17349:18:1;;;17342:50;17409:18;;25459:51:0::1;17089:344:1::0;25459:51:0::1;25545:3;25523:18;;:25;;;;;;;:::i;:::-;;;;;;;;25579:9;25559:2;:16;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25624:19:0::1;::::0;-1:-1:-1;25637:6:0;25624:10;:19:::1;:::i;:::-;-1:-1:-1::0;;;;;25599:22:0;;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;:44;;;;25656:30;;-1:-1:-1;;;25656:30:0;;::::1;::::0;::::1;16312:25:1::0;;;25675:10:0::1;16353:18:1::0;;;16346:60;25656:10:0;;::::1;::::0;::::1;::::0;16285:18:1;;25656:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25704:144:0::1;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;25822:15:0::1;16703:18:1::0;;;16696:34;25704:144:0;;25754:10:::1;::::0;-1:-1:-1;;;;;;25704:144:0;::::1;::::0;-1:-1:-1;25704:144:0::1;::::0;;;;16607:2:1;25704:144:0;;::::1;25950:13;::::0;::::1;::::0;-1:-1:-1;;;25950:13:0;::::1;;;25949:14;:59:::0;::::1;;;;18399:10;25967:2;:16;;;:41;;25949:59;25945:669;;;26041:16;::::0;::::1;::::0;26120:10:::1;::::0;26025:13:::1;::::0;26120:14;;;;:36:::1;;;26146:10;;26138:5;:18;26120:36;26116:194;;;26186:10;::::0;26177:19:::1;::::0;;::::1;:::i;:::-;;;26237:10;;26215:18;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26284:10:0::1;::::0;;-1:-1:-1;26116:194:0::1;26326:13;::::0;::::1;:20:::0;;-1:-1:-1;;;;26326:20:0::1;-1:-1:-1::0;;;26326:20:0::1;::::0;;;26361:16:::1;::::0;::::1;:20:::0;26398:34:::1;26415:9:::0;26426:5;26398:16:::1;:34::i;:::-;26454:148;::::0;;16619:25:1;;;16675:2;16660:18;;16653:34;;;26572:15:0::1;16703:18:1::0;;;16696:34;26454:148:0;;-1:-1:-1;;;;;26454:148:0;::::1;::::0;::::1;::::0;;;;;16607:2:1;26454:148:0;;::::1;26010:604;;25945:669;18491:1:::0;18725:7;:22;26633:5;24615:2031;-1:-1:-1;;;;;;;;;;24615:2031:0:o;21902:1566::-;-1:-1:-1;;;;;22068:29:0;;;22025:7;22068:29;;;:18;:29;;;;;22130:15;;;;22025:7;;22068:29;;22130:15;;:28;:55;;;;-1:-1:-1;;;;;;22162:23:0;;;;22130:55;22108:118;;;;-1:-1:-1;;;22108:118:0;;;;;;;:::i;:::-;22246:13;;;;-1:-1:-1;;;22246:13:0;;;;22245:14;22237:43;;;;-1:-1:-1;;;22237:43:0;;17640:2:1;22237:43:0;;;17622:21:1;17679:2;17659:18;;;17652:30;-1:-1:-1;;;17698:18:1;;;17691:46;17754:18;;22237:43:0;17438:340:1;22237:43:0;-1:-1:-1;;;;;22314:22:0;;22293:18;22314:22;;;:11;:22;;;;;;;;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;17660:20;17608:8;17660:9;:20;:::i;:::-;22366:24;;;;:::i;:::-;:37;;;;:::i;:::-;22347:56;-1:-1:-1;22414:17:0;22434:19;17608:8;22347:56;22434:19;:::i;:::-;22414:39;-1:-1:-1;22470:14:0;;;:32;;-1:-1:-1;22488:14:0;;22470:32;22466:73;;;22526:1;22519:8;;;;;;;;22466:73;22619:20;17238:6;22656:25;17164:3;17238:6;22656:25;:::i;:::-;22643:39;;:9;:39;:::i;:::-;22642:72;;;;:::i;:::-;22619:95;-1:-1:-1;22727:11:0;22768:9;22790:648;22803:4;22797:3;:10;22790:648;;;22824:11;22857:1;22839:10;22845:4;22839:3;:10;:::i;:::-;:14;;22852:1;22839:14;:::i;:::-;22838:20;;;;:::i;:::-;22824:34;-1:-1:-1;22873:17:0;22893:14;17608:8;22824:34;22893:14;:::i;:::-;22998:156;;;;;;17957:25:1;;;17998:18;;;;17991:34;;;22998:156:0;;;;;;;;;;17930:18:1;;;;22998:156:0;;;;;;;-1:-1:-1;;;;;22998:156:0;-1:-1:-1;;;22998:156:0;;;22955:214;;17991:34:1;;-1:-1:-1;;;;;22963:4:0;;22955:214;;22998:156;22955:214;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22924:245;;;;23190:2;23186:212;;;23213:12;23239:4;23228:27;;;;;;;;;;;;:::i;:::-;23213:42;;23286:12;23278:4;:20;23274:109;;23329:3;23323:9;;23355:8;;;;;;;23274:109;23194:204;23186:212;23419:7;23425:1;23419:3;:7;:::i;:::-;23412:14;;22809:629;;;;22790:648;;;-1:-1:-1;23457:3:0;21902:1566;-1:-1:-1;;;;;;;;21902:1566:0:o;24058:333::-;24105:7;17608:8;;24216:1;24199:164;24224:2;24219:1;:7;24199:164;;24269:21;17608:8;24277:1;24269:21;:::i;:::-;24256:8;24263:1;24256:4;:8;:::i;:::-;24255:36;;;;:::i;:::-;24248:43;-1:-1:-1;24306:11:0;24248:43;24306:11;;:::i;:::-;;;24343:1;24336:4;:8;24346:5;24332:19;24228:3;;;;:::i;:::-;;;;24199:164;;;-1:-1:-1;24380:3:0;;24058:333;-1:-1:-1;;;24058:333:0:o;28261:1193::-;28365:1;28353:9;:13;28345:39;;;;-1:-1:-1;;;28345:39:0;;18670:2:1;28345:39:0;;;18652:21:1;18709:2;18689:18;;;18682:30;-1:-1:-1;;;18728:18:1;;;18721:43;18781:18;;28345:39:0;18468:337:1;28345:39:0;28397:25;28443:14;28397:61;;28469:25;28516:13;28469:61;;28543:12;28558:6;-1:-1:-1;;;;;28558:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28597:32;;-1:-1:-1;;;28597:32:0;;-1:-1:-1;;;;;19304:15:1;;;28597:32:0;;;19286:34:1;19356:15;;;19336:18;;;19329:43;28543:28:0;;-1:-1:-1;28582:12:0;;28597:15;;;;;19221:18:1;;28597:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28582:47;-1:-1:-1;;;;;;28644:18:0;;28640:93;;28686:35;;-1:-1:-1;;;28686:35:0;;-1:-1:-1;;;;;19304:15:1;;;28686:35:0;;;19286:34:1;19356:15;;;19336:18;;;19329:43;28686:18:0;;;;;19221::1;;28686:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28679:42;;28640:93;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;28839:41;;-1:-1:-1;;;28839:41:0;;28874:4;28839:41;;;2074:51:1;-1:-1:-1;;;;;28839:26:0;;;;;2047:18:1;;28839:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;28817:128;;;;-1:-1:-1;;;28817:128:0;;19585:2:1;28817:128:0;;;19567:21:1;19624:2;19604:18;;;19597:30;-1:-1:-1;;;19643:18:1;;;19636:52;19705:18;;28817:128:0;19383:346:1;28817:128:0;-1:-1:-1;;;;;28958:24:0;;;28991:6;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;28958:54;;-1:-1:-1;;;;;;28958:54:0;;;;;;;-1:-1:-1;;;;;19926:32:1;;;28958:54:0;;;19908:51:1;19975:18;;;19968:34;19881:18;;28958:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29030:17:0;-1:-1:-1;;;;;29051:22:0;;;29081:9;29106;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;17745:3;17660:20;17608:8;17660:9;:20;:::i;:::-;17726:15;;17739:2;17726:15;:::i;:::-;17725:23;;;;:::i;:::-;29051:234;;-1:-1:-1;;;;;;29051:234:0;;;;;;;-1:-1:-1;;;;;20638:15:1;;;29051:234:0;;;20620:34:1;20670:18;;;20663:34;;;;20713:18;;;20706:34;20756:18;;;20749:34;;;29239:4:0;20799:19:1;;;20792:44;29259:15:0;20852:19:1;;;20845:35;20554:19;;29051:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29025:260;;;;29318:1;29306:9;:13;29298:45;;;;-1:-1:-1;;;29298:45:0;;21404:2:1;29298:45:0;;;21386:21:1;21443:2;21423:18;;;21416:30;-1:-1:-1;;;21462:18:1;;;21455:49;21521:18;;29298:45:0;21202:343:1;29298:45:0;29394:52;;-1:-1:-1;;;29394:52:0;;29432:1;29394:52;;;19908:51:1;19975:18;;;19968:34;;;-1:-1:-1;;;;;29394:29:0;;;;;19881:18:1;;29394:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28334:1120;;;;;28261:1193;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:719;189:5;242:3;235:4;227:6;223:17;219:27;209:55;;260:1;257;250:12;209:55;296:6;283:20;322:18;359:2;355;352:10;349:36;;;365:18;;:::i;:::-;440:2;434:9;408:2;494:13;;-1:-1:-1;;490:22:1;;;514:2;486:31;482:40;470:53;;;538:18;;;558:22;;;535:46;532:72;;;584:18;;:::i;:::-;624:10;620:2;613:22;659:2;651:6;644:18;705:3;698:4;693:2;685:6;681:15;677:26;674:35;671:55;;;722:1;719;712:12;671:55;786:2;779:4;771:6;767:17;760:4;752:6;748:17;735:54;833:1;826:4;821:2;813:6;809:15;805:26;798:37;853:6;844:15;;;;;;146:719;;;;:::o;870:944::-;996:6;1004;1012;1020;1073:3;1061:9;1052:7;1048:23;1044:33;1041:53;;;1090:1;1087;1080:12;1041:53;1130:9;1117:23;1159:18;1200:2;1192:6;1189:14;1186:34;;;1216:1;1213;1206:12;1186:34;1239:50;1281:7;1272:6;1261:9;1257:22;1239:50;:::i;:::-;1229:60;;1342:2;1331:9;1327:18;1314:32;1298:48;;1371:2;1361:8;1358:16;1355:36;;;1387:1;1384;1377:12;1355:36;1410:52;1454:7;1443:8;1432:9;1428:24;1410:52;:::i;:::-;1400:62;;1515:2;1504:9;1500:18;1487:32;1471:48;;1544:2;1534:8;1531:16;1528:36;;;1560:1;1557;1550:12;1528:36;1583:52;1627:7;1616:8;1605:9;1601:24;1583:52;:::i;:::-;1573:62;;1688:2;1677:9;1673:18;1660:32;1644:48;;1717:2;1707:8;1704:16;1701:36;;;1733:1;1730;1723:12;1701:36;;1756:52;1800:7;1789:8;1778:9;1774:24;1756:52;:::i;:::-;1746:62;;;870:944;;;;;;;:::o;2318:180::-;2377:6;2430:2;2418:9;2409:7;2405:23;2401:32;2398:52;;;2446:1;2443;2436:12;2398:52;-1:-1:-1;2469:23:1;;2318:180;-1:-1:-1;2318:180:1:o;2503:139::-;-1:-1:-1;;;;;2586:31:1;;2576:42;;2566:70;;2632:1;2629;2622:12;2566:70;2503:139;:::o;2647:263::-;2714:6;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2822:9;2809:23;2841:39;2874:5;2841:39;:::i;:::-;2899:5;2647:263;-1:-1:-1;;;2647:263:1:o;3175:250::-;3260:1;3270:113;3284:6;3281:1;3278:13;3270:113;;;3360:11;;;3354:18;3341:11;;;3334:39;3306:2;3299:10;3270:113;;;-1:-1:-1;;3417:1:1;3399:16;;3392:27;3175:250::o;3430:271::-;3472:3;3510:5;3504:12;3537:6;3532:3;3525:19;3553:76;3622:6;3615:4;3610:3;3606:14;3599:4;3592:5;3588:16;3553:76;:::i;:::-;3683:2;3662:15;-1:-1:-1;;3658:29:1;3649:39;;;;3690:4;3645:50;;3430:271;-1:-1:-1;;3430:271:1:o;3802:1085::-;4164:4;4193:3;4223:2;4212:9;4205:21;4249:45;4290:2;4279:9;4275:18;4267:6;4249:45;:::i;:::-;4235:59;;4342:9;4334:6;4330:22;4325:2;4314:9;4310:18;4303:50;4376:33;4402:6;4394;4376:33;:::i;:::-;4362:47;;4457:9;4449:6;4445:22;4440:2;4429:9;4425:18;4418:50;4491:33;4517:6;4509;4491:33;:::i;:::-;4477:47;;4572:9;4564:6;4560:22;4555:2;4544:9;4540:18;4533:50;4600:33;4626:6;4618;4600:33;:::i;:::-;4664:3;4649:19;;4642:35;;;;-1:-1:-1;;;;;;;4752:15:1;;;4704:3;4731:19;;4724:44;4805:15;;;;4799:3;4784:19;;4777:44;4865:14;;4858:22;4852:3;4837:19;;;4830:51;4592:41;3802:1085;-1:-1:-1;;;;3802:1085:1:o;4892:2110::-;5088:4;5117:2;5157;5146:9;5142:18;5187:2;5176:9;5169:21;5210:6;5245;5239:13;5276:6;5268;5261:22;5302:2;5292:12;;5335:2;5324:9;5320:18;5313:25;;5397:2;5387:6;5384:1;5380:14;5369:9;5365:30;5361:39;5435:2;5427:6;5423:15;5456:1;5466:1507;5480:6;5477:1;5474:13;5466:1507;;;5573:2;5569:7;5557:9;5549:6;5545:22;5541:36;5536:3;5529:49;5607:6;5601:13;5637:6;5682:2;5676:9;5713:2;5705:6;5698:18;5743:48;5787:2;5779:6;5775:15;5761:12;5743:48;:::i;:::-;5729:62;;;5840:2;5836;5832:11;5826:18;5893:6;5885;5881:19;5876:2;5868:6;5864:15;5857:44;5928:41;5962:6;5946:14;5928:41;:::i;:::-;5914:55;;;6018:2;6014;6010:11;6004:18;6071:6;6063;6059:19;6054:2;6046:6;6042:15;6035:44;6106:41;6140:6;6124:14;6106:41;:::i;:::-;6092:55;;;6170:4;6223:2;6219;6215:11;6209:18;6276:6;6268;6264:19;6259:2;6251:6;6247:15;6240:44;6311:41;6345:6;6329:14;6311:41;:::i;:::-;6297:55;;;;6375:4;6430:2;6426;6422:11;6416:18;6411:2;6403:6;6399:15;6392:43;;6458:4;6511:2;6507;6503:11;6497:18;6528:51;6575:2;6567:6;6563:15;6547:14;-1:-1:-1;;;;;1885:31:1;1873:44;;1819:104;6528:51;-1:-1:-1;;6602:4:1;6647:11;;;6641:18;-1:-1:-1;;;;;1885:31:1;6707:15;;;1873:44;6746:4;6791:11;;;6785:18;3776:13;3769:21;6848:15;;;;3757:34;6951:12;;;;6916:15;;;;5502:1;5495:9;5466:1507;;;-1:-1:-1;6990:6:1;;4892:2110;-1:-1:-1;;;;;;;;4892:2110:1:o;7007:248::-;7075:6;7083;7136:2;7124:9;7115:7;7111:23;7107:32;7104:52;;;7152:1;7149;7142:12;7104:52;-1:-1:-1;;7175:23:1;;;7245:2;7230:18;;;7217:32;;-1:-1:-1;7007:248:1:o;7260:323::-;7328:6;7336;7389:2;7377:9;7368:7;7364:23;7360:32;7357:52;;;7405:1;7402;7395:12;7357:52;7444:9;7431:23;7463:39;7496:5;7463:39;:::i;:::-;7521:5;7573:2;7558:18;;;;7545:32;;-1:-1:-1;;;7260:323:1:o;7588:355::-;7790:2;7772:21;;;7829:2;7809:18;;;7802:30;7868:33;7863:2;7848:18;;7841:61;7934:2;7919:18;;7588:355::o;8298:127::-;8359:10;8354:3;8350:20;8347:1;8340:31;8390:4;8387:1;8380:15;8414:4;8411:1;8404:15;8430:125;8495:9;;;8516:10;;;8513:36;;;8529:18;;:::i;8560:168::-;8633:9;;;8664;;8681:15;;;8675:22;;8661:37;8651:71;;8702:18;;:::i;8733:217::-;8773:1;8799;8789:132;;8843:10;8838:3;8834:20;8831:1;8824:31;8878:4;8875:1;8868:15;8906:4;8903:1;8896:15;8789:132;-1:-1:-1;8935:9:1;;8733:217::o;8955:527::-;9208:3;9197:9;9190:22;9171:4;9235:46;9276:3;9265:9;9261:19;9253:6;9235:46;:::i;:::-;9329:9;9321:6;9317:22;9312:2;9301:9;9297:18;9290:50;9357:33;9383:6;9375;9357:33;:::i;:::-;9421:2;9406:18;;9399:34;;;;-1:-1:-1;;9464:2:1;9449:18;9442:34;9349:41;8955:527;-1:-1:-1;;8955:527:1:o;9487:380::-;9566:1;9562:12;;;;9609;;;9630:61;;9684:4;9676:6;9672:17;9662:27;;9630:61;9737:2;9729:6;9726:14;9706:18;9703:38;9700:161;;9783:10;9778:3;9774:20;9771:1;9764:31;9818:4;9815:1;9808:15;9846:4;9843:1;9836:15;9700:161;;9487:380;;;:::o;9998:518::-;10100:2;10095:3;10092:11;10089:421;;;10136:5;10133:1;10126:16;10180:4;10177:1;10167:18;10250:2;10238:10;10234:19;10231:1;10227:27;10221:4;10217:38;10286:4;10274:10;10271:20;10268:47;;;-1:-1:-1;10309:4:1;10268:47;10364:2;10359:3;10355:12;10352:1;10348:20;10342:4;10338:31;10328:41;;10419:81;10437:2;10430:5;10427:13;10419:81;;;10496:1;10482:16;;10463:1;10452:13;10419:81;;;10423:3;;10089:421;9998:518;;;:::o;10692:1345::-;10818:3;10812:10;10845:18;10837:6;10834:30;10831:56;;;10867:18;;:::i;:::-;10896:97;10986:6;10946:38;10978:4;10972:11;10946:38;:::i;:::-;10940:4;10896:97;:::i;:::-;11048:4;;11105:2;11094:14;;11122:1;11117:663;;;;11824:1;11841:6;11838:89;;;-1:-1:-1;11893:19:1;;;11887:26;11838:89;-1:-1:-1;;10649:1:1;10645:11;;;10641:24;10637:29;10627:40;10673:1;10669:11;;;10624:57;11940:81;;11087:944;;11117:663;9945:1;9938:14;;;9982:4;9969:18;;-1:-1:-1;;11153:20:1;;;11271:236;11285:7;11282:1;11279:14;11271:236;;;11374:19;;;11368:26;11353:42;;11466:27;;;;11434:1;11422:14;;;;11301:19;;11271:236;;;11275:3;11535:6;11526:7;11523:19;11520:201;;;11596:19;;;11590:26;-1:-1:-1;;11679:1:1;11675:14;;;11691:3;11671:24;11667:37;11663:42;11648:58;11633:74;;11520:201;;;11767:1;11758:6;11755:1;11751:14;11747:22;11741:4;11734:36;11087:944;;;;;10692:1345;;:::o;12042:332::-;12244:2;12226:21;;;12283:1;12263:18;;;12256:29;-1:-1:-1;;;12316:2:1;12301:18;;12294:39;12365:2;12350:18;;12042:332::o;13943:127::-;14004:10;13999:3;13995:20;13992:1;13985:31;14035:4;14032:1;14025:15;14059:4;14056:1;14049:15;14075:128;14142:9;;;14163:11;;;14160:37;;;14177:18;;:::i;14208:337::-;14410:2;14392:21;;;14449:2;14429:18;;;14422:30;-1:-1:-1;;;14483:2:1;14468:18;;14461:43;14536:2;14521:18;;14208:337::o;14900:184::-;14970:6;15023:2;15011:9;15002:7;14998:23;14994:32;14991:52;;;15039:1;15036;15029:12;14991:52;-1:-1:-1;15062:16:1;;14900:184;-1:-1:-1;14900:184:1:o;18036:287::-;18165:3;18203:6;18197:13;18219:66;18278:6;18273:3;18266:4;18258:6;18254:17;18219:66;:::i;:::-;18301:16;;;;;18036:287;-1:-1:-1;;18036:287:1:o;18328:135::-;18367:3;18388:17;;;18385:43;;18408:18;;:::i;:::-;-1:-1:-1;18455:1:1;18444:13;;18328:135::o;18810:259::-;18880:6;18933:2;18921:9;18912:7;18908:23;18904:32;18901:52;;;18949:1;18946;18939:12;18901:52;18981:9;18975:16;19000:39;19033:5;19000:39;:::i;20013:277::-;20080:6;20133:2;20121:9;20112:7;20108:23;20104:32;20101:52;;;20149:1;20146;20139:12;20101:52;20181:9;20175:16;20234:5;20227:13;20220:21;20213:5;20210:32;20200:60;;20256:1;20253;20246:12;20891:306;20979:6;20987;20995;21048:2;21036:9;21027:7;21023:23;21019:32;21016:52;;;21064:1;21061;21054:12;21016:52;21093:9;21087:16;21077:26;;21143:2;21132:9;21128:18;21122:25;21112:35;;21187:2;21176:9;21172:18;21166:25;21156:35;;20891:306;;;;;:::o
Swarm Source
ipfs://9e76329aee158da492d1a0d77d42ae670e1bfb7e11ae7db01f1c4bcda17018c8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.