Source Code
EVM
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,459 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 29683593 | 46 days ago | IN | 0 ETH | 0.0000097 | ||||
| Set Fee Exempt | 26608053 | 64 days ago | IN | 0 ETH | 0.000006 | ||||
| Set Limit Exempt | 26608046 | 64 days ago | IN | 0 ETH | 0.00000532 | ||||
| Set Limit Exempt | 26608038 | 64 days ago | IN | 0 ETH | 0.0000059 | ||||
| Approve | 26466266 | 65 days ago | IN | 0 ETH | 0.00000648 | ||||
| Approve | 26457627 | 65 days ago | IN | 0 ETH | 0.00000643 | ||||
| Approve | 26449217 | 65 days ago | IN | 0 ETH | 0.00000627 | ||||
| Manual Swap | 26448349 | 65 days ago | IN | 0 ETH | 0.00000701 | ||||
| Manual Swap | 26447412 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Manual Swap | 26446340 | 65 days ago | IN | 0 ETH | 0.00000759 | ||||
| Manual Swap | 26445316 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Manual Swap | 26444308 | 65 days ago | IN | 0 ETH | 0.00000686 | ||||
| Approve | 26444154 | 65 days ago | IN | 0 ETH | 0.00000643 | ||||
| Manual Swap | 26443348 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Approve | 26443328 | 65 days ago | IN | 0 ETH | 0.00000598 | ||||
| Manual Swap | 26442289 | 65 days ago | IN | 0 ETH | 0.00000759 | ||||
| Manual Swap | 26441139 | 65 days ago | IN | 0 ETH | 0.00000759 | ||||
| Manual Swap | 26439995 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Manual Swap | 26438846 | 65 days ago | IN | 0 ETH | 0.00000686 | ||||
| Manual Swap | 26437802 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Approve | 26437729 | 65 days ago | IN | 0 ETH | 0.00000628 | ||||
| Transfer | 26436906 | 65 days ago | IN | 0 ETH | 0.00000946 | ||||
| Manual Swap | 26436696 | 65 days ago | IN | 0 ETH | 0.00000759 | ||||
| Manual Swap | 26435662 | 65 days ago | IN | 0 ETH | 0.00000619 | ||||
| Approve | 26435517 | 65 days ago | IN | 0 ETH | 0.00000555 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 26410669 | 65 days ago | 0.000022 ETH | ||||
| 26410669 | 65 days ago | 0.0000055 ETH | ||||
| 26410669 | 65 days ago | 0.0000275 ETH | ||||
| 26409293 | 65 days ago | 0.00011284 ETH | ||||
| 26409293 | 65 days ago | 0.00002821 ETH | ||||
| 26409293 | 65 days ago | 0.00014105 ETH | ||||
| 26407765 | 65 days ago | 0.00011288 ETH | ||||
| 26407765 | 65 days ago | 0.00002822 ETH | ||||
| 26407765 | 65 days ago | 0.0001411 ETH | ||||
| 26340997 | 65 days ago | 0.00002748 ETH | ||||
| 26340997 | 65 days ago | 0.00000687 ETH | ||||
| 26340997 | 65 days ago | 0.00003435 ETH | ||||
| 26339656 | 65 days ago | 0.00011367 ETH | ||||
| 26339656 | 65 days ago | 0.00002841 ETH | ||||
| 26339656 | 65 days ago | 0.00014209 ETH | ||||
| 26338293 | 65 days ago | 0.00011371 ETH | ||||
| 26338293 | 65 days ago | 0.00002842 ETH | ||||
| 26338293 | 65 days ago | 0.00014214 ETH | ||||
| 26337076 | 65 days ago | 0.00011375 ETH | ||||
| 26337076 | 65 days ago | 0.00002843 ETH | ||||
| 26337076 | 65 days ago | 0.00014219 ETH | ||||
| 26336003 | 65 days ago | 0.00011379 ETH | ||||
| 26336003 | 65 days ago | 0.00002844 ETH | ||||
| 26336003 | 65 days ago | 0.00014224 ETH | ||||
| 26334896 | 65 days ago | 0.00011383 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BigStratToken
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* BigStrategy
* - Collects transfer fees on market trades
* - Swap-back converts accumulated fee tokens to ETH
* - Distributes ETH to ops/collector (80/20)
*/
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "../interfaces/IUniswapV2Router02.sol";
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address);
function getPair(address tokenA, address tokenB) external view returns (address);
}
interface IUniswapV2Pair {
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
interface IWETH {
function deposit() external payable;
}
interface IFeeCollector {
function receiveETH() external payable;
}
contract BigStratToken is ERC20, Ownable, ReentrancyGuard {
// ====== Configuration ======
uint16 public constant MAX_FEE_BPS = 9500; // 95% hard cap
uint16 public constant BPS_DENOM = 10000; // 100% in basis points
uint16 public constant OPS_SHARE_BPS = 2000; // 20% of ETH to ops
uint16 public constant COLLECTOR_SHARE_BPS = 8000; // 80% of ETH to collector
uint16 public totalFeeBps = 1000; // 10% base fee after launch window
address payable public opsWallet;
address public feeCollector;
address public buybackManager;
address payable public coordinator;
IUniswapV2Router02 public immutable router;
address public pair; // Uniswap V2 pair (market)
address public immutable WETH;
bool public tradingEnabled = false;
mapping(address => bool) public feeExempt;
mapping(address => bool) public isMarket; // mark the pair
// swap-back for accumulated tokens
bool public swapEnabled = true;
bool private inSwap;
uint256 public swapThreshold = 200000 * 10 ** 18; // tokens threshold
uint256 public maxSwapAmount = 250000 * 10 ** 18; // tokens max per swap
// anti-whale limits
uint256 public maxWallet; // in token wei
uint256 public maxTx; // in token wei
bool public limitsEnabled = true;
mapping(address => bool) public limitExempt;
// Total ETH from fees (in wei)
uint256 public totalETHFromFees;
// Aggregated accounting for analytics
uint256 public totalTokensTakenAsFees; // total fee tokens collected
uint256 public totalTokensSwappedForETH; // total tokens swapped into ETH
uint256 public totalETHToOps; // total ETH sent to ops wallet
uint256 public totalETHToCollector; // total ETH sent to fee collector
uint256 public lastSwapTimestamp; // last swap-back/manual swap timestamp
uint256 public swapBackCount; // number of swap-back/manual swaps
// (No launch protection in Pengu-style flow)
// ====== Events ======
event FeeTaken(uint256 amount, address from);
event SwapBackExecuted(
uint256 tokensSold,
uint256 ethReceived,
uint256 toOps,
uint256 toCollector
);
event ManualSwapExecuted(uint256 tokensSold, uint256 ethReceived, uint256 toOps, uint256 toCollector);
event CoordinatorUpdated(address indexed newCoordinator);
event FeesUpdated(uint16 totalFeeBps);
event WalletsUpdated(
address indexed opsWallet,
address indexed feeCollector,
address indexed buybackManager
);
event MarketSet(address indexed account, bool isMarket);
event FeeExemptSet(address indexed account, bool isExempt);
event TradingEnabled();
event SwapSettingsSet(uint256 threshold, uint256 maxSwap, bool enabled);
event LimitsUpdated(uint256 maxTx, uint256 maxWallet, bool enabled);
event LimitExemptSet(address indexed account, bool isExempt);
event SwapErrorDetails(string reason, bytes data);
// ====== Errors ======
error TradingDisabled();
error ZeroAddress();
error FeeTooHigh();
error MaxTxExceeded();
error MaxWalletExceeded();
error SwapFailed();
error InvalidInput();
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
// manual ops reserved
modifier onlyCoordinatorOrOwner() {
require(msg.sender == owner() || msg.sender == coordinator, "Not authorized");
_;
}
constructor(
string memory name_,
string memory symbol_,
uint256 initialSupply,
address payable opsWallet_,
address feeCollector_,
address buybackManager_,
address router_,
address weth_
) ERC20(name_, symbol_) Ownable(msg.sender) {
if (
opsWallet_ == address(0) ||
feeCollector_ == address(0) ||
router_ == address(0) ||
weth_ == address(0)
) revert ZeroAddress();
opsWallet = opsWallet_;
feeCollector = feeCollector_;
buybackManager = buybackManager_; // Can be zero initially
router = IUniswapV2Router02(router_);
WETH = weth_;
// Create the V2 pair (token <-> WETH)
pair = address(0); // Will be created after deployment
// Mint supply to deployer
_mint(msg.sender, initialSupply);
// Fee exemptions
feeExempt[address(this)] = true;
feeExempt[msg.sender] = true;
feeExempt[opsWallet] = true;
feeExempt[feeCollector] = true;
if (buybackManager_ != address(0)) {
feeExempt[buybackManager_] = true;
}
// Anti-whale limits: 2% max wallet, 1% max tx
maxWallet = (initialSupply * 2) / 100; // 2% of supply
maxTx = (initialSupply * 1) / 100; // 1% of supply
// Limit exemptions
limitExempt[owner()] = true;
limitExempt[address(this)] = true;
limitExempt[opsWallet] = true;
limitExempt[feeCollector] = true;
if (buybackManager_ != address(0)) {
limitExempt[buybackManager_] = true;
}
}
// ====== Core transfer with fees ======
function _update(
address from,
address to,
uint256 amount
) internal override {
bool _tradingEnabled = tradingEnabled;
bool _swapEnabled = swapEnabled;
bool _inSwap = inSwap;
uint16 _effectiveFeeBps = totalFeeBps;
// Owner can always move pre-launch
if (!_tradingEnabled && from != owner() && to != owner()) {
revert TradingDisabled();
}
bool marketFrom = isMarket[from];
bool marketTo = isMarket[to];
uint256 feeAmount = (amount * _effectiveFeeBps) / BPS_DENOM;
uint256 transferAmount = amount - feeAmount;
// Apply anti-whale limits first
_enforceTransactionLimits(
from,
to,
transferAmount,
marketFrom,
marketTo
);
// no launch cooldown in Pengu flow
// Cache fee exemption status
bool fromExempt = feeExempt[from];
bool toExempt = feeExempt[to];
// Determine if fee should be taken
bool shouldTakeFee = _tradingEnabled &&
!fromExempt &&
!toExempt &&
(marketFrom || marketTo);
// no timed launch protection window in Pengu flow
// Execute swap-back on sells
if (_swapEnabled && !_inSwap && marketTo && from != address(this)) {
_swapBack();
}
// Process transfer with or without fees
if (!shouldTakeFee) {
super._update(from, to, amount);
return;
}
super._update(from, to, transferAmount);
super._update(from, address(this), feeAmount);
// track fee tokens collected
totalTokensTakenAsFees += feeAmount;
emit FeeTaken(feeAmount, from);
}
// no dynamic launch fee in Pengu flow
// no cooldown
// ====== Anti-whale limit enforcement ======
function _enforceTransactionLimits(
address from,
address to,
uint256 amount,
bool marketFrom,
bool marketTo
) private view {
// Ignore internal/contract flows to avoid maxTx reverts during swapback
if (inSwap || from == address(this) || to == address(this)) {
return;
}
if (!limitsEnabled || !tradingEnabled) {
return;
}
// Only skip when BOTH sides are exempt (owner<->treasury moves, etc.)
if (limitExempt[from] && limitExempt[to]) {
return;
}
// Check max transaction limit
if (amount > maxTx) revert MaxTxExceeded();
// Check max wallet limit for recipients (except when selling to pair)
if (!marketTo && to != address(0)) {
uint256 potentialFee = 0;
bool hasMarketFee = !feeExempt[from] &&
!feeExempt[to] &&
(marketFrom || marketTo);
if (hasMarketFee) {
potentialFee = (amount * totalFeeBps) / BPS_DENOM;
}
uint256 finalAmount = amount - potentialFee;
if (balanceOf(to) + finalAmount > maxWallet)
revert MaxWalletExceeded();
}
}
// Swap-back (Pengu-style, 1-1)
function _swapBack() private lockTheSwap nonReentrant {
if (pair == address(0)) return;
uint256 tokenBal = balanceOf(address(this));
if (tokenBal < swapThreshold) return;
uint256 amountToSwap = tokenBal > maxSwapAmount
? maxSwapAmount
: tokenBal;
// approve router
_approve(address(this), address(router), amountToSwap);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
uint256 pre = address(this).balance;
try
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp + 300
)
{
uint256 got = address(this).balance - pre;
if (got > 0) {
uint256 toOps = (got * OPS_SHARE_BPS) / BPS_DENOM;
uint256 toCollector = got - toOps;
_distributeETH(got);
emit SwapBackExecuted(amountToSwap, got, toOps, toCollector);
}
} catch {
// Swap failed, tokens remain in contract for next attempt
}
}
// Split ETH to ops and collector
function _distributeETH(uint256 ethAmount) private {
if (ethAmount == 0) return;
// Update total ETH from fees
totalETHFromFees += ethAmount;
uint256 toOps = (ethAmount * OPS_SHARE_BPS) / BPS_DENOM;
uint256 toCollector = ethAmount - toOps;
totalETHToOps += toOps;
totalETHToCollector += toCollector;
if (toOps > 0) _sendETHOrWrap(opsWallet, toOps);
if (toCollector > 0) {
// Prefer explicit collector hook if available
(bool ok, ) = address(feeCollector).call{value: toCollector}(abi.encodeWithSelector(IFeeCollector.receiveETH.selector));
if (!ok) {
_sendETHOrWrap(payable(feeCollector), toCollector);
}
}
// no coordinator share
}
function _sendETHOrWrap(address payable to, uint256 amount) private {
(bool success, ) = to.call{value: amount}("");
if (!success) {
// Wrap to WETH and transfer as ERC20
IWETH(WETH).deposit{value: amount}();
bool ok = ERC20(WETH).transfer(to, amount);
if (!ok) revert SwapFailed();
}
}
// ====== Admin Functions ======
function createPair() external onlyOwner {
if (pair != address(0)) revert InvalidInput();
address factory = router.factory();
address existingPair = IUniswapV2Factory(factory).getPair(
address(this),
WETH
);
if (existingPair != address(0)) {
pair = existingPair;
} else {
pair = IUniswapV2Factory(factory).createPair(address(this), WETH);
}
isMarket[pair] = true;
emit MarketSet(pair, true);
}
function enableTrading() external onlyOwner {
tradingEnabled = true;
emit TradingEnabled();
}
function setFeeBps(uint16 newTotal) external onlyOwner {
if (newTotal > MAX_FEE_BPS) revert FeeTooHigh();
totalFeeBps = newTotal;
emit FeesUpdated(newTotal);
}
function setWallets(
address payable newOpsWallet,
address newFeeCollector,
address newBuybackManager
) external onlyOwner {
if (newOpsWallet == address(0) || newFeeCollector == address(0))
revert ZeroAddress();
opsWallet = newOpsWallet;
feeCollector = newFeeCollector;
// Update buyback manager
if (buybackManager != address(0)) {
feeExempt[buybackManager] = false;
limitExempt[buybackManager] = false;
}
buybackManager = newBuybackManager;
// Set exemptions
feeExempt[newOpsWallet] = true;
feeExempt[newFeeCollector] = true;
limitExempt[newOpsWallet] = true;
limitExempt[newFeeCollector] = true;
if (newBuybackManager != address(0)) {
feeExempt[newBuybackManager] = true;
limitExempt[newBuybackManager] = true;
}
emit WalletsUpdated(newOpsWallet, newFeeCollector, newBuybackManager);
}
function setMarket(address account, bool v) external onlyOwner {
if (account == address(0)) revert ZeroAddress();
isMarket[account] = v;
emit MarketSet(account, v);
}
function setFeeExempt(address account, bool v) external onlyOwner {
if (account == address(0)) revert ZeroAddress();
feeExempt[account] = v;
emit FeeExemptSet(account, v);
}
function setSwapSettings(
uint256 threshold,
uint256 maxAmt,
bool enabled
) external onlyOwner {
swapThreshold = threshold;
maxSwapAmount = maxAmt;
swapEnabled = enabled;
emit SwapSettingsSet(threshold, maxAmt, enabled);
}
function setLimits(
uint256 newMaxTx,
uint256 newMaxWallet,
bool enabled
) external onlyOwner {
// disable limits by default; if enabled later, require sane inputs
if (enabled) {
if (newMaxTx == 0 || newMaxWallet == 0) revert InvalidInput();
if (newMaxWallet < newMaxTx) revert InvalidInput();
}
maxTx = newMaxTx;
maxWallet = newMaxWallet;
limitsEnabled = enabled;
emit LimitsUpdated(newMaxTx, newMaxWallet, enabled);
}
function setLimitExempt(address account, bool v) external onlyOwner {
if (account == address(0)) revert ZeroAddress();
limitExempt[account] = v;
emit LimitExemptSet(account, v);
}
// (no launch admin controls)
// Manual swap (Pengu-style, 1-1)
function manualSwap(uint256 amount) external onlyCoordinatorOrOwner lockTheSwap nonReentrant {
uint256 bal = balanceOf(address(this));
if (amount == 0 || amount > bal) amount = bal;
if (bal == 0) return;
_approve(address(this), address(router), amount);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
uint256 pre = address(this).balance;
try
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount,
0,
path,
address(this),
block.timestamp + 300
)
{
uint256 got = address(this).balance - pre;
if (got > 0) {
_distributeETH(got);
}
} catch {
revert SwapFailed();
}
}
// Calculate minimum tokens required to obtain at least 1 wei ETH out with 0.3% fee
function minTokensForOneWeiOut() public view returns (uint256) {
if (pair == address(0)) return 0;
(uint112 r0, uint112 r1, ) = IUniswapV2Pair(pair).getReserves();
if (r0 == 0 || r1 == 0) return type(uint256).max;
address t0 = IUniswapV2Pair(pair).token0();
(uint256 reserveIn, uint256 reserveOut) = t0 == address(this) ? (uint256(r0), uint256(r1)) : (uint256(r1), uint256(r0));
if (reserveOut <= 1) return type(uint256).max;
// amountIn = ceil( (reserveIn * amountOut * 1000) / ((reserveOut - amountOut) * 997) )
uint256 numerator = reserveIn * 1 * 1000;
uint256 denominator = (reserveOut - 1) * 997;
uint256 q = numerator / denominator;
if (q * denominator < numerator) q += 1; // ceil division
return q;
}
// Manual swap that ensures at least 1 wei output to avoid pair-level zero-out reverts
function manualSwapAtLeastOneWei(uint256 maxTokens) external onlyCoordinatorOrOwner lockTheSwap nonReentrant {
uint256 bal = balanceOf(address(this));
if (bal == 0) return;
uint256 need = minTokensForOneWeiOut();
if (need == type(uint256).max) revert SwapFailed();
uint256 amount = bal;
if (maxTokens > 0 && amount > maxTokens) amount = maxTokens;
if (amount < need) return; // not enough to get nonzero ETH
_approve(address(this), address(router), amount);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
uint256 pre = address(this).balance;
try router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount,
0,
path,
address(this),
block.timestamp + 300
) {
uint256 got = address(this).balance - pre;
if (got > 0) {
totalTokensSwappedForETH += amount;
lastSwapTimestamp = block.timestamp;
swapBackCount += 1;
_distributeETH(got);
uint256 toOps = (got * OPS_SHARE_BPS) / BPS_DENOM;
emit ManualSwapExecuted(amount, got, toOps, got - toOps);
}
} catch {
revert SwapFailed();
}
}
// Allow owner to deposit ETH and distribute immediately according to shares
function depositAndDistribute() external payable onlyOwner {
_distributeETH(msg.value);
}
function setCoordinator(address payable newCoordinator) external onlyOwner {
require(newCoordinator != address(0), "Zero address");
coordinator = newCoordinator;
emit CoordinatorUpdated(newCoordinator);
}
// Chunked manual swap to cope with thin liquidity; sells up to maxChunks of chunkSize each
function manualSwapChunks(uint256 chunkSize, uint256 maxChunks) external onlyOwner lockTheSwap nonReentrant {
if (chunkSize == 0 || maxChunks == 0) revert InvalidInput();
uint256 remaining = balanceOf(address(this));
if (remaining == 0) return;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
uint256 iterations = 0;
while (remaining > 0 && iterations < maxChunks) {
uint256 amt = remaining > chunkSize ? chunkSize : remaining;
// approve router for this chunk
_approve(address(this), address(router), amt);
uint256 pre = address(this).balance;
try router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amt,
0,
path,
address(this),
block.timestamp + 300
) {
uint256 got = address(this).balance - pre;
if (got > 0) {
totalTokensSwappedForETH += amt;
lastSwapTimestamp = block.timestamp;
swapBackCount += 1;
_distributeETH(got);
} else {
// if zero out, break to avoid wasting gas
break;
}
} catch {
// stop on failure to avoid wasting gas
break;
}
remaining = balanceOf(address(this));
unchecked { iterations++; }
}
}
// rescue
function rescueETH(uint256 amount) external onlyOwner {
(bool ok, ) = owner().call{value: amount}("");
if (!ok) revert SwapFailed();
}
function rescueToken(address token, uint256 amount) external onlyOwner {
if (token == address(this)) revert InvalidInput();
ERC20(token).transfer(owner(), amount);
}
// ====== View Functions ======
function getCirculatingSupply() external view returns (uint256) {
return totalSupply() - balanceOf(address(0)) - balanceOf(address(0x000000000000000000000000000000000000dEaD));
}
function isExcludedFromFee(address account) external view returns (bool) {
return feeExempt[account];
}
function isExcludedFromLimit(address account) external view returns (bool) {
return limitExempt[account];
}
function getTokensInContract() external view returns (uint256) {
return balanceOf(address(this));
}
function getTotalETHFromFees() external view returns (uint256) {
return totalETHFromFees;
}
/// Returns the current effective fee in basis points (dynamic during launch window)
function getEffectiveFeeBps() external view returns (uint16) {
return totalFeeBps;
}
// Aggregated fee statistics
function getFeeStats()
external
view
returns (
uint256 tokensInContract,
uint256 tokensTakenAsFees,
uint256 tokensSwappedForETH,
uint256 ethFromFees,
uint256 ethToOps,
uint256 ethToCollector
)
{
return (
balanceOf(address(this)),
totalTokensTakenAsFees,
totalTokensSwappedForETH,
totalETHFromFees,
totalETHToOps,
totalETHToCollector
);
}
// Compact view helpers for UI
function getLaunchPhase() external pure returns (uint8 phase, uint256 secondsToNext) {
return (0, 0);
}
function getStatus()
external
view
returns (
bool _tradingEnabled,
bool _launchProtectionEnabled,
uint16 _effectiveFee,
uint16 _baseFee,
uint256 _swapBackCount,
uint256 _lastSwapTs,
uint256 _ethFromFees,
uint256 _ethToOps,
uint256 _ethToCollector,
uint256 _tokensInContract,
uint256 _tokensTakenAsFees,
uint256 _tokensSwappedForETH,
bool _limitsEnabled,
uint256 _maxTx,
uint256 _maxWallet
)
{
return (
tradingEnabled,
false,
totalFeeBps,
totalFeeBps,
swapBackCount,
lastSwapTimestamp,
totalETHFromFees,
totalETHToOps,
totalETHToCollector,
balanceOf(address(this)),
totalTokensTakenAsFees,
totalTokensSwappedForETH,
limitsEnabled,
maxTx,
maxWallet
);
}
// ====== Receive ETH ======
receive() external payable {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external view returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function getAmountsOut(uint amountIn, address[] calldata path)
external view returns (uint[] memory amounts);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
function swapExactTokensForETH(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC-20
* applications.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* Both values are immutable: they can only be set once during construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/// @inheritdoc IERC20
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/// @inheritdoc IERC20
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/// @inheritdoc IERC20
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
*
* ```solidity
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner`'s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity >=0.6.2;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC-20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)
pragma solidity >=0.8.4;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "shanghai",
"viaIR": true,
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address payable","name":"opsWallet_","type":"address"},{"internalType":"address","name":"feeCollector_","type":"address"},{"internalType":"address","name":"buybackManager_","type":"address"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"weth_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[],"name":"MaxTxExceeded","type":"error"},{"inputs":[],"name":"MaxWalletExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SwapFailed","type":"error"},{"inputs":[],"name":"TradingDisabled","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newCoordinator","type":"address"}],"name":"CoordinatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"}],"name":"FeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"totalFeeBps","type":"uint16"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"LimitExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toOps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toCollector","type":"uint256"}],"name":"ManualSwapExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isMarket","type":"bool"}],"name":"MarketSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toOps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toCollector","type":"uint256"}],"name":"SwapBackExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"SwapErrorDetails","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSwap","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"opsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"feeCollector","type":"address"},{"indexed":true,"internalType":"address","name":"buybackManager","type":"address"}],"name":"WalletsUpdated","type":"event"},{"inputs":[],"name":"BPS_DENOM","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTOR_SHARE_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPS_SHARE_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coordinator","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositAndDistribute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEffectiveFeeBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeStats","outputs":[{"internalType":"uint256","name":"tokensInContract","type":"uint256"},{"internalType":"uint256","name":"tokensTakenAsFees","type":"uint256"},{"internalType":"uint256","name":"tokensSwappedForETH","type":"uint256"},{"internalType":"uint256","name":"ethFromFees","type":"uint256"},{"internalType":"uint256","name":"ethToOps","type":"uint256"},{"internalType":"uint256","name":"ethToCollector","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLaunchPhase","outputs":[{"internalType":"uint8","name":"phase","type":"uint8"},{"internalType":"uint256","name":"secondsToNext","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"bool","name":"_tradingEnabled","type":"bool"},{"internalType":"bool","name":"_launchProtectionEnabled","type":"bool"},{"internalType":"uint16","name":"_effectiveFee","type":"uint16"},{"internalType":"uint16","name":"_baseFee","type":"uint16"},{"internalType":"uint256","name":"_swapBackCount","type":"uint256"},{"internalType":"uint256","name":"_lastSwapTs","type":"uint256"},{"internalType":"uint256","name":"_ethFromFees","type":"uint256"},{"internalType":"uint256","name":"_ethToOps","type":"uint256"},{"internalType":"uint256","name":"_ethToCollector","type":"uint256"},{"internalType":"uint256","name":"_tokensInContract","type":"uint256"},{"internalType":"uint256","name":"_tokensTakenAsFees","type":"uint256"},{"internalType":"uint256","name":"_tokensSwappedForETH","type":"uint256"},{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensInContract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalETHFromFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"limitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"manualSwapAtLeastOneWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chunkSize","type":"uint256"},{"internalType":"uint256","name":"maxChunks","type":"uint256"}],"name":"manualSwapChunks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensForOneWeiOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newCoordinator","type":"address"}],"name":"setCoordinator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newTotal","type":"uint16"}],"name":"setFeeBps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"v","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"v","type":"bool"}],"name":"setLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"},{"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"v","type":"bool"}],"name":"setMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"maxAmt","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOpsWallet","type":"address"},{"internalType":"address","name":"newFeeCollector","type":"address"},{"internalType":"address","name":"newBuybackManager","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHFromFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHToCollector","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHToOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSwappedForETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensTakenAsFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060409080825234620007235762003e2480380380916200002282856200073b565b8339810161010082820312620007235781516001600160401b038111620007235781620000519184016200077b565b602083015190916001600160401b0382116200072357620000749184016200077b565b828401516060840151909290916001600160a01b03831683036200072357620000a060808601620007e3565b620000ae60a08701620007e3565b91620000cb60e0620000c360c08a01620007e3565b9801620007e3565b845190946001600160401b038211620005fb5760035490600182811c9216801562000718575b6020831014620005dc5781601f849311620006a8575b50602090601f83116001146200061b575f926200060f575b50508160011b915f199060031b1c1916176003555b8051906001600160401b038211620005fb5760045490600182811c92168015620005f0575b6020831014620005dc5781601f8493116200056c575b50602090601f8311600114620004df575f92620004d3575b50508160011b915f199060031b1c1916176004555b3315620004bc5760058054336001600160a01b03198216811790925588519591906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3600160065560075490600b5495600160ff19600e541617600e55692a5a058fc295ed000000600f556934f086f3b33b68400000601055600160ff19601354161760135560018060a01b038216158015620004aa575b801562000498575b801562000486575b6200047757506001600160b01b031990911660109190911b62010000600160b01b0316176103e817600755600880546001600160a01b03199081166001600160a01b03938416179091556009805490911692821692831790559490941660805260a0526001600160a81b031916600b55620002cb813362000840565b305f908152600c602052838120805460ff199081166001908117909255338352858320805482168317905560075460101c6001600160a01b0390811684528684208054831684179055600854168352918590208054909216179055811515908162000460575b8060011b8115908281046002148217156200044c576064900460115581800460011417156200044c57606490046012556005546001600160a01b039081165f90815260146020528481208054600160ff199182168117909255308352868320805482168317905560075460101c841683528683208054821683179055600854909316825290859020805490921617905562000435575b5051612c8890816200119c8239608051818181610359015281816108bd0152818161207f015281816124fa0152818161286d0152612ae0015260a05181818161075601528181610907015281816120db0152818161239101528181612557015281816128c80152612aba0152f35b5f52805f20600160ff198254161790555f620003c7565b634e487b7160e01b5f52601160045260245ffd5b825f52835f20600160ff1982541617905562000331565b63d92e233d60e01b8152600490fd5b506001600160a01b038616156200024f565b506001600160a01b0389161562000247565b506001600160a01b038416156200023f565b8651631e4fbdf760e01b81525f6004820152602490fd5b015190505f8062000187565b60045f90815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f198416851062000550576001945083601f1981161062000537575b505050811b016004556200019c565b01515f1960f88460031b161c191690555f808062000528565b818101518355602094850194600190930192909101906200050b565b60045f529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810160208510620005d4575b90849392915b601f830160051c82018110620005c55750506200016f565b5f8155859450600101620005ad565b5080620005a7565b634e487b7160e01b5f52602260045260245ffd5b91607f169162000159565b634e487b7160e01b5f52604160045260245ffd5b015190505f806200011f565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b91905b601f19841685106200068c576001945083601f1981161062000673575b505050811b0160035562000134565b01515f1960f88460031b161c191690555f808062000664565b8181015183556020948501946001909301929091019062000647565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81016020851062000710575b90849392915b601f830160051c820181106200070157505062000107565b5f8155859450600101620006e9565b5080620006e3565b91607f1691620000f1565b5f80fd5b6001600160401b038111620005fb57604052565b601f909101601f19168101906001600160401b03821190821017620005fb57604052565b6001600160401b038111620005fb57601f01601f191660200190565b919080601f84011215620007235782519062000797826200075f565b91620007a760405193846200073b565b80835260209182828701011162000723575f5b818110620007cf5750825f9394955001015290565b8581018301518482018401528201620007ba565b51906001600160a01b03821682036200072357565b906107d0918281029281840414901517156200044c57565b818102929181159184041417156200044c57565b919082039182116200044c57565b919082018092116200044c57565b9060ff9081600b5460a01c16600e54928084169261ffff600754169280158062000a51575b8062000a38575b62000a2657620008ca95620008c295620008b889955f97888052600d6020528860409b8c928a6127108680878720541696879360018060a01b0316968781522054169788938d62000810565b049d8e8c62000824565b809c62000ad7565b898052600c602052828c8b205416908a52828c8b205416908762000a1c575b508662000a12575b5085620009f7575b5082620009e7575b5081620009de575b5080620009d4575b62000988575b50156200097657506200094c907f0dec4d9696755d06066685c7df867851d2d13a61c8c68e440b7180ff810057589562000a66565b62000958823062000a66565b620009668260165462000832565b60165582519182526020820152a1565b9350505050620009869162000a66565b565b61ff001990811661010017600e55600654600214620009c3576002600655620009b062000c8d565b6001600655600e5416600e555f62000917565b8651633ee5aeb560e01b8152600490fd5b5030151562000911565b90505f62000909565b600884901c161591505f62000901565b909450801562000a0a575b935f620008f9565b508062000a02565b1595505f620008f1565b1596505f620008e9565b60405163bcb8b8fb60e01b8152600490fd5b506005546001600160a01b03888116911614156200086c565b506005546001600160a01b0316151562000865565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60205f9262000a998560025462000832565b6002556001600160a01b0316938415841462000ac15780600254036002555b604051908152a3565b8484528382526040842081815401905562000ab8565b909160ff9081600e5460081c16801562000c84575b801562000c71575b62000c5a57816013541615801562000c61575b62000c5a575f9081805260146020526040958387842054168062000c41575b62000b4457601254861162000c305780158062000c1d575b62000b4d575b50505050505050565b62000ba195879462000b87938593868052600c60205282888820541615928362000c02575b508262000be5575b505062000bc65762000824565b6001600160a01b0390931681526020819052205462000832565b6011541062000bb65780808080808062000b44565b51632ce93b5960e01b8152600490fd5b905061271062000bdd61ffff600754168362000810565b049062000824565b909150811562000bf9575b505f8062000b7a565b90505f62000bf0565b6001600160a01b038a16885288882054161592505f62000b72565b506001600160a01b038516151562000b3e565b865163136c002360e21b8152600490fd5b506001600160a01b038516835286832054841662000b26565b5050505050565b5081600b5460a01c161562000b07565b506001600160a01b038316301462000af4565b50301562000aec565b600b546001600160a01b039081161562000f2e575f30815260209181835260409182812054600f54811062000c5a57601054908181111562000f255750915b806080511691301562000f0e57821562000ef7573081526001928387528582208183528752848683205585518581527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925883092a3845192606084016001600160401b0381118582101762000ee3578652600284528684018636823784511562000ecf573081528360a05116855183101562000ebb5787860152479484608051169261012c42019182421162000ea757843b1562000ea357939290959185928a5197889663791ac94760e01b885260a48801908c60048a01528660248a015260a060448a0152518091528d60c48901959387915b83831062000e84575050505050508492918391306064840152608483015203925af1908162000e72575b5062000df6575b50505050565b62000e02904762000824565b92831562000df0578360809361271062000e3d7fa784084d89a471321177859c54b5a997327e57e23e5c8d15167418fba7d1dc7f97620007f8565b049162000e4b838262000824565b9362000e578262000f65565b82519586528501528301526060820152a15f80808062000df0565b62000e7d9062000727565b5f62000de9565b8551821688528c9a508b98509687019690940193908301908f62000dbf565b8580fd5b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b84526032600452602484fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b83526041600452602483fd5b602490855190634a1406b160e11b82526004820152fd5b60249085519063e602df0560e01b82526004820152fd5b90509162000ccc565b50565b3d1562000f60573d9062000f45826200075f565b9162000f5560405193846200073b565b82523d5f602084013e565b606090565b801562000f2e5762000f7a8160155462000832565b60155562000f9861271062000f8f83620007f8565b04809262000824565b9062000fa78160185462000832565b60185562000fb88260195462000832565b601955806200103b575b508062000fcc5750565b60085460408051631f67ea8f60e11b60208201908152600482526001600160a01b039493928201928516906001600160401b03841183851017620005fb57845f9493859460405251925af16200102162000f31565b50156200102c575050565b6200098691600854166200105d565b60075462001056919060101c6001600160a01b03166200105d565b5f62000fc2565b6001600160a01b03908116915f908180808084885af16200107d62000f31565b50156200108a5750505050565b8260a05116803b156200119757828291600460405180948193630d0e30db60e41b83525af180156200118c5762001174575b5060446020929360a051169484604051968794859363a9059cbb60e01b8552600485015260248401525af1918215620011675781926200111b575b50501562001109575f80808062000df0565b60405163081ceff360e41b8152600490fd5b9091506020813d82116200115e575b8162001139602093836200073b565b810103126200115a57519081151582036200115757505f80620010f7565b80fd5b5080fd5b3d91506200112a565b50604051903d90823e3d90fd5b6020926200118460449262000727565b9250620010bc565b6040513d85823e3d90fd5b8280fdfe608060405260048036101561001c575b50361561001a575f80fd5b005b5f90813560e01c908163023b1fc91461182b5781630445b6671461180d57816306fdde0314611719578163095ea7b3146116f25781630a009097146116c957816315bcf9b71461164857816318160ddd1461162a57816320a8d3fb1461058a57816323b872dd146115385781632b112e49146114f8578163313ce567146114dc57816333f3d628146114365781633582ad231461141357816336ad19e714610690578163398daa85146112545781633c2f1806146113ed57816340a24e6c1461136c5781634ada218b146113465781634e69d560146112935781635342acb4146112545781635c3e156c146112375781635e8ae032146111e15781636637e38c146111c457816368db925a146111975781636ddd1713146111745781636ec934da146111355781636f1fe84c1461111a57816370a08231146110d9578163715018a61461107c578163715a05741461105e5781637437681e14611040578163758c6c9d1461102257816375cb1bd114610e8f5781637f5853c414610e6f5781638a8c523c14610e1c5781638d32ca8b14610df35781638da5cb5b14610dca5781638db4dd4314610da95781638ea9811714610d095781638ebfc79614610c6d5781639015d71414610c4f57816395d89b4114610b4b5781639cfbafcd14610b2d5781639e252f0014610ade5781639e78fb4f14610876578163a467aa93146107fe578163a8aa1b31146107d5578163a9059cbb146107a3578163ab7e380514610785578163ad5c464814610740578163b70143c9146106db578163c415b95c146106b2578163c56f84cf14610690578163cce987d414610672578163cd4082da14610622578163ce83997f14610604578163d50942fb146105e6578163d55be8c6146105c9578163d94160e01461058a578163dd62ed3e1461053f578163e3a3b48814610522578163f28ab2be146104d1578163f2fde38b1461043d578163f5736d4b1461038857508063f887ea4014610343578063f8b45b05146103255763fd076d560361000f57346103225780600319360112610322576020601554604051908152f35b80fd5b50346103225780600319360112610322576020601154604051908152f35b50346103225780600319360112610322576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b82346103225761039736611933565b93846103a4939293611956565b610410575b5061040a7fc3e35da80dd50e2a487eb09d9fd3dcfb815ed597fedfcbc93588da440b2d45a39394826012558360115560ff196013541660ff821515161760135560405193849384919260409194936060840195845260208401521515910152565b0390a180f35b81158015610435575b61042657818310156103a9575b60405163b4fa3fb360e01b8152fd5b508215610419565b9050346104cd5760203660031901126104cd576104586118f4565b610460611956565b6001600160a01b039081169182156104b55750600554826bffffffffffffffffffffffff60a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b8152908101849052602490fd5b5080fd5b8234610322578060031936011261032257604060c0913081528060205220546016546017546015546018549160195493604051958652602086015260408501526060840152608083015260a0820152f35b82346103225780600319360112610322576020604051611f408152f35b823461032257604036600319011261032257604060209161055e6118f4565b61056661190e565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b82346103225760203660031901126103225760209060ff906040906001600160a01b036105b56118f4565b168152601484522054166040519015158152f35b8234610322578060031936011261032257602060405161251c8152f35b82346103225780600319360112610322576020601554604051908152f35b82346103225780600319360112610322576020601b54604051908152f35b9050346104cd5760403660031901126104cd5761063d611956565b61066361ff00199161010083600e541617600e55610659612207565b6024359035612a5e565b6001600655600e5416600e5580f35b82346103225780600319360112610322576020601054604051908152f35b8234610322578060031936011261032257602061ffff60075416604051908152f35b82346103225780600319360112610322576008546040516001600160a01b039091168152602090f35b9050346104cd5760203660031901126104cd5760055461071090336001600160a01b0391821614908115610732575b50612490565b61066361ff00199161010083600e541617600e5561072c612207565b356124cd565b9050600a541633145f61070a565b82346103225780600319360112610322576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b82346103225780600319360112610322576020601654604051908152f35b8234610322576040366003190112610322576107ca6107c06118f4565b60243590336119e8565b602060405160018152f35b8234610322578060031936011261032257600b546040516001600160a01b039091168152602090f35b8234610322577faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f961040a61083136611933565b61083c939193611956565b82600f558360105560ff19600e541660ff8215151617600e5560405193849384919260409194936060840195845260208401521515910152565b9050346104cd57816003193601126104cd57610890611956565b600b80549091906001600160a01b03908116610ace5760405163c45a015560e01b815260209390848185817f000000000000000000000000000000000000000000000000000000000000000087165afa8015610ac35783918791610aa6575b506040805163e6a4390560e01b8152308782019081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811660208301529194919390911691889185918291010381845afa928315610a9b57879386918a91610a7e575b50169586156109c857505050507fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a926bffffffffffffffffffffffff60a01b8254161781555b818154168552600d845260408520600160ff1982541617905554169160405160018152a280f35b604080516364e329cb60e11b8152309281019283526001600160a01b039094166020830152929650869283918a9183910103925af1928315610a73577fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a9383918791610a46575b5082546001600160a01b03191691161781556109a1565b610a669150863d8811610a6c575b610a5e81836119c6565b810190612471565b5f610a2f565b503d610a54565b6040513d87823e3d90fd5b610a959150853d8711610a6c57610a5e81836119c6565b5f61095b565b6040513d8a823e3d90fd5b610abd9150863d8811610a6c57610a5e81836119c6565b5f6108ef565b6040513d88823e3d90fd5b5060405163b4fa3fb360e01b8152fd5b9050346104cd5760203660031901126104cd57610af9611956565b81808080843560018060a01b03600554165af1610b1461222a565b5015610b1e575080f35b60405163081ceff360e41b8152fd5b82346103225780600319360112610322576020601854604051908152f35b823461032257806003193601126103225760405190809280549160019083821c92828516948515610c45575b6020958686108114610c3257858852908115610c0e5750600114610bb6575b610bb286610ba6818a03826119c6565b604051918291826118ad565b0390f35b81529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610bfb5750505081610bb293610ba692820101938580610b96565b8054858501870152928501928101610bdd565b60ff19168787015250505050151560051b8201019150610ba681610bb28580610b96565b634e487b7160e01b845260228352602484fd5b93607f1693610b77565b82346103225780600319360112610322576020601754604051908152f35b9050346104cd5760403660031901126104cd57610c886118f4565b610c90611924565b90610c99611956565b6001600160a01b0316918215610cfa575060207f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d91838552600c8252610cee81604087209060ff801983541691151516179055565b6040519015158152a280f35b60405163d92e233d60e01b8152fd5b9050346104cd5760203660031901126104cd57610d246118f4565b610d2c611956565b6001600160a01b0316908115610d765750600a80546001600160a01b031916821790557fc258faa9a17ddfdf4130b4acff63a289202e7d5f9e42f366add65368575486bc8280a280f35b60649060206040519162461bcd60e51b8352820152600c60248201526b5a65726f206164647265737360a01b6044820152fd5b82346103225780600319360112610322576040908151908082526020820152f35b82346103225780600319360112610322576005546040516001600160a01b039091168152602090f35b82346103225780600319360112610322576009546040516001600160a01b039091168152602090f35b8234610322578060031936011261032257610e35611956565b600b805460ff60a01b1916600160a01b1790557f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c78180a180f35b828060031936011261032257610e83611956565b610e8c34612269565b80f35b9050346104cd5760603660031901126104cd57610eaa6118f4565b610eb261190e565b916044359260018060a01b039283851680950361101e57610ed1611956565b8381169283158015611014575b610cfa57506007805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055600880546001600160a01b031990811692851692831790915560095491938592811680610fe2575b50506009541617600955808452600c60205260408420600160ff19918183825416179055838652604086208183825416179055828652601460205260408620818382541617905583865260408620818382541617905584610fb7575b50507f2d4c6aa48812a0ea09474a961613c1a3ae652d39a1580cb1ac46ff277e6d385d8480a480f35b848652600c602052604086208183825416179055601460205260408620918254161790555f80610f8e565b8752600c602052604087209060ff19918281541690556009541687526014602052604087209081541690555f80610f32565b5084831615610ede565b8580fd5b82346103225780600319360112610322576020601a54604051908152f35b82346103225780600319360112610322576020601254604051908152f35b82346103225780600319360112610322576020601954604051908152f35b8234610322578060031936011261032257611095611956565b600580546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b82346103225760203660031901126103225760206111126110f86118f4565b6001600160a01b03165f9081526020819052604090205490565b604051908152f35b8234610322578060031936011261032257602061111261262b565b82346103225760203660031901126103225760209060ff906040906001600160a01b036111606118f4565b168152600d84522054166040519015158152f35b8234610322578060031936011261032257602060ff600e54166040519015158152f35b823461032257806003193601126103225760075460405160109190911c6001600160a01b03168152602090f35b823461032257806003193601126103225760206040516127108152f35b9050346104cd5760203660031901126104cd5760055461121590336001600160a01b03918216149081156107325750612490565b61066361ff00199161010083600e541617600e55611231612207565b35612822565b823461032257806003193601126103225760206040516107d08152f35b82346103225760203660031901126103225760209060ff906040906001600160a01b0361127f6118f4565b168152600c84522054166040519015158152f35b8234610322578060031936011261032257600b5460075461ffff16601b54601a5460155460185460195430885287602052604088205491601654936017549560135460ff169760125499806011549c6040519e8f9160a01c60ff161515825260208201526040015260608d015260808c015260a08b015260c08a015260e089015261010088015261012087015261014086015261016085015215156101808401526101a08301526101c08201526101e090f35b8234610322578060031936011261032257602060ff600b5460a01c166040519015158152f35b9050346104cd5760403660031901126104cd576113876118f4565b61138f611924565b90611398611956565b6001600160a01b0316918215610cfa575060207f4aed8b8a26c8d87da818b50361f1273864d5b7008289379caa0aa8b7be56a3669183855260148252610cee81604087209060ff801983541691151516179055565b8234610322578060031936011261032257305f9081526020818152604090912054611112565b8234610322578060031936011261032257602060ff601354166040519015158152f35b9050346104cd5760403660031901126104cd576114516118f4565b9061145a611956565b6001600160a01b0391821691308314610ace57906044602092600554169185604051958694859363a9059cbb60e01b855284015260243560248401525af180156114d1576114a6575080f35b6114c69060203d81116114ca575b6114be81836119c6565b81019061234c565b5080f35b503d6114b4565b6040513d84823e3d90fd5b8234610322578060031936011261032257602060405160128152f35b823461032257806003193601126103225761111260209160406115276002548380528386528284205490611b07565b9161dead8152808552205490611b07565b9050346104cd5760603660031901126104cd576115536118f4565b61155b61190e565b906044359260018060a01b0382168086526001602052604086203387526020526040862054915f198310611595575b6107ca8686866119e8565b8583106115fe5781156115e65733156115ce57508486926040926107ca98526001602052828420338552602052039120555f808061158a565b604051634a1406b160e11b8152908101879052602490fd5b60405163e602df0560e01b8152908101879052602490fd5b60408051637dc7a0d960e11b815233928101928352602083019490945281018690528291506060010390fd5b82346103225780600319360112610322576020600254604051908152f35b9050346104cd5760403660031901126104cd576116636118f4565b61166b611924565b90611674611956565b6001600160a01b0316918215610cfa575060207fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a91838552600d8252610cee81604087209060ff801983541691151516179055565b8234610322578060031936011261032257600a546040516001600160a01b039091168152602090f35b8234610322576040366003190112610322576107ca61170f6118f4565b6024359033611a3c565b9050346104cd57816003193601126104cd5760405190826003549060019082821c928281168015611803575b60209586861082146117f057508487529081156117ce5750600114611775575b610bb285610ba6818903826119c6565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106117bb5750505081610bb293610ba692820101935f611765565b805485850187015292850192810161179e565b60ff191686860152505050151560051b8201019150610ba681610bb25f611765565b634e487b7160e01b845260229052602483fd5b93607f1693611745565b82346103225780600319360112610322576020600f54604051908152f35b9050346104cd5760203660031901126104cd5780359061ffff82168092036118a957611855611956565b61251c821161189a57506020817fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc9261ffff196007541617600755604051908152a180f35b60405163cd4e616760e01b8152fd5b8280fd5b602080825282518183018190529093925f5b8281106118e057505060409293505f838284010152601f8019910116010190565b8181018601518482016040015285016118bf565b600435906001600160a01b038216820361190a57565b5f80fd5b602435906001600160a01b038216820361190a57565b60243590811515820361190a57565b606090600319011261190a576004359060243590604435801515810361190a5790565b6005546001600160a01b0316330361196a57565b60405163118cdaa760e01b8152336004820152602490fd5b67ffffffffffffffff811161199657604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761199657604052565b90601f8019910116810190811067ffffffffffffffff82111761199657604052565b91906001600160a01b0380841615611a2457811615611a0c57611a0a92611b21565b565b60405163ec442f0560e01b81525f6004820152602490fd5b604051634b637e8f60e11b81525f6004820152602490fd5b6001600160a01b03908116918215611ab15716918215611a995760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b604051634a1406b160e11b81525f6004820152602490fd5b60405163e602df0560e01b81525f6004820152602490fd5b906107d091828102928184041490151715611ae057565b634e487b7160e01b5f52601160045260245ffd5b81810292918115918404141715611ae057565b91908203918211611ae057565b91908201809211611ae057565b9160ff600b5460a01c1691600e549261ffff6007541692811580611d05575b80611ced575b611cdb578291600160a01b6001900395868816955f97878952600d602052604089205460ff169889918716908181528b604082205460ff16611b8981968a611af4565b61271090049c611b998e8b611b07565b809c611ba494611e16565b898152600c602052604081205460ff16918152604090205460ff169085611cd2575b5084611cc9575b5083611cb1575b5060ff82169081611ca1575b81611c99575b5080611c8f575b611c5f575b5015611c5157508385611c2e6040969594611c35947f0dec4d9696755d06066685c7df867851d2d13a61c8c68e440b7180ff8100575899611d1d565b3090611d1d565b611c4182601654611b14565b60165582519182526020820152a1565b9350915050611a0a92611d1d565b61ff001990811661010017600e55611c75612207565b611c7d612043565b6001600655600e5416600e555f611bf2565b5030861415611bed565b90505f611be6565b905060ff8260081c161590611be0565b9092508015611cc2575b915f611bd4565b5081611cbb565b1593505f611bcd565b1594505f611bc6565b60405163bcb8b8fb60e01b8152600490fd5b506005546001600160a01b0384811691161415611b46565b506005546001600160a01b0387811691161415611b40565b6001600160a01b0380821692909183611d9457507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091611d6286600254611b14565b6002555b169384611d7f5780600254036002555b604051908152a3565b845f525f825260405f20818154019055611d76565b5f9084825281602052604082205490868210611de457509181604087602095887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef98965283875203912055611d66565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101869052606490fd5b9290919360ff9384600e5460081c168015611f97575b8015611f85575b611f6e578460135416158015611f76575b611f6e5760018060a01b03809116915f92808452601460205260409787898620541680611f5d575b611e86576012548111611f4c57821580611f41575b611e91575b505050505050505050565b611ed3978996611ec49487948852600c602052828989205416159283611f2e575b5082611f14575b5050611ef857611b07565b93168152806020522054611b14565b60115410611ee8578080808080808080611e86565b51632ce93b5960e01b8152600490fd5b9050612710611f0d61ffff6007541683611af4565b0490611b07565b9091508115611f26575b505f80611eb9565b90505f611f1e565b8a8816895289892054161592505f611eb2565b508387161515611e81565b885163136c002360e21b8152600490fd5b508387168552878986205416611e6c565b505050505050565b5084600b5460a01c1615611e44565b506001600160a01b0384163014611e33565b506001600160a01b0381163014611e2c565b805115611fb65760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015611fb65760400190565b91909493929460a083019083526020905f8285015260a0604085015282518091528160c085019301915f5b8281106120265750505050906080919460018060a01b031660608201520152565b83516001600160a01b031685529381019392810192600101612005565b600b546001600160a01b0390811615612204575f90308252816020526040822054600f5481106121ff5760105490818111156121f75750915b817f000000000000000000000000000000000000000000000000000000000000000016916120ab848430611a3c565b604051906120b8826119aa565b600282526040366020840137306120ce83611fa9565b526120d882611fca565b907f0000000000000000000000000000000000000000000000000000000000000000169052479261012c4201918242116121e357813b156121df5760405163791ac94760e01b8152939284929183918591839161213b9130908c60048601611fda565b03925af190816121d0575b5061214f575050565b6121599047611b07565b80612162575050565b7fa784084d89a471321177859c54b5a997327e57e23e5c8d15167418fba7d1dc7f916121cb61271061219384611ac9565b0461219e8185611b07565b906121a885612269565b604051948594859094939260609260808301968352602083015260408201520152565b0390a1565b6121d990611982565b5f612146565b8380fd5b634e487b7160e01b84526011600452602484fd5b90509161207c565b505050565b50565b600260065414612218576002600655565b604051633ee5aeb560e01b8152600490fd5b3d15612264573d9067ffffffffffffffff82116119965760405191612259601f8201601f1916602001846119c6565b82523d5f602084013e565b606090565b80156122045761227b81601554611b14565b60155561229561271061228d83611ac9565b048092611b07565b906122a281601854611b14565b6018556122b182601954611b14565b6019558061232d575b50806122c35750565b60085460408051631f67ea8f60e11b60208201908152600482526001600160a01b0394939282019285169067ffffffffffffffff84118385101761199657845f9493859460405251925af161231661222a565b5015612320575050565b611a0a9160085416612364565b600754612346919060101c6001600160a01b0316612364565b5f6122ba565b9081602091031261190a5751801515810361190a5790565b5f916001600160a01b03918216918380808085875af161238261222a565b501561238f575b50505050565b7f00000000000000000000000000000000000000000000000000000000000000001691823b156121df57604051630d0e30db60e41b8152848160048186885af18015610a7357612458575b5090604460209285604051958694859363a9059cbb60e01b8552600485015260248401525af191821561244c579161242e575b501561241c575f808080612389565b60405163081ceff360e41b8152600490fd5b612446915060203d81116114ca576114be81836119c6565b5f61240d565b604051903d90823e3d90fd5b6020929194612468604492611982565b949192506123da565b9081602091031261190a57516001600160a01b038116810361190a5790565b1561249757565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b905f913083528260205260408320548115801561260e575b612606575b15612601576001600160a01b03927f0000000000000000000000000000000000000000000000000000000000000000841691612527818430611a3c565b60405194612534866119aa565b6002865260403660208801373061254a87611fa9565b5261255486611fca565b907f0000000000000000000000000000000000000000000000000000000000000000169052479261012c4201918242116121e357813b156121df57836125b59596976040519687958694859363791ac94760e01b8552309160048601611fda565b03925af190816125f2575b506125d75760405163081ceff360e41b8152600490fd5b6125e19047611b07565b806125e95750565b611a0a90612269565b6125fb90611982565b5f6125c0565b509050565b9050806124ea565b508082116124e5565b51906001600160701b038216820361190a57565b600b546001600160a01b0390811690811561281c57604051630240bc6b60e21b81526004916060828481875afa9384156127a0575f9283956127c0575b506001600160701b0380931691821580156127b6575b6127ab576020859260405193848092630dfe168160e01b82525afa9182156127a0575f92612780575b50163003612779579216915b600183111561277157801581800460011481171561275e576103e880830292830414171561274b575f19830192831161274b576103e59283810293818504149015171561274b5782156127385761270d8382049384611af4565b10612716575090565b60018201809211612725575090565b601190634e487b7160e01b5f525260245ffd5b601282634e487b7160e01b5f525260245ffd5b601182634e487b7160e01b5f525260245ffd5b601183634e487b7160e01b5f525260245ffd5b5050505f1990565b92166126b3565b61279991925060203d8111610a6c57610a5e81836119c6565b905f6126a7565b6040513d5f823e3d90fd5b5050505050505f1990565b508386161561267e565b929094506060833d8211612814575b816127dc606093836119c6565b81010312610322576127ed83612617565b9060406127fc60208601612617565b94015163ffffffff811603610322575091935f612668565b3d91506127cf565b50505f90565b905f30815280602052604092838220549081156129585761284161262b565b905f198214612a4d57801515818482612a43575b5050612a3b575b508110612a35576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169061289a838330611a3c565b8551906128a6826119aa565b6002825286366020840137306128bb83611fa9565b526128c582611fca565b907f0000000000000000000000000000000000000000000000000000000000000000169052479161012c420191824211612a2157813b1561101e5791859161292693838a5180968195829463791ac94760e01b845230908c60048601611fda565b03925af19081612a0e575b5061294757845163081ceff360e41b8152600490fd5b6129519047611b07565b918261295f575b5050509050565b61296b82601754611b14565b60175542601a55601b5490600182018092116129fa57507fd22b28d7af7a9d3a0569b35bdb2f6d1c371c43df4816472b017c93534557650d93946129ee91601b556129b584612269565b6127106129c185611ac9565b046129cc8186611b07565b9151948594859094939260609260808301968352602083015260408201520152565b0390a1805f8080612958565b634e487b7160e01b81526011600452602490fd5b612a1a90949194611982565b925f612931565b634e487b7160e01b86526011600452602486fd5b50509050565b91505f61285c565b119050815f612855565b855163081ceff360e41b8152600490fd5b80158015612c4a575b612c38575f308152602090808252604091828220548015611f6e579493835195612a90876119aa565b6002875284368489013730612aa488611fa9565b52612aae87611fca565b9160018060a01b0392837f000000000000000000000000000000000000000000000000000000000000000016905284927f0000000000000000000000000000000000000000000000000000000000000000169061012c420193844211935b80151580612c2f575b15612c225782811115612c1d5750815b612b30818530611a3c565b4785612c0957843b15612c05578b908a5163791ac94760e01b81528a8180612b608c60049730908a8a8601611fda565b0381838b5af19081612bf6575b50612b815750505050505050505050505050565b612b8b9047611b07565b918215612be757612b9f6017918254611b14565b905542601a55601b80549160018301809311612bd4575055612bc090612269565b308752868652600188882054910190612b0c565b634e487b7160e01b8b526011905260248afd5b50505050505050505050505050565b612bff90611982565b5f612b6d565b8880fd5b634e487b7160e01b89526011600452602489fd5b612b25565b5050505050505050505050565b50898210612b15565b60405163b4fa3fb360e01b8152600490fd5b508115612a6756fea26469706673582212202c9131ee9e393b307754a4dc6260129bb9bd5d5b59fb73561e5b088b211e667564736f6c63430008140033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000289ca684df1747c3b19bbf37d85f1b44419bb95d000000000000000000000000f933bfaf87d334a3bc9a3baec960456017eb86e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809000000000000000000000000000000000000000000000000000000000000001041626f7265616e2053747261746567790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064142585354520000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260048036101561001c575b50361561001a575f80fd5b005b5f90813560e01c908163023b1fc91461182b5781630445b6671461180d57816306fdde0314611719578163095ea7b3146116f25781630a009097146116c957816315bcf9b71461164857816318160ddd1461162a57816320a8d3fb1461058a57816323b872dd146115385781632b112e49146114f8578163313ce567146114dc57816333f3d628146114365781633582ad231461141357816336ad19e714610690578163398daa85146112545781633c2f1806146113ed57816340a24e6c1461136c5781634ada218b146113465781634e69d560146112935781635342acb4146112545781635c3e156c146112375781635e8ae032146111e15781636637e38c146111c457816368db925a146111975781636ddd1713146111745781636ec934da146111355781636f1fe84c1461111a57816370a08231146110d9578163715018a61461107c578163715a05741461105e5781637437681e14611040578163758c6c9d1461102257816375cb1bd114610e8f5781637f5853c414610e6f5781638a8c523c14610e1c5781638d32ca8b14610df35781638da5cb5b14610dca5781638db4dd4314610da95781638ea9811714610d095781638ebfc79614610c6d5781639015d71414610c4f57816395d89b4114610b4b5781639cfbafcd14610b2d5781639e252f0014610ade5781639e78fb4f14610876578163a467aa93146107fe578163a8aa1b31146107d5578163a9059cbb146107a3578163ab7e380514610785578163ad5c464814610740578163b70143c9146106db578163c415b95c146106b2578163c56f84cf14610690578163cce987d414610672578163cd4082da14610622578163ce83997f14610604578163d50942fb146105e6578163d55be8c6146105c9578163d94160e01461058a578163dd62ed3e1461053f578163e3a3b48814610522578163f28ab2be146104d1578163f2fde38b1461043d578163f5736d4b1461038857508063f887ea4014610343578063f8b45b05146103255763fd076d560361000f57346103225780600319360112610322576020601554604051908152f35b80fd5b50346103225780600319360112610322576020601154604051908152f35b50346103225780600319360112610322576040517f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c6001600160a01b03168152602090f35b82346103225761039736611933565b93846103a4939293611956565b610410575b5061040a7fc3e35da80dd50e2a487eb09d9fd3dcfb815ed597fedfcbc93588da440b2d45a39394826012558360115560ff196013541660ff821515161760135560405193849384919260409194936060840195845260208401521515910152565b0390a180f35b81158015610435575b61042657818310156103a9575b60405163b4fa3fb360e01b8152fd5b508215610419565b9050346104cd5760203660031901126104cd576104586118f4565b610460611956565b6001600160a01b039081169182156104b55750600554826bffffffffffffffffffffffff60a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b604051631e4fbdf760e01b8152908101849052602490fd5b5080fd5b8234610322578060031936011261032257604060c0913081528060205220546016546017546015546018549160195493604051958652602086015260408501526060840152608083015260a0820152f35b82346103225780600319360112610322576020604051611f408152f35b823461032257604036600319011261032257604060209161055e6118f4565b61056661190e565b6001600160a01b039182168352600185528383209116825283522054604051908152f35b82346103225760203660031901126103225760209060ff906040906001600160a01b036105b56118f4565b168152601484522054166040519015158152f35b8234610322578060031936011261032257602060405161251c8152f35b82346103225780600319360112610322576020601554604051908152f35b82346103225780600319360112610322576020601b54604051908152f35b9050346104cd5760403660031901126104cd5761063d611956565b61066361ff00199161010083600e541617600e55610659612207565b6024359035612a5e565b6001600655600e5416600e5580f35b82346103225780600319360112610322576020601054604051908152f35b8234610322578060031936011261032257602061ffff60075416604051908152f35b82346103225780600319360112610322576008546040516001600160a01b039091168152602090f35b9050346104cd5760203660031901126104cd5760055461071090336001600160a01b0391821614908115610732575b50612490565b61066361ff00199161010083600e541617600e5561072c612207565b356124cd565b9050600a541633145f61070a565b82346103225780600319360112610322576040517f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c28096001600160a01b03168152602090f35b82346103225780600319360112610322576020601654604051908152f35b8234610322576040366003190112610322576107ca6107c06118f4565b60243590336119e8565b602060405160018152f35b8234610322578060031936011261032257600b546040516001600160a01b039091168152602090f35b8234610322577faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f961040a61083136611933565b61083c939193611956565b82600f558360105560ff19600e541660ff8215151617600e5560405193849384919260409194936060840195845260208401521515910152565b9050346104cd57816003193601126104cd57610890611956565b600b80549091906001600160a01b03908116610ace5760405163c45a015560e01b815260209390848185817f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c87165afa8015610ac35783918791610aa6575b506040805163e6a4390560e01b8152308782019081527f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c28096001600160a01b03811660208301529194919390911691889185918291010381845afa928315610a9b57879386918a91610a7e575b50169586156109c857505050507fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a926bffffffffffffffffffffffff60a01b8254161781555b818154168552600d845260408520600160ff1982541617905554169160405160018152a280f35b604080516364e329cb60e11b8152309281019283526001600160a01b039094166020830152929650869283918a9183910103925af1928315610a73577fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a9383918791610a46575b5082546001600160a01b03191691161781556109a1565b610a669150863d8811610a6c575b610a5e81836119c6565b810190612471565b5f610a2f565b503d610a54565b6040513d87823e3d90fd5b610a959150853d8711610a6c57610a5e81836119c6565b5f61095b565b6040513d8a823e3d90fd5b610abd9150863d8811610a6c57610a5e81836119c6565b5f6108ef565b6040513d88823e3d90fd5b5060405163b4fa3fb360e01b8152fd5b9050346104cd5760203660031901126104cd57610af9611956565b81808080843560018060a01b03600554165af1610b1461222a565b5015610b1e575080f35b60405163081ceff360e41b8152fd5b82346103225780600319360112610322576020601854604051908152f35b823461032257806003193601126103225760405190809280549160019083821c92828516948515610c45575b6020958686108114610c3257858852908115610c0e5750600114610bb6575b610bb286610ba6818a03826119c6565b604051918291826118ad565b0390f35b81529294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610bfb5750505081610bb293610ba692820101938580610b96565b8054858501870152928501928101610bdd565b60ff19168787015250505050151560051b8201019150610ba681610bb28580610b96565b634e487b7160e01b845260228352602484fd5b93607f1693610b77565b82346103225780600319360112610322576020601754604051908152f35b9050346104cd5760403660031901126104cd57610c886118f4565b610c90611924565b90610c99611956565b6001600160a01b0316918215610cfa575060207f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d91838552600c8252610cee81604087209060ff801983541691151516179055565b6040519015158152a280f35b60405163d92e233d60e01b8152fd5b9050346104cd5760203660031901126104cd57610d246118f4565b610d2c611956565b6001600160a01b0316908115610d765750600a80546001600160a01b031916821790557fc258faa9a17ddfdf4130b4acff63a289202e7d5f9e42f366add65368575486bc8280a280f35b60649060206040519162461bcd60e51b8352820152600c60248201526b5a65726f206164647265737360a01b6044820152fd5b82346103225780600319360112610322576040908151908082526020820152f35b82346103225780600319360112610322576005546040516001600160a01b039091168152602090f35b82346103225780600319360112610322576009546040516001600160a01b039091168152602090f35b8234610322578060031936011261032257610e35611956565b600b805460ff60a01b1916600160a01b1790557f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c78180a180f35b828060031936011261032257610e83611956565b610e8c34612269565b80f35b9050346104cd5760603660031901126104cd57610eaa6118f4565b610eb261190e565b916044359260018060a01b039283851680950361101e57610ed1611956565b8381169283158015611014575b610cfa57506007805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055600880546001600160a01b031990811692851692831790915560095491938592811680610fe2575b50506009541617600955808452600c60205260408420600160ff19918183825416179055838652604086208183825416179055828652601460205260408620818382541617905583865260408620818382541617905584610fb7575b50507f2d4c6aa48812a0ea09474a961613c1a3ae652d39a1580cb1ac46ff277e6d385d8480a480f35b848652600c602052604086208183825416179055601460205260408620918254161790555f80610f8e565b8752600c602052604087209060ff19918281541690556009541687526014602052604087209081541690555f80610f32565b5084831615610ede565b8580fd5b82346103225780600319360112610322576020601a54604051908152f35b82346103225780600319360112610322576020601254604051908152f35b82346103225780600319360112610322576020601954604051908152f35b8234610322578060031936011261032257611095611956565b600580546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b82346103225760203660031901126103225760206111126110f86118f4565b6001600160a01b03165f9081526020819052604090205490565b604051908152f35b8234610322578060031936011261032257602061111261262b565b82346103225760203660031901126103225760209060ff906040906001600160a01b036111606118f4565b168152600d84522054166040519015158152f35b8234610322578060031936011261032257602060ff600e54166040519015158152f35b823461032257806003193601126103225760075460405160109190911c6001600160a01b03168152602090f35b823461032257806003193601126103225760206040516127108152f35b9050346104cd5760203660031901126104cd5760055461121590336001600160a01b03918216149081156107325750612490565b61066361ff00199161010083600e541617600e55611231612207565b35612822565b823461032257806003193601126103225760206040516107d08152f35b82346103225760203660031901126103225760209060ff906040906001600160a01b0361127f6118f4565b168152600c84522054166040519015158152f35b8234610322578060031936011261032257600b5460075461ffff16601b54601a5460155460185460195430885287602052604088205491601654936017549560135460ff169760125499806011549c6040519e8f9160a01c60ff161515825260208201526040015260608d015260808c015260a08b015260c08a015260e089015261010088015261012087015261014086015261016085015215156101808401526101a08301526101c08201526101e090f35b8234610322578060031936011261032257602060ff600b5460a01c166040519015158152f35b9050346104cd5760403660031901126104cd576113876118f4565b61138f611924565b90611398611956565b6001600160a01b0316918215610cfa575060207f4aed8b8a26c8d87da818b50361f1273864d5b7008289379caa0aa8b7be56a3669183855260148252610cee81604087209060ff801983541691151516179055565b8234610322578060031936011261032257305f9081526020818152604090912054611112565b8234610322578060031936011261032257602060ff601354166040519015158152f35b9050346104cd5760403660031901126104cd576114516118f4565b9061145a611956565b6001600160a01b0391821691308314610ace57906044602092600554169185604051958694859363a9059cbb60e01b855284015260243560248401525af180156114d1576114a6575080f35b6114c69060203d81116114ca575b6114be81836119c6565b81019061234c565b5080f35b503d6114b4565b6040513d84823e3d90fd5b8234610322578060031936011261032257602060405160128152f35b823461032257806003193601126103225761111260209160406115276002548380528386528284205490611b07565b9161dead8152808552205490611b07565b9050346104cd5760603660031901126104cd576115536118f4565b61155b61190e565b906044359260018060a01b0382168086526001602052604086203387526020526040862054915f198310611595575b6107ca8686866119e8565b8583106115fe5781156115e65733156115ce57508486926040926107ca98526001602052828420338552602052039120555f808061158a565b604051634a1406b160e11b8152908101879052602490fd5b60405163e602df0560e01b8152908101879052602490fd5b60408051637dc7a0d960e11b815233928101928352602083019490945281018690528291506060010390fd5b82346103225780600319360112610322576020600254604051908152f35b9050346104cd5760403660031901126104cd576116636118f4565b61166b611924565b90611674611956565b6001600160a01b0316918215610cfa575060207fcc559bf3306c2e36782e6e3a163572adbd7bc62438d65eef8bd35bc76ae6194a91838552600d8252610cee81604087209060ff801983541691151516179055565b8234610322578060031936011261032257600a546040516001600160a01b039091168152602090f35b8234610322576040366003190112610322576107ca61170f6118f4565b6024359033611a3c565b9050346104cd57816003193601126104cd5760405190826003549060019082821c928281168015611803575b60209586861082146117f057508487529081156117ce5750600114611775575b610bb285610ba6818903826119c6565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106117bb5750505081610bb293610ba692820101935f611765565b805485850187015292850192810161179e565b60ff191686860152505050151560051b8201019150610ba681610bb25f611765565b634e487b7160e01b845260229052602483fd5b93607f1693611745565b82346103225780600319360112610322576020600f54604051908152f35b9050346104cd5760203660031901126104cd5780359061ffff82168092036118a957611855611956565b61251c821161189a57506020817fb50f6c85631b448ef50a9b0055afaff00e6d81ec0ebf056cd4bef2d8b32dbbbc9261ffff196007541617600755604051908152a180f35b60405163cd4e616760e01b8152fd5b8280fd5b602080825282518183018190529093925f5b8281106118e057505060409293505f838284010152601f8019910116010190565b8181018601518482016040015285016118bf565b600435906001600160a01b038216820361190a57565b5f80fd5b602435906001600160a01b038216820361190a57565b60243590811515820361190a57565b606090600319011261190a576004359060243590604435801515810361190a5790565b6005546001600160a01b0316330361196a57565b60405163118cdaa760e01b8152336004820152602490fd5b67ffffffffffffffff811161199657604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761199657604052565b90601f8019910116810190811067ffffffffffffffff82111761199657604052565b91906001600160a01b0380841615611a2457811615611a0c57611a0a92611b21565b565b60405163ec442f0560e01b81525f6004820152602490fd5b604051634b637e8f60e11b81525f6004820152602490fd5b6001600160a01b03908116918215611ab15716918215611a995760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b604051634a1406b160e11b81525f6004820152602490fd5b60405163e602df0560e01b81525f6004820152602490fd5b906107d091828102928184041490151715611ae057565b634e487b7160e01b5f52601160045260245ffd5b81810292918115918404141715611ae057565b91908203918211611ae057565b91908201809211611ae057565b9160ff600b5460a01c1691600e549261ffff6007541692811580611d05575b80611ced575b611cdb578291600160a01b6001900395868816955f97878952600d602052604089205460ff169889918716908181528b604082205460ff16611b8981968a611af4565b61271090049c611b998e8b611b07565b809c611ba494611e16565b898152600c602052604081205460ff16918152604090205460ff169085611cd2575b5084611cc9575b5083611cb1575b5060ff82169081611ca1575b81611c99575b5080611c8f575b611c5f575b5015611c5157508385611c2e6040969594611c35947f0dec4d9696755d06066685c7df867851d2d13a61c8c68e440b7180ff8100575899611d1d565b3090611d1d565b611c4182601654611b14565b60165582519182526020820152a1565b9350915050611a0a92611d1d565b61ff001990811661010017600e55611c75612207565b611c7d612043565b6001600655600e5416600e555f611bf2565b5030861415611bed565b90505f611be6565b905060ff8260081c161590611be0565b9092508015611cc2575b915f611bd4565b5081611cbb565b1593505f611bcd565b1594505f611bc6565b60405163bcb8b8fb60e01b8152600490fd5b506005546001600160a01b0384811691161415611b46565b506005546001600160a01b0387811691161415611b40565b6001600160a01b0380821692909183611d9457507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091611d6286600254611b14565b6002555b169384611d7f5780600254036002555b604051908152a3565b845f525f825260405f20818154019055611d76565b5f9084825281602052604082205490868210611de457509181604087602095887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef98965283875203912055611d66565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101869052606490fd5b9290919360ff9384600e5460081c168015611f97575b8015611f85575b611f6e578460135416158015611f76575b611f6e5760018060a01b03809116915f92808452601460205260409787898620541680611f5d575b611e86576012548111611f4c57821580611f41575b611e91575b505050505050505050565b611ed3978996611ec49487948852600c602052828989205416159283611f2e575b5082611f14575b5050611ef857611b07565b93168152806020522054611b14565b60115410611ee8578080808080808080611e86565b51632ce93b5960e01b8152600490fd5b9050612710611f0d61ffff6007541683611af4565b0490611b07565b9091508115611f26575b505f80611eb9565b90505f611f1e565b8a8816895289892054161592505f611eb2565b508387161515611e81565b885163136c002360e21b8152600490fd5b508387168552878986205416611e6c565b505050505050565b5084600b5460a01c1615611e44565b506001600160a01b0384163014611e33565b506001600160a01b0381163014611e2c565b805115611fb65760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015611fb65760400190565b91909493929460a083019083526020905f8285015260a0604085015282518091528160c085019301915f5b8281106120265750505050906080919460018060a01b031660608201520152565b83516001600160a01b031685529381019392810192600101612005565b600b546001600160a01b0390811615612204575f90308252816020526040822054600f5481106121ff5760105490818111156121f75750915b817f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c16916120ab848430611a3c565b604051906120b8826119aa565b600282526040366020840137306120ce83611fa9565b526120d882611fca565b907f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809169052479261012c4201918242116121e357813b156121df5760405163791ac94760e01b8152939284929183918591839161213b9130908c60048601611fda565b03925af190816121d0575b5061214f575050565b6121599047611b07565b80612162575050565b7fa784084d89a471321177859c54b5a997327e57e23e5c8d15167418fba7d1dc7f916121cb61271061219384611ac9565b0461219e8185611b07565b906121a885612269565b604051948594859094939260609260808301968352602083015260408201520152565b0390a1565b6121d990611982565b5f612146565b8380fd5b634e487b7160e01b84526011600452602484fd5b90509161207c565b505050565b50565b600260065414612218576002600655565b604051633ee5aeb560e01b8152600490fd5b3d15612264573d9067ffffffffffffffff82116119965760405191612259601f8201601f1916602001846119c6565b82523d5f602084013e565b606090565b80156122045761227b81601554611b14565b60155561229561271061228d83611ac9565b048092611b07565b906122a281601854611b14565b6018556122b182601954611b14565b6019558061232d575b50806122c35750565b60085460408051631f67ea8f60e11b60208201908152600482526001600160a01b0394939282019285169067ffffffffffffffff84118385101761199657845f9493859460405251925af161231661222a565b5015612320575050565b611a0a9160085416612364565b600754612346919060101c6001600160a01b0316612364565b5f6122ba565b9081602091031261190a5751801515810361190a5790565b5f916001600160a01b03918216918380808085875af161238261222a565b501561238f575b50505050565b7f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c28091691823b156121df57604051630d0e30db60e41b8152848160048186885af18015610a7357612458575b5090604460209285604051958694859363a9059cbb60e01b8552600485015260248401525af191821561244c579161242e575b501561241c575f808080612389565b60405163081ceff360e41b8152600490fd5b612446915060203d81116114ca576114be81836119c6565b5f61240d565b604051903d90823e3d90fd5b6020929194612468604492611982565b949192506123da565b9081602091031261190a57516001600160a01b038116810361190a5790565b1561249757565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b905f913083528260205260408320548115801561260e575b612606575b15612601576001600160a01b03927f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c841691612527818430611a3c565b60405194612534866119aa565b6002865260403660208801373061254a87611fa9565b5261255486611fca565b907f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809169052479261012c4201918242116121e357813b156121df57836125b59596976040519687958694859363791ac94760e01b8552309160048601611fda565b03925af190816125f2575b506125d75760405163081ceff360e41b8152600490fd5b6125e19047611b07565b806125e95750565b611a0a90612269565b6125fb90611982565b5f6125c0565b509050565b9050806124ea565b508082116124e5565b51906001600160701b038216820361190a57565b600b546001600160a01b0390811690811561281c57604051630240bc6b60e21b81526004916060828481875afa9384156127a0575f9283956127c0575b506001600160701b0380931691821580156127b6575b6127ab576020859260405193848092630dfe168160e01b82525afa9182156127a0575f92612780575b50163003612779579216915b600183111561277157801581800460011481171561275e576103e880830292830414171561274b575f19830192831161274b576103e59283810293818504149015171561274b5782156127385761270d8382049384611af4565b10612716575090565b60018201809211612725575090565b601190634e487b7160e01b5f525260245ffd5b601282634e487b7160e01b5f525260245ffd5b601182634e487b7160e01b5f525260245ffd5b601183634e487b7160e01b5f525260245ffd5b5050505f1990565b92166126b3565b61279991925060203d8111610a6c57610a5e81836119c6565b905f6126a7565b6040513d5f823e3d90fd5b5050505050505f1990565b508386161561267e565b929094506060833d8211612814575b816127dc606093836119c6565b81010312610322576127ed83612617565b9060406127fc60208601612617565b94015163ffffffff811603610322575091935f612668565b3d91506127cf565b50505f90565b905f30815280602052604092838220549081156129585761284161262b565b905f198214612a4d57801515818482612a43575b5050612a3b575b508110612a35576001600160a01b037f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c81169061289a838330611a3c565b8551906128a6826119aa565b6002825286366020840137306128bb83611fa9565b526128c582611fca565b907f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809169052479161012c420191824211612a2157813b1561101e5791859161292693838a5180968195829463791ac94760e01b845230908c60048601611fda565b03925af19081612a0e575b5061294757845163081ceff360e41b8152600490fd5b6129519047611b07565b918261295f575b5050509050565b61296b82601754611b14565b60175542601a55601b5490600182018092116129fa57507fd22b28d7af7a9d3a0569b35bdb2f6d1c371c43df4816472b017c93534557650d93946129ee91601b556129b584612269565b6127106129c185611ac9565b046129cc8186611b07565b9151948594859094939260609260808301968352602083015260408201520152565b0390a1805f8080612958565b634e487b7160e01b81526011600452602490fd5b612a1a90949194611982565b925f612931565b634e487b7160e01b86526011600452602486fd5b50509050565b91505f61285c565b119050815f612855565b855163081ceff360e41b8152600490fd5b80158015612c4a575b612c38575f308152602090808252604091828220548015611f6e579493835195612a90876119aa565b6002875284368489013730612aa488611fa9565b52612aae87611fca565b9160018060a01b0392837f0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c280916905284927f000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c169061012c420193844211935b80151580612c2f575b15612c225782811115612c1d5750815b612b30818530611a3c565b4785612c0957843b15612c05578b908a5163791ac94760e01b81528a8180612b608c60049730908a8a8601611fda565b0381838b5af19081612bf6575b50612b815750505050505050505050505050565b612b8b9047611b07565b918215612be757612b9f6017918254611b14565b905542601a55601b80549160018301809311612bd4575055612bc090612269565b308752868652600188882054910190612b0c565b634e487b7160e01b8b526011905260248afd5b50505050505050505050505050565b612bff90611982565b5f612b6d565b8880fd5b634e487b7160e01b89526011600452602489fd5b612b25565b5050505050505050505050565b50898210612b15565b60405163b4fa3fb360e01b8152600490fd5b508115612a6756fea26469706673582212202c9131ee9e393b307754a4dc6260129bb9bd5d5b59fb73561e5b088b211e667564736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000289ca684df1747c3b19bbf37d85f1b44419bb95d000000000000000000000000f933bfaf87d334a3bc9a3baec960456017eb86e40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809000000000000000000000000000000000000000000000000000000000000001041626f7265616e2053747261746567790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064142585354520000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Aborean Strategy
Arg [1] : symbol_ (string): ABXSTR
Arg [2] : initialSupply (uint256): 1000000000000000000000000000
Arg [3] : opsWallet_ (address): 0x289cA684Df1747C3b19bBf37D85f1b44419bB95d
Arg [4] : feeCollector_ (address): 0xf933bfAF87d334a3BC9a3BAec960456017eB86e4
Arg [5] : buybackManager_ (address): 0x0000000000000000000000000000000000000000
Arg [6] : router_ (address): 0xad1eCa41E6F772bE3cb5A48A6141f9bcc1AF9F7c
Arg [7] : weth_ (address): 0x3439153EB7AF838Ad19d56E1571FBD09333C2809
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [3] : 000000000000000000000000289ca684df1747c3b19bbf37d85f1b44419bb95d
Arg [4] : 000000000000000000000000f933bfaf87d334a3bc9a3baec960456017eb86e4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000ad1eca41e6f772be3cb5a48a6141f9bcc1af9f7c
Arg [7] : 0000000000000000000000003439153eb7af838ad19d56e1571fbd09333c2809
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [9] : 41626f7265616e20537472617465677900000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 4142585354520000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
1036:22726:7:-:0;;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21673:16;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;2210:24;1036:22726;;;;;;;;;;;;;;;;;;;;;;1643:42;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;:::i;:::-;1500:62:0;;;;;;;:::i;:::-;14696:163:7;;1036:22726;;14966:46;;1036:22726;;;14868:16;1036:22726;;14894:24;1036:22726;;;14928:23;1036:22726;;;;;;;;14928:23;1036:22726;;;14966:46;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;14966:46;;;;1036:22726;;14696:163;14727:13;;:34;;;;14696:163;14723:61;;14802:23;;;14798:50;14696:163;14798:50;;1036:22726;;-1:-1:-1;;;14834:14:7;;;14727:34;14744:17;;;14727:34;;1036:22726;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;;;2627:22:0;;2623:91;;1036:22726:7;3004:6:0;1036:22726:7;;;;;;;;3004:6:0;1036:22726:7;;3052:40:0;;;;1036:22726:7;;2623:91:0;1036:22726:7;;-1:-1:-1;;;2672:31:0;;;;;1036:22726:7;;;;;2672:31:0;1036:22726:7;;;;;;;;;;;;;;;;;;;22276:4;;1036:22726;;;;;;;22296:22;1036:22726;22332:24;1036:22726;22370:16;1036:22726;22400:13;1036:22726;;22427:19;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1383:4;1036:22726;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;:::i;:::-;;;;21443:11;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1172:4;1036:22726;;;;;;;;;;;;;;;;;2423:31;1036:22726;;;;;;;;;;;;;;;;;;;;;2923:28;1036:22726;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;1500:62:0;;:::i;:::-;2531:1:6;1036:22726:7;;;;;4317:13;1036:22726;;;4317:13;1036:22726;2466:103:6;;:::i;:::-;1036:22726:7;;;;2531:1:6;:::i;:::-;1036:22726:7;3068:21:6;1036:22726:7;4317:13;1036:22726;;4317:13;1036:22726;;;;;;;;;;;;;;;;;2107:48;1036:22726;;;;;;;;;;;;;;;;;;;;;;1421:32;1036:22726;;;;;;;;;;;;;;;;;;;;;1534:27;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;1710:6:0;1036:22726:7;4450:77;;4458:10;-1:-1:-1;;;;;1036:22726:7;;;4458:21;;:50;;;;1036:22726;4450:77;;:::i;:::-;2531:1:6;1036:22726:7;;;;;4317:13;1036:22726;;;4317:13;1036:22726;2466:103:6;;:::i;:::-;1036:22726:7;2531:1:6;:::i;4458:50:7:-;1036:22726;;4497:11;1036:22726;;4458:10;4483:25;4458:50;;;1036:22726;;;;;;;;;;;;;;;1744:29;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;2503:37;1036:22726;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;3388:5:2;1036:22726:7;;:::i;:::-;;;735:10:5;;3388:5:2;:::i;:::-;1036:22726:7;;;;;;;;;;;;;;;;;;;;1691:19;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;14432:43;;1036:22726;;;:::i;:::-;1500:62:0;;;;;:::i;:::-;1036:22726:7;14329:25;1036:22726;;14364:22;1036:22726;;;14396:21;1036:22726;;;;;;;;14396:21;1036:22726;;;14432:43;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;11995:4:7;1036:22726;;11995:4;;;-1:-1:-1;;;;;1036:22726:7;;;11991:45;;1036:22726;;-1:-1:-1;;;12065:16:7;;;;1036:22726;12065:16;1036:22726;12065:6;1036:22726;12065:6;1036:22726;;12065:16;;;;;;;;;;;;1036:22726;-1:-1:-1;1036:22726:7;;;-1:-1:-1;;;12114:89:7;;12170:4;12114:89;;;1036:22726;;;12189:4;-1:-1:-1;;;;;1036:22726:7;;;;;;;;12189:4;;1036:22726;;;;12170:4;;1036:22726;;;;;12114:89;;;;;;;;;;;;;;;;;;1036:22726;-1:-1:-1;1036:22726:7;;12218:26;;1036:22726;;;;;;12432:21;1036:22726;;;;;;;;;;12214:172;1036:22726;;;;;;12396:8;1036:22726;;;;;;;;;;;;;;;;;;;;;;12432:21;1036:22726;;12214:172;1036:22726;;;-1:-1:-1;;;12317:58:7;;12170:4;12317:58;;;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;;12317:58;;;;;;;;;12432:21;12317:58;;;;;;;12214:172;-1:-1:-1;1036:22726:7;;-1:-1:-1;;;;;;1036:22726:7;;;;;;12214:172;;12317:58;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1036:22726;;;;;;;;;12114:89;;;;;;;;;;;;;;:::i;:::-;;;;;1036:22726;;;;;;;;;12065:16;;;;;;;;;;;;;;:::i;:::-;;;;;1036:22726;;;;;;;;;11991:45;-1:-1:-1;1036:22726:7;;-1:-1:-1;;;12022:14:7;;;1036:22726;;;;;;;;-1:-1:-1;;1036:22726:7;;;;1500:62:0;;:::i;:::-;1036:22726:7;;;;;;;;;;;1710:6:0;1036:22726:7;;20725:31;;;;:::i;:::-;;20770:3;20766:28;;1036:22726;;;20766:28;1036:22726;;-1:-1:-1;;;20782:12:7;;;1036:22726;;;;;;;;;;;;;;2666:28;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;-1:-1:-1;;;;1036:22726:7;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;-1:-1:-1;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2583:39;1036:22726;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;14069:21;;14065:47;;1036:22726;;14159:24;1036:22726;;;;14122:9;1036:22726;;14122:22;1036:22726;;;;;;;;;;;;;;;;;;;14122:22;1036:22726;;;;;;;14159:24;1036:22726;;14065:47;1036:22726;;-1:-1:-1;;;14099:13:7;;;1036:22726;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;1500:62:0;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;18834:28;;1036:22726;;-1:-1:-1;18889:28:7;1036:22726;;-1:-1:-1;;;;;;1036:22726:7;;;;;18932:34;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1710:6:0;1036:22726:7;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;1567:29;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;12520:21:7;1036:22726;;-1:-1:-1;;;;1036:22726:7;-1:-1:-1;;;1036:22726:7;;;12556:16;;;;1036:22726;;;;;;;;;;;;1500:62:0;;:::i;:::-;18718:9:7;;;:::i;:::-;1036:22726;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;1036:22726:7;;;12943:26;;;:59;;;;1036:22726;12939:97;;-1:-1:-1;13047:24:7;1036:22726;;-1:-1:-1;;;;;;1036:22726:7;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;13081:30;1036:22726;;-1:-1:-1;;;;;;1036:22726:7;;;;;;;;;;;;13160:14;1036:22726;;;;;;;;13156:141;;1036:22726;;;13160:14;1036:22726;;;13160:14;1036:22726;;;;13378:9;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:11;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;13553:31;13549:148;;1036:22726;13712:64;;;;;;1036:22726;;13549:148;1036:22726;;;13378:9;1036:22726;;;;;;;;;;;;;13461:11;1036:22726;;;;;;;;;;;;13549:148;;;;13156:141;1036:22726;;13204:9;1036:22726;;;;;;;;;;;;;;;13160:14;1036:22726;;;;13251:11;1036:22726;;;;;;;;;;;13156:141;;;;12943:59;1036:22726;;;;12973:29;12943:59;;1036:22726;;;;;;;;;;;;;;;;;;2833:32;1036:22726;;;;;;;;;;;;;;;;;;;;;2256:20;1036:22726;;;;;;;;;;;;;;;;;;;;;2748:34;1036:22726;;;;;;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;3004:6;1036:22726:7;;-1:-1:-1;;;;;;1036:22726:7;;;;;;;-1:-1:-1;;;;;1036:22726:7;3052:40:0;1036:22726:7;;3052:40:0;1036:22726:7;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;3024:9:2;1036:22726:7;;;;;;;;;;;;2933:116:2;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;:::i;:::-;;;;1868:40;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;1972:30;1036:22726;;;;;;;;;;;;;;;;;;;;;;;1496:32;1036:22726;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;1233:5;1036:22726;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;1710:6:0;1036:22726:7;4450:77;;4458:10;-1:-1:-1;;;;;1036:22726:7;;;4458:21;;:50;;;;4450:77;;:::i;:::-;2531:1:6;1036:22726:7;;;;;4317:13;1036:22726;;;4317:13;1036:22726;2466:103:6;;:::i;:::-;1036:22726:7;2531:1:6;:::i;1036:22726:7:-;;;;;;;;;;;;;;;;1307:4;1036:22726;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;:::i;:::-;;;;21320:9;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;23263:14;1036:22726;23310:11;1036:22726;;;23360:13;1036:22726;23387:17;1036:22726;23418:16;1036:22726;23448:13;1036:22726;23475:19;1036:22726;23526:4;1036:22726;;;;;;;;;;23546:22;1036:22726;;23582:24;1036:22726;;23620:13;1036:22726;;;;23647:5;1036:22726;;;23666:9;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1780:34;1036:22726;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;15107:21;;15103:47;;1036:22726;;15199:26;1036:22726;;;;15160:11;1036:22726;;15160:24;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21574:4;3024:9:2;1036:22726:7;;;;;;;;;;;;21556:24;2933:116:2;1036:22726:7;;;;;;;;;;;;;;;2298:32;1036:22726;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;;;20909:4;20892:22;;20888:49;;1036:22726;;;;1710:6:0;1036:22726:7;;;;;;;;;;;;;;20947:38;;;;1036:22726;;;;;;;20947:38;;;;;;;;1036:22726;;;20947:38;;;1036:22726;20947:38;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;1036:22726;;20947:38;;;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;2761:2:2;1036:22726:7;;;;;;;;;;;;;;;;21115:102;1036:22726;;;21115:37;2881:12:2;1036:22726:7;;;;;;;;;;;21115:37;;:::i;:::-;1036:22726;21173:42;1036:22726;;;;;;;21115:102;;:::i;1036:22726::-;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;735:10:5;1036:22726:7;;;;;;;;10503:17:2;;;10484:36;;10480:309;;1036:22726:7;4890:5:2;;;;;:::i;10480:309::-;10540:24;;;10536:130;;9717:19;;9713:89;;735:10:5;9815:21:2;9811:90;;1036:22726:7;;;;;;4890:5:2;1036:22726:7;;;;;;;;735:10:5;1036:22726:7;;;;;;;;10480:309:2;;;;;9811:90;1036:22726:7;;-1:-1:-1;;;9859:31:2;;;;;1036:22726:7;;;;;9859:31:2;9713:89;1036:22726:7;;-1:-1:-1;;;9759:32:2;;;;;1036:22726:7;;;;;9759:32:2;10536:130;1036:22726:7;;;-1:-1:-1;;;10591:60:2;;735:10:5;10591:60:2;;;1036:22726:7;;;;;;;;;;;;;;;;;-1:-1:-1;1036:22726:7;;10591:60:2;;;1036:22726:7;;;;;;;;;;;;;;2881:12:2;1036:22726:7;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;:::i;:::-;;;:::i;:::-;1500:62:0;;;:::i;:::-;-1:-1:-1;;;;;1036:22726:7;;13866:21;;13862:47;;1036:22726;;13955:21;1036:22726;;;;13919:8;1036:22726;;13919:21;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1602:34;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;8746:4:2;1036:22726:7;;:::i;:::-;;;735:10:5;;8746:4:2;:::i;1036:22726:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;-1:-1:-1;;;1036:22726:7;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;-1:-1:-1;;;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2033:48;1036:22726;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;;;;;;;;;1500:62:0;;:::i;:::-;1172:4:7;12654:22;;12650:47;;1036:22726;;;12744:21;1036:22726;;;12707:22;1036:22726;;;12707:22;1036:22726;;;;;;12744:21;1036:22726;;12650:47;1036:22726;;-1:-1:-1;;;12685:12:7;;;1036:22726;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1796:162:0:-;1710:6;1036:22726:7;-1:-1:-1;;;;;1036:22726:7;735:10:5;1855:23:0;1851:101;;1796:162::o;1851:101::-;1036:22726:7;;-1:-1:-1;;;1901:40:0;;735:10:5;1901:40:0;;;1036:22726:7;;;1901:40:0;1036:22726:7;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5297:300:2:-;;;-1:-1:-1;;;;;1036:22726:7;;;5380:18:2;5376:86;;1036:22726:7;;5475:16:2;5471:86;;5584:5;;;:::i;:::-;5297:300::o;5471:86::-;1036:22726:7;;-1:-1:-1;;;5514:32:2;;5396:1;5514:32;;;1036:22726:7;;;5514:32:2;5376:86;1036:22726:7;;-1:-1:-1;;;5421:30:2;;5396:1;5421:30;;;1036:22726:7;;;5421:30:2;9605:432;-1:-1:-1;;;;;1036:22726:7;;;;9717:19:2;;9713:89;;1036:22726:7;9815:21:2;;;9811:90;;1036:22726:7;9989:31:2;1036:22726:7;;9734:1:2;1036:22726:7;;;;;9734:1:2;1036:22726:7;;9734:1:2;1036:22726:7;;;;;9734:1:2;1036:22726:7;;;;;;;9989:31:2;9605:432::o;9811:90::-;1036:22726:7;;-1:-1:-1;;;9859:31:2;;9734:1;9859:31;;;1036:22726:7;;;9859:31:2;9713:89;1036:22726:7;;-1:-1:-1;;;9759:32:2;;9734:1;9759:32;;;1036:22726:7;;;9759:32:2;1036:22726:7;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;6258:1780::-;;1036:22726;6398:14;1036:22726;;;;;6442:11;1036:22726;;;6520:11;1036:22726;;6590:16;;;:35;;;6258:1780;6590:52;;;6258:1780;6586:107;;1036:22726;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;6721:8;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;6805:25;;;;;:::i;:::-;1036:22726;;;6878:18;;;;;:::i;:::-;7069:8;;;;;:::i;:::-;1036:22726;;;7199:9;1036:22726;;;;;;;;;;;;;;;;;7329:42;;;;6258:1780;7329:67;;;;6258:1780;7329:107;;;;6258:1780;1036:22726;;;;7549:24;;;;6258:1780;7549:36;;;6258:1780;7549:61;;;;6258:1780;7545:103;;6258:1780;7711:14;;7707:96;;7837:14;;;;1036:22726;7837:14;;;7897:9;7837:14;8006:25;7837:14;;:::i;:::-;7890:4;7897:9;;:::i;:::-;7955:35;1036:22726;7955:35;1036:22726;7955:35;:::i;:::-;;1036:22726;;;;;;;;;;8006:25;6258:1780::o;7707:96::-;7765:6;;;;;;;;:::i;7545:103::-;-1:-1:-1;;1036:22726:7;;;;;6442:11;1036:22726;2466:103:6;;:::i;:::-;2531:1;;:::i;:::-;1036:22726:7;3068:21:6;1036:22726:7;6442:11;1036:22726;;6442:11;1036:22726;7545:103;;;7549:61;7605:4;;7589:21;;;7549:61;;:36;;;;;;:24;1036:22726;;;;;;;7565:8;7549:24;;;7329:107;7413:22;;-1:-1:-1;7413:22:7;;;;7329:107;;;;;7413:22;;;;;7329:67;7387:9;;-1:-1:-1;7329:67:7;;;:42;7360:11;;-1:-1:-1;7329:42:7;;;6586:107;1036:22726;;-1:-1:-1;;;6665:17:7;;;;;6590:52;-1:-1:-1;1710:6:0;1036:22726:7;-1:-1:-1;;;;;1036:22726:7;;;;;6629:13;;6590:52;;:35;-1:-1:-1;1710:6:0;1036:22726:7;-1:-1:-1;;;;;1036:22726:7;;;;;6610:15;;6590:35;;5912:1107:2;-1:-1:-1;;;;;1036:22726:7;;;;;;6001:18:2;1036:22726:7;;;6987:25:2;1036:22726:7;;;6137:21:2;1036:22726:7;6137:21:2;1036:22726:7;6137:21:2;:::i;:::-;;1036:22726:7;5997:540:2;1036:22726:7;;6551:16:2;1036:22726:7;;;6714:21:2;1036:22726:7;;6714:21:2;1036:22726:7;6547:425:2;1036:22726:7;;;;;6987:25:2;5912:1107::o;6547:425::-;1036:22726:7;6017:1:2;1036:22726:7;6017:1:2;1036:22726:7;;;6017:1:2;1036:22726:7;;;;;;;6547:425:2;;5997:540;6017:1;1036:22726:7;;;;;;;;;;;6244:19:2;;;;6240:115;;1036:22726:7;;;;;;;;6987:25:2;1036:22726:7;;;;;;;;;;5997:540:2;;6240:115;1036:22726:7;;-1:-1:-1;;;6290:50:2;;-1:-1:-1;;;;;1036:22726:7;;;;6290:50:2;;;1036:22726:7;;;;;;;;;;;;;;;;10591:60:2;8158:1262:7;;;;;1036:22726;;;8421:6;1036:22726;;;;8421:31;;;;8158:1262;8421:54;;;;8158:1262;8417:91;;1036:22726;8523:13;1036:22726;;8522:14;1036:22726;;8522:33;;8158:1262;8518:70;;1036:22726;;;;;;;;-1:-1:-1;;1036:22726:7;;;;8681:11;1036:22726;;;;;;;;;;8681:36;;;8158:1262;8677:73;;8812:5;1036:22726;8803:14;;8799:42;;8935:9;;:29;;;8158:1262;8931:483;;8158:1262;;;;;;;;;;:::o;8931:483::-;9320:27;8980:24;;;9281:21;8980:24;;1036:22726;;;9039:9;1036:22726;;;;;;;;9038:16;:50;;;;8931:483;9038:94;;;;8931:483;9146:100;;;;9281:21;:::i;:::-;1036:22726;;;;;;;;;9320:27;:::i;:::-;9350:9;1036:22726;-1:-1:-1;9316:87:7;;8931:483;;;;;;;;;;9316:87;1036:22726;-1:-1:-1;;;9384:19:7;;;;;9146:100;1036:22726;;;9198:20;1036:22726;9207:11;1036:22726;;9198:20;;:::i;:::-;1036:22726;9146:100;9281:21;:::i;9038:94::-;9109:22;;-1:-1:-1;9109:22:7;;;;9038:94;;;;;;9109:22;;;;;;9038:50;1036:22726;;;;;;;;;;9074:14;;-1:-1:-1;9038:50:7;;;8935:29;1036:22726;;;;8948:16;;8935:29;;8799:42;1036:22726;;-1:-1:-1;;;8826:15:7;;;;;8681:36;1036:22726;;;;;;;;;;;;8681:36;;8518:70;8571:7;;;;;;:::o;8522:33::-;1036:22726;;8541:14;1036:22726;;;;8540:15;8522:33;;8421:54;-1:-1:-1;;;;;;1036:22726:7;;8470:4;8456:19;8421:54;;:31;-1:-1:-1;;;;;;1036:22726:7;;8447:4;8431:21;8421:31;;1036:22726;;;;;;;;;:::o;:::-;;;;9546:1;1036:22726;;;;;9546:1;1036:22726;;;;8746:4:2;1036:22726:7;;;;;;;:::o;:::-;;;;;;;;;;;;;;;9546:1;1036:22726;;;;;;;;;;;;;;;;;;;;;9546:1;1036:22726;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;9462:1231;9530:4;1036:22726;-1:-1:-1;;;;;1036:22726:7;;;9530:18;9526:31;;-1:-1:-1;9603:4:7;;1036:22726;;;;;;;;;9634:13;1036:22726;9623:24;;9619:37;;9700:13;1036:22726;;9689:24;;;;;;:75;;;9833:6;;1036:22726;9603:4;8746::2;9603::7;;;8746::2;:::i;:::-;1036:22726:7;;;;;;:::i;:::-;9904:1;1036:22726;;;;;;;;9603:4;9916:23;;;:::i;:::-;1036:22726;9949:14;;;:::i;:::-;9959:4;;1036:22726;;;9988:21;10213:15;10231:3;10213:15;1036:22726;10213:15;;;1036:22726;;;10036:212;;;;;1036:22726;;-1:-1:-1;;;10036:212:7;;1036:22726;;;;;;;;;;;10036:212;;9603:4;;10036:212;;;;;:::i;:::-;;;;;;;;;9689:75;10020:667;;;9462:1231;;:::o;10020:667::-;10285:27;:21;;:27;:::i;:::-;10330:7;10326:262;;9462:1231;;:::o;10326:262::-;10518:55;10374:19;10518:55;1036:22726;10374:19;;;:::i;:::-;1036:22726;10446:11;;;;:::i;:::-;10491:3;;;;:::i;:::-;1036:22726;;10518:55;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;;10518:55;;;;9462:1231::o;10036:212::-;;;;:::i;:::-;;;;;1036:22726;;;;-1:-1:-1;;;1036:22726:7;;;;;;;;9689:75;;;;;;9619:37;9649:7;;;:::o;9526:31::-;9550:7;:::o;2575:307:6:-;1899:1;2702:7;1036:22726:7;2702:18:6;2698:86;;1899:1;2702:7;1036:22726:7;2575:307:6:o;2698:86::-;1036:22726:7;;-1:-1:-1;;;2743:30:6;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;:::i;:::-;;;;-1:-1:-1;1036:22726:7;;;;:::o;:::-;;;:::o;10737:792::-;10802:14;;10798:27;;10873:29;1036:22726;10873:29;1036:22726;10873:29;:::i;:::-;;1036:22726;11000:17;1036:22726;10930:25;;;:::i;:::-;1036:22726;11000:17;;;:::i;:::-;1036:22726;11027:22;1036:22726;11027:22;1036:22726;11027:22;:::i;:::-;;1036:22726;11059:34;1036:22726;11059:34;1036:22726;11059:34;:::i;:::-;;1036:22726;11108:9;11104:47;;10737:792;11165:15;;11161:329;;10737:792;:::o;11161:329::-;11277:12;1036:22726;;;;-1:-1:-1;;;11316:57:7;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;1036:22726:7;;;;;;11269:105;;;;;;:::i;:::-;;11392:3;11388:92;;11161:329;10737:792;:::o;11388:92::-;11453:11;1036:22726;11277:12;1036:22726;;11453:11;:::i;11104:47::-;11134:9;1036:22726;11145:5;;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;11145:5;:::i;:::-;11104:47;;;1036:22726;;;;;;;;;;;;;;;;;;:::o;11535:362::-;11632:26;;-1:-1:-1;;;;;1036:22726:7;;;;11632:26;;;;11535:362;1036:22726;11632:26;;;;:::i;:::-;;11672:8;11668:223;;11535:362;;;;;:::o;11668:223::-;11752:4;1036:22726;11746:36;;;;;;1036:22726;;-1:-1:-1;;;11746:36:7;;;1036:22726;11746:36;1036:22726;11746:36;;;;;;;;;;11668:223;1036:22726;;;11806:32;1036:22726;;;;;;;;;;;;11806:32;;11746:36;11806:32;;1036:22726;;;;;11806:32;;;;;;;;;;11668:223;11856:3;;11852:28;;11668:223;;;;;;11852:28;1036:22726;;-1:-1:-1;;;11868:12:7;;11746:36;;11868:12;11806:32;;;;;;;;;;;;;;:::i;:::-;;;;;1036:22726;;;;;;;;;;11746:36;11806:32;11746:36;;;;1036:22726;11746:36;;:::i;:::-;;;;;;;1036:22726;;;;;;;;;;-1:-1:-1;;;;;1036:22726:7;;;;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;1036:22726:7;;;;;;;;;;;;-1:-1:-1;;;1036:22726:7;;;;;;;15311:882;;3024:9:2;15446:4:7;;1036:22726;;;;;;;;;15466:11;;:27;;;;15311:882;15462:45;;15311:882;15521:8;15517:21;;-1:-1:-1;;;;;1036:22726:7;15580:6;1036:22726;;;8746:4:2;15446::7;1036:22726;15446:4;8746::2;:::i;:::-;1036:22726:7;;;;;;:::i;:::-;15645:1;1036:22726;;;;;;;;15446:4;15657:23;;;:::i;:::-;1036:22726;15690:14;;;:::i;:::-;15700:4;;1036:22726;;;15729:21;15948:15;15966:3;15948:15;1036:22726;15948:15;;;1036:22726;;;15777:206;;;;;1036:22726;15777:206;1036:22726;;;;;;;;;;;;;;;15777:206;;15446:4;15777:206;;;;;:::i;:::-;;;;;;;;;15311:882;-1:-1:-1;15761:426:7;;1036:22726;;-1:-1:-1;;;16164:12:7;;15777:206;;16164:12;15761:426;16020:27;:21;;:27;:::i;:::-;16065:7;16061:65;;15761:426;15311:882::o;16061:65::-;16107:3;;;:::i;15777:206::-;;;;:::i;:::-;;;;15517:21;15531:7;;;:::o;15462:45::-;15495:12;-1:-1:-1;15495:12:7;15462:45;;15466:27;15481:12;;;;15466:27;;1036:22726;;;-1:-1:-1;;;;;1036:22726:7;;;;;;:::o;16287:808::-;16364:4;1036:22726;-1:-1:-1;;;;;1036:22726:7;;;;16364:18;;16360:32;;1036:22726;;-1:-1:-1;;;16431:34:7;;;;;1036:22726;16431:34;1036:22726;16431:34;;;;;;;;-1:-1:-1;;;16431:34:7;;;16287:808;1036:22726;-1:-1:-1;;;;;1036:22726:7;;;16479:7;;;:18;;;;16287:808;16475:48;;16546:29;1036:22726;;;;;;;;;;;16546:29;;;;;;;;;-1:-1:-1;16546:29:7;;;16287:808;-1:-1:-1;1036:22726:7;16641:4;16627:19;16641:4;;1036:22726;;16627:77;;1036:22726;16718:15;;;16714:45;;1036:22726;;;;;;;;;;;;16901:4;1036:22726;;;;;;;;;;;-1:-1:-1;;1036:22726:7;;;;;;;16956:3;1036:22726;;;;;;;;;;;;;;;;;;;17018:15;1036:22726;;;17018:15;;;:::i;:::-;:27;17014:39;;17080:8;16287:808;:::o;17014:39::-;1036:22726;;;;;;;;17047:6;16287:808;:::o;1036:22726::-;;;;;;-1:-1:-1;1036:22726:7;;;-1:-1:-1;1036:22726:7;;;;;;;-1:-1:-1;1036:22726:7;;;-1:-1:-1;1036:22726:7;;;;;;;-1:-1:-1;1036:22726:7;;;-1:-1:-1;1036:22726:7;;;;;;;-1:-1:-1;1036:22726:7;;;-1:-1:-1;1036:22726:7;16714:45;10503:17:2;;;;;16735:24:7;:::o;16627:77::-;1036:22726;;16627:77;;16546:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;1036:22726;;;-1:-1:-1;1036:22726:7;;;;;16475:48;10503:17:2;;;;;;;;16499:24:7;:::o;16479:18::-;1036:22726;;;;16490:7;16479:18;;16431:34;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1036:22726;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;16431:34;;;;;;;;;-1:-1:-1;16431:34:7;;16360:32;16384:8;;-1:-1:-1;16384:8:7;:::o;17192:1355::-;;3024:9:2;17343:4:7;1036:22726;;;;;;;;;;;17363:8;;;17359:21;;17404:23;;:::i;:::-;10503:17:2;-1:-1:-1;;17441:25:7;;17437:50;;17531:13;;;;17497:20;17531:13;:35;;17192:1355;17527:59;;;;17192:1355;17600:13;;;17596:26;;-1:-1:-1;;;;;17697:6:7;1036:22726;;;8746:4:2;17343::7;1036:22726;17343:4;8746::2;:::i;:::-;1036:22726:7;;;;;;:::i;:::-;17762:1;1036:22726;;;;;;;;17343:4;17774:23;;;:::i;:::-;1036:22726;17807:14;;;:::i;:::-;17817:4;;1036:22726;;;17846:21;18032:15;18050:3;18032:15;1036:22726;18032:15;;;1036:22726;;;17881:182;;;;;1036:22726;;;17881:182;1036:22726;;;;;;;;;;;;;17881:182;;17343:4;17881:182;;;;;;:::i;:::-;;;;;;;;;17192:1355;-1:-1:-1;17877:664:7;;1036:22726;;-1:-1:-1;;;18518:12:7;;17881:182;;18518:12;17877:664;18092:27;:21;;:27;:::i;:::-;18137:7;;18133:347;;17877:664;;;;;;17192:1355::o;18133:347::-;18164:34;1036:22726;18164:34;1036:22726;18164:34;:::i;:::-;;1036:22726;18032:15;18216:35;1036:22726;18269:18;1036:22726;;;;;;;;;;;18414:51;1036:22726;;18414:51;1036:22726;18269:18;1036:22726;18320:3;;;:::i;:::-;1036:22726;18359:19;;;:::i;:::-;1036:22726;18453:11;;;;:::i;:::-;1036:22726;;18414:51;;;;1036:22726;;;;;;;;;;;;;;;;;;;;;;;18414:51;;;;18133:347;;;;;;1036:22726;-1:-1:-1;;;1036:22726:7;;;17881:182;1036:22726;;;;17881:182;;;;;;;:::i;:::-;;;;;1036:22726;-1:-1:-1;;;1036:22726:7;;;;;;;;17596:26;17615:7;;;;:::o;17527:59::-;17568:18;-1:-1:-1;17527:59:7;;;17531:35;17548:18;;-1:-1:-1;17531:35:7;;;;17437:50;1036:22726;;-1:-1:-1;;;17475:12:7;;;;;19075:1552;19197:14;;:32;;;;19075:1552;19193:59;;19210:1;19300:4;1036:22726;;;;;;;;;;;;;19320:14;;19316:27;;1036:22726;;;;;;;;:::i;:::-;19391:1;1036:22726;;;;;;;;19300:4;19403:23;;;:::i;:::-;1036:22726;19436:14;;;:::i;:::-;1036:22726;;;;;;19446:4;;;1036:22726;;;19461:22;19705:6;;1036:22726;19954:15;19972:3;19954:15;1036:22726;19954:15;;;1036:22726;19493:1128;;19500:13;;;:39;;;19493:1128;19500:39;;;19569:21;;;;;;:45;;;8746:4:2;19300::7;;;8746::2;:::i;:::-;19747:21:7;;1036:22726;;19786:203;;;;;1036:22726;;;;;;;19786:203;;;;;;;;19300:4;;19786:203;;;;;;:::i;:::-;;;;;;;;;;;19569:45;-1:-1:-1;19782:738:7;;20500:5;;;;;;;;;;;;;19075:1552::o;19782:738::-;20022:27;:21;;:27;:::i;:::-;20071:7;;;;;20102:31;;1036:22726;;;20102:31;:::i;:::-;1036:22726;;19954:15;20155:35;1036:22726;20212:18;1036:22726;;;;;;;;;;;-1:-1:-1;1036:22726:7;20267:3;;;:::i;:::-;19300:4;1036:22726;;;;;;;;;;;;19493:1128;;;1036:22726;-1:-1:-1;;;1036:22726:7;;;;;;;;20067:338;20381:5;;;;;;;;;;;;;19075:1552::o;19786:203::-;;;;:::i;:::-;;;;;1036:22726;;;;-1:-1:-1;;;1036:22726:7;;;19786:203;1036:22726;;;;19569:45;;;19500:39;;;;;;;;;;;;19075:1552::o;19500:39::-;19517:22;;;;19500:39;;19193:59;1036:22726;;-1:-1:-1;;;19238:14:7;;;;;19197:32;19215:14;;;19197:32;
Swarm Source
ipfs://2c9131ee9e393b307754a4dc6260129bb9bd5d5b59fb73561e5b088b211e6675
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.