Source Code
Latest 25 from a total of 101 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Collect V3Fees | 38750041 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38747818 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38745601 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38743403 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38741181 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38739028 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38736774 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38734522 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38732303 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38730114 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38727910 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38725703 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38723500 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38721310 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38719101 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38716918 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38714679 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38712497 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38710240 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38708074 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38705824 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38703627 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38701398 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38699228 | 56 days ago | IN | 0 MON | 0.03011937 | ||||
| Collect V3Fees | 38696956 | 56 days ago | IN | 0 MON | 0.03011937 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 38588008 | 57 days ago | 154.7528345 MON | ||||
| 38587963 | 57 days ago | 0.0003825 MON | ||||
| 38577995 | 57 days ago | 0.0001 MON | ||||
| 38577995 | 57 days ago | 0.00014999 MON | ||||
| 38577995 | 57 days ago | 0.00004999 MON | ||||
| 38577995 | 57 days ago | 0.00004999 MON | ||||
| 38577995 | 57 days ago | 0.00004999 MON | ||||
| 38577995 | 57 days ago | 0.00004999 MON | ||||
| 38577995 | 57 days ago | 0.00004999 MON | ||||
| 38577983 | 57 days ago | 0.00099999 MON | ||||
| 38565989 | 57 days ago | 0.07650038 MON | ||||
| 38562205 | 57 days ago | 0.0200001 MON | ||||
| 38562205 | 57 days ago | 0.03000014 MON | ||||
| 38562205 | 57 days ago | 0.01000004 MON | ||||
| 38562205 | 57 days ago | 0.01000004 MON | ||||
| 38562205 | 57 days ago | 0.01000004 MON | ||||
| 38562205 | 57 days ago | 0.01000004 MON | ||||
| 38562205 | 57 days ago | 0.01000004 MON | ||||
| 38562193 | 57 days ago | 0.20000099 MON | ||||
| 38388187 | 58 days ago | 0.0002 MON | ||||
| 38388187 | 58 days ago | 0.0003 MON | ||||
| 38388187 | 58 days ago | 0.0001 MON | ||||
| 38388187 | 58 days ago | 0.0001 MON | ||||
| 38388187 | 58 days ago | 0.0001 MON | ||||
| 38388187 | 58 days ago | 0.0001 MON |
Loading...
Loading
Contract Name:
FeeDistributor
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-11-27
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// -----------------------------------------------------------------------
/// Interfaces
/// -----------------------------------------------------------------------
interface INonFungiblePositionManager {
struct CollectParams {
uint256 tokenId;
address recipient;
uint128 amount0Max;
uint128 amount1Max;
}
function collect(CollectParams calldata params)
external
payable
returns (uint256 amount0, uint256 amount1);
function positions(uint256 tokenId)
external
view
returns (
uint96 nonce,
address operator,
address token0,
address token1,
uint24 fee,
int24 tickLower,
int24 tickUpper,
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
}
interface IWMON {
function withdraw(uint256) external;
}
/// @title Ownable
/// @notice Minimal ownable implementation to avoid external imports.
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
owner = msg.sender;
emit OwnershipTransferred(address(0), msg.sender);
}
modifier onlyOwner() {
require(msg.sender == owner, "Ownable: caller is not the owner");
_;
}
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/// @title FeeDistributor
/// @notice Central hub for distributing MON/native fees for Gain.fun tokens, with:
/// - Bonding curve fees: 2% total (1% creator, 0.3% stakers, 0.2% platform, 0.5% others)
/// - V3 LP fees: 1% total (0.5% creator, 0.15% stakers, 0.1% platform, 0.25% others)
/// - claim-based creator rewards,
/// - claim-based Twitter/KOL handle share (bags.fm-style),
/// - on-chain wallet ↔ Twitter handle binding,
/// - CTO override for token creator.
contract FeeDistributor is Ownable {
// ---------------------------------------------------------------------
// Constants (BPS of total fee)
// ---------------------------------------------------------------------
// Bonding Curve fees (2% total)
uint16 public constant BC_CREATOR_BPS = 5000; // 50% = 1% of 2%
uint16 public constant BC_STAKING_BPS = 1500; // 15% = 0.3% of 2%
uint16 public constant BC_PLATFORM_BPS = 1000; // 10% = 0.2% of 2%
uint16 public constant BC_OTHER1_BPS = 500; // 5% = 0.1% of 2%
uint16 public constant BC_OTHER2_BPS = 500; // 5% = 0.1% of 2%
uint16 public constant BC_OTHER3_BPS = 500; // 5% = 0.1% of 2%
uint16 public constant BC_OTHER4_BPS = 500; // 5% = 0.1% of 2%
uint16 public constant BC_OTHER5_BPS = 500; // 5% = 0.1% of 2%
uint16 public constant BC_TOTAL_BPS = 10000;
// V3 LP fees (1% total)
uint16 public constant V3_CREATOR_BPS = 5000; // 50% = 0.5% of 1%
uint16 public constant V3_STAKING_BPS = 1500; // 15% = 0.15% of 1%
uint16 public constant V3_PLATFORM_BPS = 1000; // 10% = 0.1% of 1%
uint16 public constant V3_OTHER1_BPS = 500; // 5% = 0.05% of 1%
uint16 public constant V3_OTHER2_BPS = 500; // 5% = 0.05% of 1%
uint16 public constant V3_OTHER3_BPS = 500; // 5% = 0.05% of 1%
uint16 public constant V3_OTHER4_BPS = 500; // 5% = 0.05% of 1%
uint16 public constant V3_OTHER5_BPS = 500; // 5% = 0.05% of 1%
uint16 public constant V3_TOTAL_BPS = 10000;
// For handle share: fraction of CREATOR portion (0–10000 = 0–100% of creator share)
uint16 public constant HANDLE_BPS_DENOMINATOR = 10000;
// ---------------------------------------------------------------------
// Per-token creator config
// ---------------------------------------------------------------------
struct TokenConfig {
address creator;
bool exists;
}
/// @notice token => config (creator)
mapping(address => TokenConfig) public tokenConfig;
/// @notice Aggregated creator rewards (all tokens) that are not yet claimed
/// @dev Includes BOTH bonding curve fees AND V3 fees (after distribution)
mapping(address => uint256) public creatorUnclaimed;
/// @notice Aggregated creator rewards already claimed (lifetime)
/// @dev Includes BOTH bonding curve fees AND V3 fees (after claiming)
mapping(address => uint256) public creatorClaimed;
/// @notice V3 fees unclaimed (separate from bonding curve fees)
/// @dev Tracks V3 fees separately for accurate UI display
mapping(address => uint256) public creatorV3Unclaimed;
/// @notice V3 fees claimed (separate from bonding curve fees)
/// @dev Tracks V3 fees separately for accurate UI display
mapping(address => uint256) public creatorV3Claimed;
// ---------------------------------------------------------------------
// Twitter binding (wallet ↔ handle)
// ---------------------------------------------------------------------
/// @notice Wallet → normalized twitter handle (lowercase, no '@')
mapping(address => string) public twitterHandleOf;
/// @notice Wallet → handle hash (for quick lookup)
mapping(address => bytes32) public handleHashOfWallet;
/// @notice Handle hash → wallet (unique; one handle = one wallet)
mapping(bytes32 => address) public walletOfHandleHash;
/// @notice Handle hash → normalized handle string
mapping(bytes32 => string) public handleLabel;
// ---------------------------------------------------------------------
// Per-token handle share config
// ---------------------------------------------------------------------
struct HandleShare {
bytes32 handleHash; // which handle gets share
uint16 bpsOfCreator; // share of creator's 50% (0–10000)
}
/// @notice token => handle share config
mapping(address => HandleShare) public tokenHandleShare;
/// @notice token => handleHash => unclaimed native rewards for that handle
mapping(address => mapping(bytes32 => uint256)) public handleUnclaimed;
/// @notice token => handleHash => claimed (lifetime) native rewards
mapping(address => mapping(bytes32 => uint256)) public handleClaimed;
// ---------------------------------------------------------------------
// Admin wallet (for manual operations)
// ---------------------------------------------------------------------
/// @notice Admin wallet that can call edit functions (setRecipients, etc.)
/// Owner (Factory) can set/update admin wallet.
address public adminWallet;
event AdminWalletUpdated(address indexed newAdmin);
// ---------------------------------------------------------------------
// Protocol recipient wallets
// ---------------------------------------------------------------------
address public platformWallet;
address public stakingWallet;
address public other1Wallet;
address public other2Wallet;
address public other3Wallet;
address public other4Wallet;
address public other5Wallet;
/// @notice Staking contract address (for auto-distributing staking rewards).
address public stakingContract;
/// @notice BondingCurve contract address (allowed to register graduation NFTs).
address public bondingCurve;
// ---------------------------------------------------------------------
// V3 LP Fee Escrow System
// ---------------------------------------------------------------------
/// @notice Uniswap V3 NonFungiblePositionManager address
address public positionManager;
/// @notice WMON token address (for unwrapping) - Hardcoded
address public constant wmon = 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A;
/// @notice Track V3 LP NFT per token
mapping(address => uint256) public tokenNftId; // token => NFT tokenId
/// @notice Track V3 LP fees collected per token (escrowed)
mapping(address => uint256) public v3FeesCollectedMon; // token => total MON collected
mapping(address => uint256) public v3FeesCollectedToken; // token => total token collected
/// @notice Track last collection timestamp per token
mapping(address => uint256) public lastCollectionTime; // token => timestamp
// ---------------------------------------------------------------------
// Events
// ---------------------------------------------------------------------
event TokenCreatorSet(address indexed token, address indexed creator);
event RecipientsUpdated(
address indexed platformWallet,
address indexed stakingWallet,
address indexed other1Wallet,
address other2Wallet,
address other3Wallet,
address other4Wallet,
address other5Wallet
);
event TwitterHandleBound(address indexed wallet, bytes32 indexed handleHash, string handle);
event TwitterHandleUnbound(address indexed wallet, bytes32 indexed handleHash, string handle);
event TokenHandleShareSet(
address indexed token,
bytes32 indexed handleHash,
string handle,
uint16 bpsOfCreator
);
event CreatorAccrued(
address indexed creator,
address indexed token,
uint256 netAmount,
uint256 grossAmount
);
event HandleAccrued(
address indexed token,
bytes32 indexed handleHash,
uint256 amount
);
event CreatorClaimed(address indexed creator, uint256 amount);
event HandleClaimed(
address indexed token,
bytes32 indexed handleHash,
address indexed wallet,
uint256 amount
);
/// @notice Simplified to avoid stack-too-deep
event FeeDistributed(
address indexed token,
uint256 totalAmount,
uint256 creatorGross,
uint256 creatorNet,
uint256 handleAmount,
uint256 stakingAmount,
uint256 platformAmount
);
event V3NftRegistered(address indexed token, uint256 indexed tokenId);
event V3FeesCollected(address indexed token, uint256 monAmount, uint256 tokenAmount);
event V3FeesDistributed(address indexed token, uint256 monAmount, uint256 tokenAmount);
event StakingContractUpdated(address indexed stakingContract);
event BondingCurveUpdated(address indexed bondingCurve);
// ---------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------
/// @param _platformWallet Initial platform wallet (must not be zero)
/// @param _positionManager Uniswap V3 NonFungiblePositionManager address (can be zero initially)
constructor(address _platformWallet, address _positionManager) {
require(_platformWallet != address(0), "FeeDistributor: platform wallet is zero");
platformWallet = _platformWallet;
positionManager = _positionManager;
emit RecipientsUpdated(
platformWallet,
stakingWallet,
other1Wallet,
other2Wallet,
other3Wallet,
other4Wallet,
other5Wallet
);
}
// ---------------------------------------------------------------------
// Internal: handle normalize + hash
// ---------------------------------------------------------------------
/// @dev Normalize handle: strip leading '@', lowercase ASCII, prefix "twitter:"
function _normalizeAndHash(string memory handle)
internal
pure
returns (bytes32 hh, string memory norm)
{
bytes memory s = bytes(handle);
uint256 len = s.length;
require(len > 0, "FeeDistributor: empty handle");
uint256 start = 0;
if (s[0] == bytes1(uint8(64))) { // '@'
require(len > 1, "FeeDistributor: empty handle");
start = 1;
}
bytes memory t = new bytes(len - start);
for (uint256 i = start; i < len; i++) {
uint8 c = uint8(s[i]);
if (c >= 65 && c <= 90) {
t[i - start] = bytes1(c + 32); // A–Z -> a–z
} else {
t[i - start] = s[i];
}
}
norm = string(t);
hh = keccak256(abi.encodePacked("twitter:", t));
}
// ---------------------------------------------------------------------
// Modifiers
// ---------------------------------------------------------------------
modifier onlyOwnerOrAdmin() {
require(
msg.sender == owner || msg.sender == adminWallet,
"FeeDistributor: not owner/admin"
);
_;
}
modifier onlyTokenCreatorOrOwner(address token) {
TokenConfig memory cfg = tokenConfig[token];
require(cfg.exists, "FeeDistributor: token not configured");
require(
msg.sender == cfg.creator || msg.sender == owner || msg.sender == adminWallet,
"FeeDistributor: not creator/owner/admin"
);
_;
}
// ---------------------------------------------------------------------
// Owner/Admin configuration
// ---------------------------------------------------------------------
/// @notice Set or update the admin wallet (only owner can do this).
/// @dev Admin wallet can call edit functions like setRecipients, setTokenCreator.
function setAdminWallet(address _adminWallet) external onlyOwner {
adminWallet = _adminWallet;
emit AdminWalletUpdated(_adminWallet);
}
/// @notice Set or update the creator for a given token (CTO override).
/// @dev Old creator retains their unclaimed balance; new creator earns future rewards.
/// Can be called by owner (Factory) or admin wallet.
function setTokenCreator(address token, address creator) external onlyOwnerOrAdmin {
require(token != address(0), "FeeDistributor: token is zero address");
tokenConfig[token] = TokenConfig({
creator: creator,
exists: true
});
emit TokenCreatorSet(token, creator);
}
/// @notice Update protocol recipient wallets.
/// @dev Only platformWallet is required; others can be zero (their share will go to platform).
/// Can be called by owner (Factory) or admin wallet.
function setRecipients(
address _platformWallet,
address _stakingWallet,
address _other1Wallet,
address _other2Wallet,
address _other3Wallet,
address _other4Wallet,
address _other5Wallet
) external onlyOwnerOrAdmin {
require(_platformWallet != address(0), "FeeDistributor: platform wallet is zero");
platformWallet = _platformWallet;
stakingWallet = _stakingWallet;
other1Wallet = _other1Wallet;
other2Wallet = _other2Wallet;
other3Wallet = _other3Wallet;
other4Wallet = _other4Wallet;
other5Wallet = _other5Wallet;
emit RecipientsUpdated(
platformWallet,
stakingWallet,
other1Wallet,
other2Wallet,
other3Wallet,
other4Wallet,
other5Wallet
);
}
/// @notice Set Position Manager address (only owner).
/// @dev WMON address is hardcoded as constant.
function setV3Addresses(address _positionManager) external onlyOwner {
positionManager = _positionManager;
}
/// @notice Set staking contract address (only owner).
function setStakingContract(address _stakingContract) external onlyOwner {
stakingContract = _stakingContract;
emit StakingContractUpdated(_stakingContract);
}
/// @notice Set BondingCurve contract address (only owner).
/// @dev This address is allowed to register graduation NFTs.
function setBondingCurve(address _bondingCurve) external onlyOwner {
bondingCurve = _bondingCurve;
emit BondingCurveUpdated(_bondingCurve);
}
// ---------------------------------------------------------------------
// Wallet ↔ Twitter binding
// ---------------------------------------------------------------------
function bindTwitterHandle(string memory handle) external {
(bytes32 hh, string memory norm) = _normalizeAndHash(handle);
address currentOwner = walletOfHandleHash[hh];
require(
currentOwner == address(0) || currentOwner == msg.sender,
"FeeDistributor: handle already bound"
);
// Clear old binding of this wallet if different
bytes32 oldHash = handleHashOfWallet[msg.sender];
if (oldHash != bytes32(0) && oldHash != hh) {
if (walletOfHandleHash[oldHash] == msg.sender) {
walletOfHandleHash[oldHash] = address(0);
}
}
twitterHandleOf[msg.sender] = norm;
handleHashOfWallet[msg.sender] = hh;
walletOfHandleHash[hh] = msg.sender;
handleLabel[hh] = norm;
emit TwitterHandleBound(msg.sender, hh, norm);
}
/// @notice Unbind your current Twitter handle from your wallet.
function unbindTwitterHandle() external {
bytes32 hh = handleHashOfWallet[msg.sender];
require(hh != bytes32(0), "FeeDistributor: no handle bound");
string memory norm = twitterHandleOf[msg.sender];
handleHashOfWallet[msg.sender] = bytes32(0);
twitterHandleOf[msg.sender] = "";
if (walletOfHandleHash[hh] == msg.sender) {
walletOfHandleHash[hh] = address(0);
}
emit TwitterHandleUnbound(msg.sender, hh, norm);
}
/// @notice Get the wallet currently bound to a given handle string.
function getWalletForHandle(string memory handle) external view returns (address) {
(bytes32 hh, ) = _normalizeAndHash(handle);
return walletOfHandleHash[hh];
}
// ---------------------------------------------------------------------
// Token handle share (bags.fm-style)
// ---------------------------------------------------------------------
/// @notice Creator (or owner) sets how much of their 50% share goes to a given handle.
/// @param token Token address.
/// @param handle Twitter handle string (with or without '@').
/// @param bpsOfCreator BPS of creator's 50% (0–10000).
/// Example: 3000 = 30% of creator share (15% of total fee).
function setTokenHandleShare(
address token,
string memory handle,
uint16 bpsOfCreator
) external onlyTokenCreatorOrOwner(token) {
if (bpsOfCreator == 0 || bytes(handle).length == 0) {
// disable handle share
tokenHandleShare[token] = HandleShare({
handleHash: bytes32(0),
bpsOfCreator: 0
});
emit TokenHandleShareSet(token, bytes32(0), "", 0);
return;
}
require(bpsOfCreator <= HANDLE_BPS_DENOMINATOR, "FeeDistributor: handle bps too high");
(bytes32 hh, string memory norm) = _normalizeAndHash(handle);
tokenHandleShare[token] = HandleShare({
handleHash: hh,
bpsOfCreator: bpsOfCreator
});
handleLabel[hh] = norm;
emit TokenHandleShareSet(token, hh, norm, bpsOfCreator);
}
// ---------------------------------------------------------------------
// Internal helpers
// ---------------------------------------------------------------------
/// @dev Apply handle share on the creator's gross share.
/// Returns (creatorNet, handleAmount).
function _applyHandleShare(
address token,
uint256 creatorGross
) internal returns (uint256 creatorNet, uint256 handleAmount) {
creatorNet = creatorGross;
HandleShare memory hs = tokenHandleShare[token];
bytes32 hh = hs.handleHash;
if (creatorGross == 0 || hh == bytes32(0) || hs.bpsOfCreator == 0) {
return (creatorNet, 0);
}
handleAmount = (creatorGross * hs.bpsOfCreator) / HANDLE_BPS_DENOMINATOR;
if (handleAmount == 0) {
return (creatorNet, 0);
}
creatorNet = creatorGross - handleAmount;
handleUnclaimed[token][hh] += handleAmount;
emit HandleAccrued(token, hh, handleAmount);
}
function _sendNative(address to, uint256 amount) internal {
if (amount == 0) return;
(bool ok, ) = payable(to).call{value: amount}("");
require(ok, "FeeDistributor: native transfer failed");
}
// ---------------------------------------------------------------------
// Fee distribution (BondingCurve/tax tokens call this)
// ---------------------------------------------------------------------
/// @dev Struct to reduce stack depth in fee distribution
struct DistributionAmounts {
uint256 creatorGross;
uint256 creatorNet;
uint256 handleAmount;
uint256 stakingAmount;
uint256 platformAmount;
uint256 sum;
}
/// @dev Internal fee distribution logic for bonding curve fees (2% total).
function _distributeBondingCurveFee(address token, uint256 amount) internal {
require(amount > 0, "FeeDistributor: no value sent");
TokenConfig memory cfg = tokenConfig[token];
DistributionAmounts memory dist;
dist.creatorGross = (amount * BC_CREATOR_BPS) / BC_TOTAL_BPS;
dist.stakingAmount = (amount * BC_STAKING_BPS) / BC_TOTAL_BPS;
dist.platformAmount= (amount * BC_PLATFORM_BPS) / BC_TOTAL_BPS;
dist.sum = dist.creatorGross + dist.stakingAmount + dist.platformAmount;
uint256 otherAmount;
// other1
otherAmount = (amount * BC_OTHER1_BPS) / BC_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other1Wallet != address(0)) {
_sendNative(other1Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other2
otherAmount = (amount * BC_OTHER2_BPS) / BC_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other2Wallet != address(0)) {
_sendNative(other2Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other3
otherAmount = (amount * BC_OTHER3_BPS) / BC_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other3Wallet != address(0)) {
_sendNative(other3Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other4
otherAmount = (amount * BC_OTHER4_BPS) / BC_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other4Wallet != address(0)) {
_sendNative(other4Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other5
otherAmount = (amount * BC_OTHER5_BPS) / BC_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other5Wallet != address(0)) {
_sendNative(other5Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// rounding dust → platform
uint256 remainder = amount - dist.sum;
dist.platformAmount += remainder;
// --- Creator share (gross -> net, optional handle escrow) ---
if (dist.creatorGross > 0 && cfg.creator != address(0)) {
(dist.creatorNet, dist.handleAmount) = _applyHandleShare(token, dist.creatorGross);
if (dist.creatorNet > 0) {
creatorUnclaimed[cfg.creator] += dist.creatorNet;
emit CreatorAccrued(cfg.creator, token, dist.creatorNet, dist.creatorGross);
}
} else {
// no creator configured -> send whole creator share to platform
dist.platformAmount += dist.creatorGross;
dist.creatorGross = 0;
}
// --- Staking (auto-send to staking contract, or platform fallback) ---
if (dist.stakingAmount > 0) {
if (stakingContract != address(0)) {
// Call addRewards() with value (staking contract will distribute to stakers)
(bool success, ) = payable(stakingContract).call{value: dist.stakingAmount}(
abi.encodeWithSignature("addRewards()")
);
if (!success) {
// If call fails, fallback to platform
dist.platformAmount += dist.stakingAmount;
dist.stakingAmount = 0;
}
} else if (stakingWallet != address(0)) {
_sendNative(stakingWallet, dist.stakingAmount);
} else {
dist.platformAmount += dist.stakingAmount;
dist.stakingAmount = 0;
}
}
// --- Platform (auto-send, fallback to owner) ---
if (dist.platformAmount > 0) {
address target = platformWallet != address(0) ? platformWallet : owner;
_sendNative(target, dist.platformAmount);
}
emit FeeDistributed(
token,
amount,
dist.creatorGross,
dist.creatorNet,
dist.handleAmount,
dist.stakingAmount,
dist.platformAmount
);
}
/// @dev Internal fee distribution logic for V3 LP fees (1% total).
function _distributeV3LpFee(address token, uint256 amount) internal {
require(amount > 0, "FeeDistributor: no value sent");
TokenConfig memory cfg = tokenConfig[token];
DistributionAmounts memory dist;
dist.creatorGross = (amount * V3_CREATOR_BPS) / V3_TOTAL_BPS;
dist.stakingAmount = (amount * V3_STAKING_BPS) / V3_TOTAL_BPS;
dist.platformAmount= (amount * V3_PLATFORM_BPS) / V3_TOTAL_BPS;
dist.sum = dist.creatorGross + dist.stakingAmount + dist.platformAmount;
uint256 otherAmount;
// other1
otherAmount = (amount * V3_OTHER1_BPS) / V3_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other1Wallet != address(0)) {
_sendNative(other1Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other2
otherAmount = (amount * V3_OTHER2_BPS) / V3_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other2Wallet != address(0)) {
_sendNative(other2Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other3
otherAmount = (amount * V3_OTHER3_BPS) / V3_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other3Wallet != address(0)) {
_sendNative(other3Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other4
otherAmount = (amount * V3_OTHER4_BPS) / V3_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other4Wallet != address(0)) {
_sendNative(other4Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// other5
otherAmount = (amount * V3_OTHER5_BPS) / V3_TOTAL_BPS;
dist.sum += otherAmount;
if (otherAmount > 0) {
if (other5Wallet != address(0)) {
_sendNative(other5Wallet, otherAmount);
} else {
dist.platformAmount += otherAmount;
}
}
// rounding dust → platform
uint256 remainder = amount - dist.sum;
dist.platformAmount += remainder;
// --- Creator share (gross -> net, optional handle escrow) ---
if (dist.creatorGross > 0 && cfg.creator != address(0)) {
(dist.creatorNet, dist.handleAmount) = _applyHandleShare(token, dist.creatorGross);
if (dist.creatorNet > 0) {
creatorUnclaimed[cfg.creator] += dist.creatorNet; // Keep for backward compatibility
creatorV3Unclaimed[cfg.creator] += dist.creatorNet; // Track V3 fees separately
emit CreatorAccrued(cfg.creator, token, dist.creatorNet, dist.creatorGross);
}
} else {
// no creator configured -> send whole creator share to platform
dist.platformAmount += dist.creatorGross;
dist.creatorGross = 0;
}
// --- Staking (auto-send to staking contract, or platform fallback) ---
if (dist.stakingAmount > 0) {
if (stakingContract != address(0)) {
// Call addRewards() with value (staking contract will distribute to stakers)
(bool success, ) = payable(stakingContract).call{value: dist.stakingAmount}(
abi.encodeWithSignature("addRewards()")
);
if (!success) {
// If call fails, fallback to platform
dist.platformAmount += dist.stakingAmount;
dist.stakingAmount = 0;
}
} else if (stakingWallet != address(0)) {
_sendNative(stakingWallet, dist.stakingAmount);
} else {
dist.platformAmount += dist.stakingAmount;
dist.stakingAmount = 0;
}
}
// --- Platform (auto-send, fallback to owner) ---
if (dist.platformAmount > 0) {
address target = platformWallet != address(0) ? platformWallet : owner;
_sendNative(target, dist.platformAmount);
}
emit FeeDistributed(
token,
amount,
dist.creatorGross,
dist.creatorNet,
dist.handleAmount,
dist.stakingAmount,
dist.platformAmount
);
}
/// @notice Distribute a fee for a given token (from bonding curve).
/// @dev Caller sends MON/native as msg.value. Typically BondingCurve or tax-token.
/// Split uses bonding curve fee distribution (2% total).
/// Creator's 50% portion optionally gets shared with a Twitter handle (bags.fm-style).
/// @param token The token for which this fee was generated.
function distributeFee(address token) external payable {
_distributeBondingCurveFee(token, msg.value);
}
// ---------------------------------------------------------------------
// Claim functions (claim-based rewards)
// ---------------------------------------------------------------------
/// @notice Claim all accumulated creator rewards for the caller (from all tokens).
/// @dev Claims both Curve and V3 fees together (backward compatibility).
function claimCreatorRewards() external {
uint256 amount = creatorUnclaimed[msg.sender];
require(amount > 0, "FeeDistributor: no creator rewards");
// Track V3 fees separately
uint256 v3Amount = creatorV3Unclaimed[msg.sender];
creatorUnclaimed[msg.sender] = 0;
creatorV3Unclaimed[msg.sender] = 0; // Clear V3 unclaimed
creatorClaimed[msg.sender] += amount; // Keep for backward compatibility
creatorV3Claimed[msg.sender] += v3Amount; // Track V3 claimed separately
_sendNative(msg.sender, amount);
emit CreatorClaimed(msg.sender, amount);
}
/// @notice Claim only bonding curve fees (excludes V3 fees).
function claimCurveRewards() external {
uint256 totalUnclaimed = creatorUnclaimed[msg.sender];
uint256 v3Unclaimed = creatorV3Unclaimed[msg.sender];
uint256 curveAmount = totalUnclaimed > v3Unclaimed ? totalUnclaimed - v3Unclaimed : 0;
require(curveAmount > 0, "FeeDistributor: no curve rewards");
// Update balances
creatorUnclaimed[msg.sender] = v3Unclaimed; // Keep only V3 unclaimed
creatorClaimed[msg.sender] += curveAmount; // Track total claimed
_sendNative(msg.sender, curveAmount);
emit CreatorClaimed(msg.sender, curveAmount);
}
/// @notice Claim only V3 pool fees (excludes bonding curve fees).
function claimV3Rewards() external {
uint256 v3Amount = creatorV3Unclaimed[msg.sender];
require(v3Amount > 0, "FeeDistributor: no V3 rewards");
// Safety check: ensure creatorUnclaimed >= v3Amount (should always be true, but check for safety)
require(creatorUnclaimed[msg.sender] >= v3Amount, "FeeDistributor: invalid state");
// Update balances
creatorUnclaimed[msg.sender] -= v3Amount; // Subtract V3 from total
creatorV3Unclaimed[msg.sender] = 0; // Clear V3 unclaimed
creatorClaimed[msg.sender] += v3Amount; // Track total claimed
creatorV3Claimed[msg.sender] += v3Amount; // Track V3 claimed separately
_sendNative(msg.sender, v3Amount);
emit CreatorClaimed(msg.sender, v3Amount);
}
/// @notice Claim handle rewards for the caller's currently bound handle for a given token.
/// @dev Uses handleHashOfWallet[msg.sender]; if wallet unbound, reverts.
function claimHandleRewards(address token) external {
bytes32 hh = handleHashOfWallet[msg.sender];
require(hh != bytes32(0), "FeeDistributor: no handle bound");
uint256 amount = handleUnclaimed[token][hh];
require(amount > 0, "FeeDistributor: no handle rewards");
handleUnclaimed[token][hh] = 0;
handleClaimed[token][hh] += amount;
_sendNative(msg.sender, amount);
emit HandleClaimed(token, hh, msg.sender, amount);
}
// ---------------------------------------------------------------------
// Views / helpers for frontend
// ---------------------------------------------------------------------
/// @notice Get current handle share config for a token (normalized handle + bps).
function getTokenHandleInfo(address token)
external
view
returns (string memory handle, uint16 bpsOfCreator)
{
HandleShare memory hs = tokenHandleShare[token];
handle = handleLabel[hs.handleHash];
bpsOfCreator = hs.bpsOfCreator;
}
/// @notice Get handle stats for a token + wallet (using wallet's bound handle).
/// @dev unclaimed/claimed are for that (token, handle) pair.
function getHandleStatsForWallet(address token, address wallet)
external
view
returns (
string memory handle,
uint16 bpsOfCreator,
uint256 unclaimed,
uint256 claimed
)
{
bytes32 hh = handleHashOfWallet[wallet];
HandleShare memory hs = tokenHandleShare[token];
handle = handleLabel[hh];
if (hh == hs.handleHash) {
bpsOfCreator = hs.bpsOfCreator;
} else {
bpsOfCreator = 0;
}
unclaimed = handleUnclaimed[token][hh];
claimed = handleClaimed[token][hh];
}
/// @notice Simple view: get token creator wallet + their bound handle.
function getTokenCreator(address token)
external
view
returns (address creatorWallet, string memory creatorHandle)
{
TokenConfig memory cfg = tokenConfig[token];
creatorWallet = cfg.creator;
creatorHandle = twitterHandleOf[creatorWallet];
}
/// @notice Simple view: full info for token page (creator + active handle + pending amounts).
function getTokenFullInfo(address token)
external
view
returns (
address creatorWallet,
string memory creatorHandle,
string memory activeHandle,
address activeHandleWallet,
uint16 handleShareBps,
uint256 creatorUnclaimedAmount,
uint256 handleUnclaimedAmount
)
{
TokenConfig memory cfg = tokenConfig[token];
creatorWallet = cfg.creator;
creatorHandle = twitterHandleOf[creatorWallet];
HandleShare memory hs = tokenHandleShare[token];
bytes32 hh = hs.handleHash;
activeHandle = handleLabel[hh];
activeHandleWallet = walletOfHandleHash[hh];
handleShareBps = hs.bpsOfCreator;
creatorUnclaimedAmount = creatorUnclaimed[creatorWallet];
handleUnclaimedAmount = handleUnclaimed[token][hh];
}
// ---------------------------------------------------------------------
// V3 LP Fee Escrow System
// ---------------------------------------------------------------------
/// @notice Register V3 LP NFT from BondingCurve (only BondingCurve can call).
/// @dev Only the authorized BondingCurve contract can register NFTs.
function registerGraduationNft(address token, uint256 tokenId) external {
require(msg.sender == bondingCurve, "FeeDistributor: not BondingCurve");
require(bondingCurve != address(0), "FeeDistributor: BondingCurve not set");
require(tokenNftId[token] == 0, "FeeDistributor: NFT already registered");
require(token != address(0), "FeeDistributor: token is zero");
require(tokenId > 0, "FeeDistributor: tokenId is zero");
tokenNftId[token] = tokenId;
emit V3NftRegistered(token, tokenId);
}
/// @notice Get claimable V3 fees for a token (from tokensOwed in position).
/// @dev Returns fees that are already accrued but not yet collected.
function getClaimableV3Fees(address token)
external
view
returns (uint256 monAmount, uint256 tokenAmount)
{
uint256 tokenId = tokenNftId[token];
if (tokenId == 0 || positionManager == address(0)) return (0, 0);
// Get position data
(
, // uint96 nonce
, // address operator
address token0,
address token1,
, // uint24 fee
, // int24 tickLower
, // int24 tickUpper
, // uint128 liquidity
, // uint256 feeGrowthInside0LastX128
, // uint256 feeGrowthInside1LastX128
uint128 tokensOwed0,
uint128 tokensOwed1
) = INonFungiblePositionManager(positionManager).positions(tokenId);
// tokensOwed are fees that accumulated but not yet collected
// Determine which is WMON and which is token
if (token0 == wmon) {
monAmount = uint256(tokensOwed0);
tokenAmount = uint256(tokensOwed1);
} else if (token1 == wmon) {
monAmount = uint256(tokensOwed1);
tokenAmount = uint256(tokensOwed0);
} else {
// WMON not found in pair (shouldn't happen)
return (0, 0);
}
}
/// @notice Get total V3 fees collected (already harvested) for a token.
function getCollectedV3Fees(address token)
external
view
returns (uint256 monAmount, uint256 tokenAmount)
{
return (v3FeesCollectedMon[token], v3FeesCollectedToken[token]);
}
/// @notice Get creator's share of V3 fees (claimable + collected).
function getCreatorV3Rewards(address token, address creator)
external
view
returns (
uint256 claimableMon,
uint256 claimableToken,
uint256 collectedMon,
uint256 collectedToken
)
{
TokenConfig memory cfg = tokenConfig[token];
if (cfg.creator != creator) return (0, 0, 0, 0);
// Get claimable fees (inline calculation to avoid external call)
uint256 tokenId = tokenNftId[token];
uint256 monOwed = 0;
uint256 tokenOwed = 0;
if (tokenId > 0 && positionManager != address(0)) {
(
, // uint96 nonce
, // address operator
address token0,
address token1,
, // uint24 fee
, // int24 tickLower
, // int24 tickUpper
, // uint128 liquidity
, // uint256 feeGrowthInside0LastX128
, // uint256 feeGrowthInside1LastX128
uint128 tokensOwed0,
uint128 tokensOwed1
) = INonFungiblePositionManager(positionManager).positions(tokenId);
if (token0 == wmon) {
monOwed = uint256(tokensOwed0);
tokenOwed = uint256(tokensOwed1);
} else if (token1 == wmon) {
monOwed = uint256(tokensOwed1);
tokenOwed = uint256(tokensOwed0);
}
}
// Calculate creator's share (50% of V3 LP fees)
claimableMon = (monOwed * V3_CREATOR_BPS) / V3_TOTAL_BPS;
claimableToken = (tokenOwed * V3_CREATOR_BPS) / V3_TOTAL_BPS;
// Get already collected fees (that are in escrow)
collectedMon = (v3FeesCollectedMon[token] * V3_CREATOR_BPS) / V3_TOTAL_BPS;
collectedToken = (v3FeesCollectedToken[token] * V3_CREATOR_BPS) / V3_TOTAL_BPS;
}
/// @notice Get creator's Curve fees (bonding curve only, excludes V3 fees).
/// @dev Returns Curve fees by subtracting V3 fees from total creatorUnclaimed/creatorClaimed.
function getCreatorCurveRewards(address creator)
external
view
returns (
uint256 curveUnclaimed,
uint256 curveClaimed
)
{
uint256 totalUnclaimed = creatorUnclaimed[creator];
uint256 totalClaimed = creatorClaimed[creator];
uint256 v3Unclaimed = creatorV3Unclaimed[creator];
uint256 v3Claimed = creatorV3Claimed[creator];
// Curve = Total - V3
curveUnclaimed = totalUnclaimed > v3Unclaimed ? totalUnclaimed - v3Unclaimed : 0;
curveClaimed = totalClaimed > v3Claimed ? totalClaimed - v3Claimed : 0;
}
/// @notice Get creator's V3 fees (separate tracking).
/// @dev Returns V3 fees that have been distributed and are claimable/claimed.
function getCreatorV3RewardsSeparate(address creator)
external
view
returns (
uint256 v3Unclaimed,
uint256 v3Claimed
)
{
v3Unclaimed = creatorV3Unclaimed[creator];
v3Claimed = creatorV3Claimed[creator];
}
/// @notice Collect V3 fees from LP position and escrow them (Option 1: Manual).
/// @dev Can be called by anyone (or restrict to owner/admin if preferred).
function collectV3Fees(address token) external {
uint256 tokenId = tokenNftId[token];
require(tokenId > 0, "FeeDistributor: no NFT for token");
require(positionManager != address(0), "FeeDistributor: positionManager not set");
// Get position to determine token order
(, , address token0, address token1, , , , , , , , ) =
INonFungiblePositionManager(positionManager).positions(tokenId);
// Collect fees from V3 position
(uint256 amount0, uint256 amount1) = INonFungiblePositionManager(positionManager).collect(
INonFungiblePositionManager.CollectParams({
tokenId: tokenId,
recipient: address(this), // Send to FeeDistributor
amount0Max: type(uint128).max,
amount1Max: type(uint128).max
})
);
// Determine which is WMON and which is token
uint256 monAmount;
uint256 tokenAmount;
if (token0 == wmon) {
monAmount = amount0;
tokenAmount = amount1;
} else if (token1 == wmon) {
monAmount = amount1;
tokenAmount = amount0;
} else {
revert("FeeDistributor: WMON not in pair");
}
// Unwrap WMON to MON if needed
if (monAmount > 0) {
IWMON(wmon).withdraw(monAmount);
}
// Escrow the fees
v3FeesCollectedMon[token] += monAmount;
v3FeesCollectedToken[token] += tokenAmount;
lastCollectionTime[token] = block.timestamp;
emit V3FeesCollected(token, monAmount, tokenAmount);
}
/// @notice Distribute escrowed V3 fees using existing distributeFee logic.
/// @dev Converts token fees to MON first (or distributes separately).
function distributeEscrowedV3Fees(address token) external {
uint256 monAmount = v3FeesCollectedMon[token];
uint256 tokenAmount = v3FeesCollectedToken[token];
require(monAmount > 0 || tokenAmount > 0, "FeeDistributor: no escrowed fees");
// Reset escrow
v3FeesCollectedMon[token] = 0;
v3FeesCollectedToken[token] = 0;
// Distribute MON fees (using existing logic)
if (monAmount > 0) {
_distributeV3LpFee(token, monAmount);
}
// For token fees, you might want to swap to MON first, or distribute separately
// For now, we'll just emit the event - you can add token distribution logic later
if (tokenAmount > 0) {
// TODO: Swap token to MON or distribute token directly
// For now, just emit event
}
emit V3FeesDistributed(token, monAmount, tokenAmount);
}
// ---------------------------------------------------------------------
// Fallbacks
// ---------------------------------------------------------------------
/// @notice Accept plain native deposits (will NOT be distributed automatically)
receive() external payable {}
fallback() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_platformWallet","type":"address"},{"internalType":"address","name":"_positionManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bondingCurve","type":"address"}],"name":"BondingCurveUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"netAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"grossAmount","type":"uint256"}],"name":"CreatorAccrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreatorClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorGross","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorNet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"handleAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"platformAmount","type":"uint256"}],"name":"FeeDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HandleAccrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HandleClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"platformWallet","type":"address"},{"indexed":true,"internalType":"address","name":"stakingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"other1Wallet","type":"address"},{"indexed":false,"internalType":"address","name":"other2Wallet","type":"address"},{"indexed":false,"internalType":"address","name":"other3Wallet","type":"address"},{"indexed":false,"internalType":"address","name":"other4Wallet","type":"address"},{"indexed":false,"internalType":"address","name":"other5Wallet","type":"address"}],"name":"RecipientsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingContract","type":"address"}],"name":"StakingContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"TokenCreatorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"handle","type":"string"},{"indexed":false,"internalType":"uint16","name":"bpsOfCreator","type":"uint16"}],"name":"TokenHandleShareSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"handle","type":"string"}],"name":"TwitterHandleBound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":true,"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"handle","type":"string"}],"name":"TwitterHandleUnbound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"monAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"V3FeesCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"monAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"V3FeesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"V3NftRegistered","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BC_CREATOR_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_OTHER1_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_OTHER2_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_OTHER3_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_OTHER4_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_OTHER5_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_PLATFORM_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_STAKING_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BC_TOTAL_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HANDLE_BPS_DENOMINATOR","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_CREATOR_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_OTHER1_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_OTHER2_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_OTHER3_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_OTHER4_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_OTHER5_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_PLATFORM_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_STAKING_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"V3_TOTAL_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"handle","type":"string"}],"name":"bindTwitterHandle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bondingCurve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimCreatorRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimCurveRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimHandleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimV3Rewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collectV3Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creatorClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creatorUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creatorV3Claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creatorV3Unclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"distributeEscrowedV3Fees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"distributeFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getClaimableV3Fees","outputs":[{"internalType":"uint256","name":"monAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getCollectedV3Fees","outputs":[{"internalType":"uint256","name":"monAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"}],"name":"getCreatorCurveRewards","outputs":[{"internalType":"uint256","name":"curveUnclaimed","type":"uint256"},{"internalType":"uint256","name":"curveClaimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"creator","type":"address"}],"name":"getCreatorV3Rewards","outputs":[{"internalType":"uint256","name":"claimableMon","type":"uint256"},{"internalType":"uint256","name":"claimableToken","type":"uint256"},{"internalType":"uint256","name":"collectedMon","type":"uint256"},{"internalType":"uint256","name":"collectedToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"}],"name":"getCreatorV3RewardsSeparate","outputs":[{"internalType":"uint256","name":"v3Unclaimed","type":"uint256"},{"internalType":"uint256","name":"v3Claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"getHandleStatsForWallet","outputs":[{"internalType":"string","name":"handle","type":"string"},{"internalType":"uint16","name":"bpsOfCreator","type":"uint16"},{"internalType":"uint256","name":"unclaimed","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenCreator","outputs":[{"internalType":"address","name":"creatorWallet","type":"address"},{"internalType":"string","name":"creatorHandle","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenFullInfo","outputs":[{"internalType":"address","name":"creatorWallet","type":"address"},{"internalType":"string","name":"creatorHandle","type":"string"},{"internalType":"string","name":"activeHandle","type":"string"},{"internalType":"address","name":"activeHandleWallet","type":"address"},{"internalType":"uint16","name":"handleShareBps","type":"uint16"},{"internalType":"uint256","name":"creatorUnclaimedAmount","type":"uint256"},{"internalType":"uint256","name":"handleUnclaimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenHandleInfo","outputs":[{"internalType":"string","name":"handle","type":"string"},{"internalType":"uint16","name":"bpsOfCreator","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"handle","type":"string"}],"name":"getWalletForHandle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"handleClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"handleHashOfWallet","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"handleLabel","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"handleUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastCollectionTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"other1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"other2Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"other3Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"other4Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"other5Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"registerGraduationNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adminWallet","type":"address"}],"name":"setAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bondingCurve","type":"address"}],"name":"setBondingCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_platformWallet","type":"address"},{"internalType":"address","name":"_stakingWallet","type":"address"},{"internalType":"address","name":"_other1Wallet","type":"address"},{"internalType":"address","name":"_other2Wallet","type":"address"},{"internalType":"address","name":"_other3Wallet","type":"address"},{"internalType":"address","name":"_other4Wallet","type":"address"},{"internalType":"address","name":"_other5Wallet","type":"address"}],"name":"setRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingContract","type":"address"}],"name":"setStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"creator","type":"address"}],"name":"setTokenCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"handle","type":"string"},{"internalType":"uint16","name":"bpsOfCreator","type":"uint16"}],"name":"setTokenHandleShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_positionManager","type":"address"}],"name":"setV3Addresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenConfig","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenHandleShare","outputs":[{"internalType":"bytes32","name":"handleHash","type":"bytes32"},{"internalType":"uint16","name":"bpsOfCreator","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenNftId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"twitterHandleOf","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unbindTwitterHandle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"v3FeesCollectedMon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"v3FeesCollectedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"walletOfHandleHash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wmon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561000f575f5ffd5b5060405161477038038061477083398101604081905261002e9161018f565b5f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b0382166100d65760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a20706c6174666f726d2077616c6c6574206044820152666973207a65726f60c81b606482015260840160405180910390fd5b600e80546001600160a01b03199081166001600160a01b038581169182179093556017805490921684841617909155601054600f5460115460125460135460145460408051948916855292881660208501529087169183019190915285166060820152918416931691907f0ecc98265682cd56ae3665dff6d63e2392a9ed52f34725a8d4700c185c5e222c9060800160405180910390a450506101c0565b80516001600160a01b038116811461018a575f5ffd5b919050565b5f5f604083850312156101a0575f5ffd5b6101a983610174565b91506101b760208401610174565b90509250929050565b6145a3806101cd5f395ff3fe608060405260043610610419575f3560e01c80637d86b8a51161021b578063c75aad7b11610121578063ee99205c116100af578063f971762011610076578063f971762014610c88578063fa2af9da14610cbe578063fcb44e20146105c7578063fe136c4e14610cdd578063ff3d7a1814610d3c57005b8063ee99205c14610bb6578063ef717c7014610bd5578063eff1d50e14610c16578063f2fde38b14610c35578063f7fc5b9814610c5457005b8063dc0e641a116100f3578063dc0e641a14610b20578063e92ebec0146105c7578063eb75b64d14610b3f578063ebe6436514610b5e578063ecc9eda614610b8957005b8063c75aad7b14610a6f578063c78418b914610aa5578063c8166d02146105c7578063ca2bbf3014610ad257005b8063a1e8364f116101a9578063b1dcce2c11610170578063b1dcce2c146109de578063b2308d8e146109f2578063b5d331c414610a1d578063bc69b9e814610a3c578063c68a89b514610a5057005b8063a1e8364f146105c7578063aa74513914610949578063ad1e627114610974578063b151df6a146109b3578063b19f17b41461047657005b80638da5cb5b116101ed5780638da5cb5b146108cd57806393434d47146108eb5780639d9f0815146105c75780639dd373b9146108ff578063a13bd3b31461091e57005b80637d86b8a51461085857806385e144f91461087f57806387c5c5d1146105c75780638d2cce40146108ae57005b80634e281a7b116103205780636c7b14a5116102ae5780637983a2fc116102755780637983a2fc146107ee5780637a096bf9146104d75780637a3fdbe01461081a5780637ae64c8d146108395780637c40d3711461058057005b80636c7b14a5146107855780636e9d7600146105805780637352f67c146106b55780637433a05c146107b0578063791b98bc146107cf57005b806360239dad116102f257806360239dad14610708578063662bbedd14610733578063670f91f714610752578063686b2e13146105c757806368cc97ef1461076657005b80634e281a7b146106a25780634ef81f30146106b55780635aa4a914146106ca5780635c2cb5bf146106e957005b8063314a8265116103a857806343ff1fb81161036f57806343ff1fb81461061a57806344182dfb146106395780634535f5ca1461065857806345bd3bf4146105c75780634c89193e1461067757005b8063314a82651461059557806332e499c5146105c757806335082933146105dc57806336b19cd7146105fb5780633fe8bfd8146105c757005b8063196817d1116103ec578063196817d1146104d757806323f4a666146104ec57806328f42d461461050b57806329afaab71461052a578063302a41f01461058057005b806306ee6ad81461041b57806308ae669114610457578063097b50251461047657806314ff625e1461049e575b005b348015610426575f5ffd5b50600f5461043a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610462575f5ffd5b5060125461043a906001600160a01b031681565b348015610481575f5ffd5b5061048b6103e881565b60405161ffff909116815260200161044e565b3480156104a9575f5ffd5b506104c96104b8366004613e0b565b60036020525f908152604090205481565b60405190815260200161044e565b3480156104e2575f5ffd5b5061048b6105dc81565b3480156104f7575f5ffd5b50610419610506366004613e0b565b610d5b565b348015610516575f5ffd5b50610419610525366004613e0b565b610e5c565b348015610535575f5ffd5b5061056b610544366004613e0b565b6001600160a01b03165f908152600460209081526040808320546005909252909120549091565b6040805192835260208301919091520161044e565b34801561058b575f5ffd5b5061048b61271081565b3480156105a0575f5ffd5b506105b46105af366004613e0b565b610fdc565b60405161044e9796959493929190613e5b565b3480156105d2575f5ffd5b5061048b6101f481565b3480156105e7575f5ffd5b506104196105f6366004613e0b565b61121c565b348015610606575f5ffd5b50600d5461043a906001600160a01b031681565b348015610625575f5ffd5b50610419610634366004613e0b565b61128e565b348015610644575f5ffd5b50610419610653366004613ec4565b611300565b348015610663575f5ffd5b50610419610672366004613efb565b611453565b348015610682575f5ffd5b506104c9610691366004613e0b565b60076020525f908152604090205481565b6104196106b0366004613e0b565b6115f7565b3480156106c0575f5ffd5b5061048b61138881565b3480156106d5575f5ffd5b506104196106e4366004613e0b565b611604565b3480156106f4575f5ffd5b5060135461043a906001600160a01b031681565b348015610713575f5ffd5b506104c9610722366004613e0b565b60196020525f908152604090205481565b34801561073e575f5ffd5b5061041961074d366004613f8c565b61164f565b34801561075d575f5ffd5b5061041961186c565b348015610771575f5ffd5b5061056b610780366004613e0b565b61195d565b348015610790575f5ffd5b506104c961079f366004613e0b565b60046020525f908152604090205481565b3480156107bb575f5ffd5b506104196107ca366004613e0b565b611ac6565b3480156107da575f5ffd5b5060175461043a906001600160a01b031681565b3480156107f9575f5ffd5b5061080d610808366004613e0b565b611e74565b60405161044e9190613fb6565b348015610825575f5ffd5b50610419610834366004614067565b611f0b565b348015610844575f5ffd5b5061080d6108533660046140a1565b61209f565b348015610863575f5ffd5b5061043a733bd359c1119da7da1d913d1c4d2b7c461115433a81565b34801561088a575f5ffd5b5061089e610899366004613ec4565b6120b7565b60405161044e94939291906140b8565b3480156108b9575f5ffd5b506104196108c83660046140ea565b6121f5565b3480156108d8575f5ffd5b505f5461043a906001600160a01b031681565b3480156108f6575f5ffd5b506104196124de565b34801561090a575f5ffd5b50610419610919366004613e0b565b6125ea565b348015610929575f5ffd5b506104c9610938366004613e0b565b60026020525f908152604090205481565b348015610954575f5ffd5b506104c9610963366004613e0b565b60056020525f908152604090205481565b34801561097f575f5ffd5b5061099361098e366004613ec4565b61265c565b60408051948552602085019390935291830152606082015260800161044e565b3480156109be575f5ffd5b506104c96109cd366004613e0b565b60186020525f908152604090205481565b3480156109e9575f5ffd5b506104196128b4565b3480156109fd575f5ffd5b506104c9610a0c366004613e0b565b601a6020525f908152604090205481565b348015610a28575f5ffd5b5061043a610a37366004614067565b612a5e565b348015610a47575f5ffd5b50610419612a88565b348015610a5b575f5ffd5b5060115461043a906001600160a01b031681565b348015610a7a575f5ffd5b506104c9610a89366004613f8c565b600c60209081525f928352604080842090915290825290205481565b348015610ab0575f5ffd5b50610ac4610abf366004613e0b565b612bfb565b60405161044e929190614150565b348015610add575f5ffd5b50610b08610aec366004613e0b565b600a6020525f90815260409020805460019091015461ffff1682565b6040805192835261ffff90911660208301520161044e565b348015610b2b575f5ffd5b5061056b610b3a366004613e0b565b612cd5565b348015610b4a575f5ffd5b5060145461043a906001600160a01b031681565b348015610b69575f5ffd5b506104c9610b78366004613e0b565b601b6020525f908152604090205481565b348015610b94575f5ffd5b50610ba8610ba3366004613e0b565b612d4a565b60405161044e929190614173565b348015610bc1575f5ffd5b5060155461043a906001600160a01b031681565b348015610be0575f5ffd5b5061056b610bef366004613e0b565b6001600160a01b03165f90815260196020908152604080832054601a909252909120549091565b348015610c21575f5ffd5b5060165461043a906001600160a01b031681565b348015610c40575f5ffd5b50610419610c4f366004613e0b565b612e24565b348015610c5f575f5ffd5b5061043a610c6e3660046140a1565b60086020525f90815260409020546001600160a01b031681565b348015610c93575f5ffd5b506104c9610ca2366004613f8c565b600b60209081525f928352604080842090915290825290205481565b348015610cc9575f5ffd5b50600e5461043a906001600160a01b031681565b348015610ce8575f5ffd5b50610d1d610cf7366004613e0b565b60016020525f90815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835290151560208301520161044e565b348015610d47575f5ffd5b5060105461043a906001600160a01b031681565b6001600160a01b0381165f90815260196020908152604080832054601a9092529091205481151580610d8c57505f81115b610ddd5760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f20657363726f776564206665657360448201526064015b60405180910390fd5b6001600160a01b0383165f908152601960209081526040808320839055601a9091528120558115610e1257610e128383612f0b565b60408051838152602081018390526001600160a01b038516917fec32302a04d508b3b28a6e489c039509dc1363532ed831bfc73b007759bbcdc491015b60405180910390a2505050565b335f9081526007602052604090205480610eb85760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f2068616e646c6520626f756e64006044820152606401610dd4565b6001600160a01b0382165f908152600b6020908152604080832084845290915290205480610f325760405162461bcd60e51b815260206004820152602160248201527f4665654469737472696275746f723a206e6f2068616e646c65207265776172646044820152607360f81b6064820152608401610dd4565b6001600160a01b0383165f818152600b602090815260408083208684528252808320839055928252600c815282822085835290529081208054839290610f799084906141ac565b90915550610f89905033826135b4565b336001600160a01b031682846001600160a01b03167f92b534463e1ee4f769d68240f369a60341ce499586e91cb83de220fc9abe88ed84604051610fcf91815260200190565b60405180910390a4505050565b6001600160a01b038181165f908152600160209081526040808320815180830183529054948516808252600160a01b90950460ff1615158184015284845260069092528220805460609384939092839283928392909161103b906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611067906141c5565b80156110b25780601f10611089576101008083540402835291602001916110b2565b820191905f5260205f20905b81548152906001019060200180831161109557829003601f168201915b5050506001600160a01b038c165f908152600a6020908152604080832081518083018352815480825260019092015461ffff1681850152818552600990935292208054959c5090949193509150611108906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611134906141c5565b801561117f5780601f106111565761010080835404028352916020019161117f565b820191905f5260205f20905b81548152906001019060200180831161116257829003601f168201915b5050505050975060085f8281526020019081526020015f205f9054906101000a90046001600160a01b031696508160200151955060025f8b6001600160a01b03166001600160a01b031681526020019081526020015f20549450600b5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8281526020019081526020015f20549350505050919395979092949650565b5f546001600160a01b031633146112455760405162461bcd60e51b8152600401610dd4906141fd565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f65ef617d87f7e47ab080058ac1d5ebf06817bbd817e49898ab9f9532405ecd9b905f90a250565b5f546001600160a01b031633146112b75760405162461bcd60e51b8152600401610dd4906141fd565b601680546001600160a01b0319166001600160a01b0383169081179091556040517fc4fda5d836a9aaafabd3088c5f5dcabfe179c3b392b09dbac0e8727667f3c776905f90a250565b5f546001600160a01b03163314806113225750600d546001600160a01b031633145b61136e5760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f74206f776e65722f61646d696e006044820152606401610dd4565b6001600160a01b0382166113d25760405162461bcd60e51b815260206004820152602560248201527f4665654469737472696275746f723a20746f6b656e206973207a65726f206164604482015264647265737360d81b6064820152608401610dd4565b6040805180820182526001600160a01b03808416808352600160208085018281528885165f818152939092528683209551865491511515600160a01b026001600160a81b031990921695169490941793909317909355925190917fc2b9e48c87971930b3535e0acb2a4b96c7287072255994d8caeea5328dc8ef0391a35050565b5f546001600160a01b03163314806114755750600d546001600160a01b031633145b6114c15760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f74206f776e65722f61646d696e006044820152606401610dd4565b6001600160a01b0387166115275760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a20706c6174666f726d2077616c6c6574206044820152666973207a65726f60c81b6064820152608401610dd4565b600e80546001600160a01b03199081166001600160a01b038a8116918217909355600f805483168a85169081179091556010805484168a86169081179091556011805485168a87169081179091556012805486168a88169081179091556013805487168a8916908117909155601480549097169789169788179096556040805192835260208301919091528101949094526060840194909452917f0ecc98265682cd56ae3665dff6d63e2392a9ed52f34725a8d4700c185c5e222c9060800160405180910390a450505050505050565b6116018134613672565b50565b5f546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610dd4906141fd565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031633146116a95760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f7420426f6e64696e6743757276656044820152606401610dd4565b6016546001600160a01b031661170d5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a20426f6e64696e674375727665206e6f74604482015263081cd95d60e21b6064820152608401610dd4565b6001600160a01b0382165f90815260186020526040902054156117815760405162461bcd60e51b815260206004820152602660248201527f4665654469737472696275746f723a204e465420616c726561647920726567696044820152651cdd195c995960d21b6064820152608401610dd4565b6001600160a01b0382166117d75760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a20746f6b656e206973207a65726f0000006044820152606401610dd4565b5f81116118265760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a20746f6b656e4964206973207a65726f006044820152606401610dd4565b6001600160a01b0382165f81815260186020526040808220849055518392917fc9784cea8d2c30f4e33ec792d8b9fe9055b92f4e24a3748c789490e56d290c2b91a35050565b335f9081526002602090815260408083205460049092528220549091818311611895575f61189f565b61189f8284614232565b90505f81116118f05760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f20637572766520726577617264736044820152606401610dd4565b335f90815260026020908152604080832085905560039091528120805483929061191b9084906141ac565b9091555061192b905033826135b4565b60405181815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c490602001610e4f565b6001600160a01b0381165f90815260186020526040812054819080158061198d57506017546001600160a01b0316155b1561199d57505f93849350915050565b60175460405163133f757160e31b8152600481018390525f918291829182916001600160a01b03909116906399fbab889060240161018060405180830381865afa1580156119ed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a11919061428e565b9b509b50505050505050955095505050733bd359c1119da7da1d913d1c4d2b7c461115433a6001600160a01b0316846001600160a01b031603611a6b57816001600160801b03169650806001600160801b03169550611abc565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03841601611aad57806001600160801b03169650816001600160801b03169550611abc565b505f9788975095505050505050565b5050505050915091565b6001600160a01b0381165f9081526018602052604090205480611b2b5760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f204e465420666f7220746f6b656e6044820152606401610dd4565b6017546001600160a01b0316611b935760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a20706f736974696f6e4d616e61676572206044820152661b9bdd081cd95d60ca1b6064820152608401610dd4565b60175460405163133f757160e31b8152600481018390525f9182916001600160a01b03909116906399fbab889060240161018060405180830381865afa158015611bdf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c03919061428e565b5050601754604080516080810182528f81523060208201526001600160801b038183018190526060820152905163fc6f786560e01b8152999d50979b505f9a508a99506001600160a01b03169763fc6f786597611c6b97509550600401935061436892505050565b60408051808303815f875af1158015611c86573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611caa91906143ab565b90925090505f80733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03871601611ce0575082905081611d57565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03861601611d0f575081905082611d57565b60405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a20574d4f4e206e6f7420696e20706169726044820152606401610dd4565b8115611dbe57604051632e1a7d4d60e01b815260048101839052733bd359c1119da7da1d913d1c4d2b7c461115433a90632e1a7d4d906024015f604051808303815f87803b158015611da7575f5ffd5b505af1158015611db9573d5f5f3e3d5ffd5b505050505b6001600160a01b0388165f9081526019602052604081208054849290611de59084906141ac565b90915550506001600160a01b0388165f908152601a602052604081208054839290611e119084906141ac565b90915550506001600160a01b0388165f818152601b602090815260409182902042905581518581529081018490527f95d527d1f3395eb32e2ced24e8f7f5ec4e18ea5427dfe60ac1fe88642c7361a4910160405180910390a25050505050505050565b60066020525f908152604090208054611e8c906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb8906141c5565b8015611f035780601f10611eda57610100808354040283529160200191611f03565b820191905f5260205f20905b815481529060010190602001808311611ee657829003601f168201915b505050505081565b5f5f611f1683613a8c565b5f8281526008602052604090205491935091506001600160a01b0316801580611f4757506001600160a01b03811633145b611f9f5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a2068616e646c6520616c726561647920626044820152631bdd5b9960e21b6064820152608401610dd4565b335f908152600760205260409020548015801590611fbd5750838114155b15611ffd575f81815260086020526040902054336001600160a01b0390911603611ffd575f81815260086020526040902080546001600160a01b03191690555b335f9081526006602052604090206120158482614411565b50335f8181526007602090815260408083208890558783526008825280832080546001600160a01b03191690941790935560099052206120558482614411565b5083336001600160a01b03167f8e0acfaadfec23c32c4265b99babad83b73a03944fdf2a24c38094a032b56b95856040516120909190613fb6565b60405180910390a35050505050565b60096020525f908152604090208054611e8c906141c5565b6001600160a01b038082165f908152600760209081526040808320549386168352600a8252808320815180830183528154815260019091015461ffff1681840152848452600990925282208054606094849384939192909190612119906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612145906141c5565b80156121905780601f1061216757610100808354040283529160200191612190565b820191905f5260205f20905b81548152906001019060200180831161217357829003601f168201915b50505050509550805f015182036121ad57806020015194506121b1565b5f94505b506001600160a01b039096165f818152600b602090815260408083208a8452825280832054938352600c825280832099835298905296909620549396929594505050565b6001600160a01b038381165f908152600160209081526040918290208251808401909352549283168252600160a01b90920460ff161515918101829052849161228c5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a20746f6b656e206e6f7420636f6e6669676044820152631d5c995960e21b6064820152608401610dd4565b80516001600160a01b03163314806122ad57505f546001600160a01b031633145b806122c25750600d546001600160a01b031633145b61231e5760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a206e6f742063726561746f722f6f776e656044820152663917b0b236b4b760c91b6064820152608401610dd4565b61ffff8316158061232e57508351155b156123be576040805180820182525f80825260208083018281526001600160a01b038a16808452600a83528584209451855590516001909401805461ffff191661ffff9095169490941790935583518481529384018290528301819052917f7f648e14577bb175572cecb4fab1bbbcc25c3840ac1829b8f6207d742a28b55e9060600160405180910390a36124d7565b61271061ffff841611156124205760405162461bcd60e51b815260206004820152602360248201527f4665654469737472696275746f723a2068616e646c652062707320746f6f20686044820152620d2ced60eb1b6064820152608401610dd4565b5f5f61242b86613a8c565b60408051808201825283815261ffff89811660208084019182526001600160a01b038e165f908152600a82528581209451855591516001909401805461ffff19169490931693909317909155848152600990915220919350915061248f8282614411565b5081876001600160a01b03167f7f648e14577bb175572cecb4fab1bbbcc25c3840ac1829b8f6207d742a28b55e83886040516124cc929190614173565b60405180910390a350505b5050505050565b335f90815260026020526040902054806125455760405162461bcd60e51b815260206004820152602260248201527f4665654469737472696275746f723a206e6f2063726561746f72207265776172604482015261647360f01b6064820152608401610dd4565b335f908152600460209081526040808320805460028452828520859055908490556003909252822080549192849261257e9084906141ac565b9091555050335f90815260056020526040812080548392906125a19084906141ac565b909155506125b1905033836135b4565b60405182815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c49060200160405180910390a25050565b5f546001600160a01b031633146126135760405162461bcd60e51b8152600401610dd4906141fd565b601580546001600160a01b0319166001600160a01b0383169081179091556040517f6397f5b135542bb3f477cb346cfab5abdec1251d08dc8f8d4efb4ffe122ea0bf905f90a250565b6001600160a01b038281165f908152600160209081526040808320815180830190925254808516808352600160a01b90910460ff1615159282019290925291928392839283928716146126bb575f5f5f5f9450945094509450506128ab565b6001600160a01b0387165f90815260186020526040812054908082158015906126ee57506017546001600160a01b031615155b156128045760175460405163133f757160e31b8152600481018590525f918291829182916001600160a01b03909116906399fbab889060240161018060405180830381865afa158015612743573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612767919061428e565b9b509b50505050505050955095505050733bd359c1119da7da1d913d1c4d2b7c461115433a6001600160a01b0316846001600160a01b0316036127c157816001600160801b03169550806001600160801b031694506127ff565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b038416016127ff57806001600160801b03169550816001600160801b031694505b505050505b612710612813611388846144cc565b61281d91906144e3565b975061271061282e611388836144cc565b61283891906144e3565b6001600160a01b038b165f908152601960205260409020549097506127109061286490611388906144cc565b61286e91906144e3565b6001600160a01b038b165f908152601a60205260409020549096506127109061289a90611388906144cc565b6128a491906144e3565b9450505050505b92959194509250565b335f90815260076020526040902054806129105760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f2068616e646c6520626f756e64006044820152606401610dd4565b335f9081526006602052604081208054612929906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612955906141c5565b80156129a05780601f10612977576101008083540402835291602001916129a0565b820191905f5260205f20905b81548152906001019060200180831161298357829003601f168201915b5050335f81815260076020908152604080832083905580518083018252838152938352600690915290209495506129dc93509150839050614411565b505f82815260086020526040902054336001600160a01b0390911603612a18575f82815260086020526040902080546001600160a01b03191690555b81336001600160a01b03167ff7129563dfed00fb57275470a393d0e2fd8ca5a4da3afa7a41872696b283a9a183604051612a529190613fb6565b60405180910390a35050565b5f5f612a6983613a8c565b505f908152600860205260409020546001600160a01b03169392505050565b335f9081526004602052604090205480612ae45760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f20563320726577617264730000006044820152606401610dd4565b335f90815260026020526040902054811115612b425760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a20696e76616c69642073746174650000006044820152606401610dd4565b335f9081526002602052604081208054839290612b60908490614232565b9091555050335f908152600460209081526040808320839055600390915281208054839290612b909084906141ac565b9091555050335f9081526005602052604081208054839290612bb39084906141ac565b90915550612bc3905033826135b4565b60405181815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c49060200160405180910390a250565b6001600160a01b038181165f908152600160209081526040808320815180830183529054948516808252600160a01b90950460ff16151581840152848452600690925290912080546060929190612c51906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7d906141c5565b8015612cc85780601f10612c9f57610100808354040283529160200191612cc8565b820191905f5260205f20905b815481529060010190602001808311612cab57829003601f168201915b5050505050915050915091565b6001600160a01b0381165f9081526002602090815260408083205460038352818420546004845282852054600590945291842054849391929190818411612d1c575f612d26565b612d268285614232565b9550808311612d35575f612d3f565b612d3f8184614232565b945050505050915091565b6001600160a01b0381165f908152600a6020908152604080832081518083018352815480825260019092015461ffff1681850152908452600990925282208054606093929190612d99906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc5906141c5565b8015612e105780601f10612de757610100808354040283529160200191612e10565b820191905f5260205f20905b815481529060010190602001808311612df357829003601f168201915b505050505092508060200151915050915091565b5f546001600160a01b03163314612e4d5760405162461bcd60e51b8152600401610dd4906141fd565b6001600160a01b038116612eb25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd4565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8111612f5a5760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f2076616c75652073656e740000006044820152606401610dd4565b6001600160a01b038281165f9081526001602090815260408083208151808301835290549485168152600160a01b90940460ff16151584830152805160c0810182528381529182018390528101829052606081018290526080810182905260a0810191909152612710612fcf611388856144cc565b612fd991906144e3565b8152612710612fea6105dc856144cc565b612ff491906144e3565b60608201526127106130086103e8856144cc565b61301291906144e3565b608082018190526060820151825161302a91906141ac565b61303491906141ac565b60a08201525f6127106130496101f4866144cc565b61305391906144e3565b9050808260a00181815161306791906141ac565b90525080156130b2576010546001600160a01b03161561309c57601054613097906001600160a01b0316826135b4565b6130b2565b80826080018181516130ae91906141ac565b9052505b6127106130c16101f4866144cc565b6130cb91906144e3565b9050808260a0018181516130df91906141ac565b905250801561312a576011546001600160a01b0316156131145760115461310f906001600160a01b0316826135b4565b61312a565b808260800181815161312691906141ac565b9052505b6127106131396101f4866144cc565b61314391906144e3565b9050808260a00181815161315791906141ac565b90525080156131a2576012546001600160a01b03161561318c57601254613187906001600160a01b0316826135b4565b6131a2565b808260800181815161319e91906141ac565b9052505b6127106131b16101f4866144cc565b6131bb91906144e3565b9050808260a0018181516131cf91906141ac565b905250801561321a576013546001600160a01b031615613204576013546131ff906001600160a01b0316826135b4565b61321a565b808260800181815161321691906141ac565b9052505b6127106132296101f4866144cc565b61323391906144e3565b9050808260a00181815161324791906141ac565b9052508015613292576014546001600160a01b03161561327c57601454613277906001600160a01b0316826135b4565b613292565b808260800181815161328e91906141ac565b9052505b5f8260a00151856132a39190614232565b905080836080018181516132b791906141ac565b9052508251158015906132d3575083516001600160a01b031615155b156133b2576132e586845f0151613ccb565b604085015260208401819052156133ad5760208084015185516001600160a01b03165f9081526002909252604082208054919290916133259084906141ac565b909155505060208084015185516001600160a01b03165f9081526004909252604082208054919290916133599084906141ac565b90915550508351602084810151855160408051928352928201526001600160a01b038981169316917f0d4cef82a4f7c87c7bf598878d7b68f98bb9a0e98b5fec2b8e96f444fb40f37f910160405180910390a35b6133cc565b82516080840180516133c59083906141ac565b9052505f83525b6060830151156134ee576015546001600160a01b03161561349d57601554606084015160408051600481526024810182526020810180516001600160e01b031663014d6aed60e41b17905290515f936001600160a01b0316929161342f91614519565b5f6040518083038185875af1925050503d805f8114613469576040519150601f19603f3d011682016040523d82523d5f602084013e61346e565b606091505b50509050806134975783606001518460800181815161348d91906141ac565b9052505f60608501525b506134ee565b600f546001600160a01b0316156134ce57600f5460608401516134c9916001600160a01b0316906135b4565b6134ee565b8260600151836080018181516134e491906141ac565b9052505f60608401525b60808301511561353957600e545f906001600160a01b031661351a575f546001600160a01b0316613527565b600e546001600160a01b03165b90506135378185608001516135b4565b505b82516020808501516040808701516060808901516080808b015185518e8152978801989098529386019490945284015282015260a08101919091526001600160a01b038716907fe205594824e0b766055113357eb9ca852cce628f1cd9cd5672527343a4e469079060c00160405180910390a2505050505050565b805f036135bf575050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613608576040519150601f19603f3d011682016040523d82523d5f602084013e61360d565b606091505b505090508061366d5760405162461bcd60e51b815260206004820152602660248201527f4665654469737472696275746f723a206e6174697665207472616e736665722060448201526519985a5b195960d21b6064820152608401610dd4565b505050565b5f81116136c15760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f2076616c75652073656e740000006044820152606401610dd4565b6001600160a01b038281165f9081526001602090815260408083208151808301835290549485168152600160a01b90940460ff16151584830152805160c0810182528381529182018390528101829052606081018290526080810182905260a0810191909152612710613736611388856144cc565b61374091906144e3565b81526127106137516105dc856144cc565b61375b91906144e3565b606082015261271061376f6103e8856144cc565b61377991906144e3565b608082018190526060820151825161379191906141ac565b61379b91906141ac565b60a08201525f6127106137b06101f4866144cc565b6137ba91906144e3565b9050808260a0018181516137ce91906141ac565b9052508015613819576010546001600160a01b031615613803576010546137fe906001600160a01b0316826135b4565b613819565b808260800181815161381591906141ac565b9052505b6127106138286101f4866144cc565b61383291906144e3565b9050808260a00181815161384691906141ac565b9052508015613891576011546001600160a01b03161561387b57601154613876906001600160a01b0316826135b4565b613891565b808260800181815161388d91906141ac565b9052505b6127106138a06101f4866144cc565b6138aa91906144e3565b9050808260a0018181516138be91906141ac565b9052508015613909576012546001600160a01b0316156138f3576012546138ee906001600160a01b0316826135b4565b613909565b808260800181815161390591906141ac565b9052505b6127106139186101f4866144cc565b61392291906144e3565b9050808260a00181815161393691906141ac565b9052508015613981576013546001600160a01b03161561396b57601354613966906001600160a01b0316826135b4565b613981565b808260800181815161397d91906141ac565b9052505b6127106139906101f4866144cc565b61399a91906144e3565b9050808260a0018181516139ae91906141ac565b90525080156139f9576014546001600160a01b0316156139e3576014546139de906001600160a01b0316826135b4565b6139f9565b80826080018181516139f591906141ac565b9052505b5f8260a0015185613a0a9190614232565b90508083608001818151613a1e91906141ac565b905250825115801590613a3a575083516001600160a01b031615155b156133b257613a4c86845f0151613ccb565b604085015260208401819052156133ad5760208084015185516001600160a01b03165f9081526002909252604082208054919290916133599084906141ac565b80515f90606090839080613ae25760405162461bcd60e51b815260206004820152601c60248201527f4665654469737472696275746f723a20656d7074792068616e646c65000000006044820152606401610dd4565b81515f90600160fe1b9084908390613afc57613afc614524565b01602001516001600160f81b03191603613b645760018211613b605760405162461bcd60e51b815260206004820152601c60248201527f4665654469737472696275746f723a20656d7074792068616e646c65000000006044820152606401610dd4565b5060015b5f613b6f8284614232565b67ffffffffffffffff811115613b8757613b87613fc8565b6040519080825280601f01601f191660200182016040528015613bb1576020820181803683370190505b509050815b83811015613c95575f858281518110613bd157613bd1614524565b016020015160f81c905060418110801590613bf05750605a8160ff1611155b15613c3957613c00816020614538565b60f81b83613c0e8685614232565b81518110613c1e57613c1e614524565b60200101906001600160f81b03191690815f1a905350613c8c565b858281518110613c4b57613c4b614524565b01602001516001600160f81b03191683613c658685614232565b81518110613c7557613c75614524565b60200101906001600160f81b03191690815f1a9053505b50600101613bb6565b5080945080604051602001613caa9190614551565b60405160208183030381529060405280519060200120955050505050915091565b6001600160a01b0382165f908152600a602090815260408083208151808301909252805480835260019091015461ffff1692820192909252839291831580613d11575080155b80613d225750602082015161ffff16155b15613d3257505f9150613df09050565b602082015161271090613d499061ffff16876144cc565b613d5391906144e3565b9250825f03613d6757505f9150613df09050565b613d718386614232565b6001600160a01b0387165f908152600b60209081526040808320858452909152812080549296508592909190613da89084906141ac565b909155505060405183815281906001600160a01b038816907f0250a3283d2094fdc6db498e1475e74e424a6eceda9e99f2ec15be2c4d3883b59060200160405180910390a350505b9250929050565b6001600160a01b0381168114611601575f5ffd5b5f60208284031215613e1b575f5ffd5b8135613e2681613df7565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038816815260e0602082018190525f90613e7e90830189613e2d565b8281036040840152613e908189613e2d565b6001600160a01b03979097166060840152505061ffff93909316608084015260a083019190915260c0909101529392505050565b5f5f60408385031215613ed5575f5ffd5b8235613ee081613df7565b91506020830135613ef081613df7565b809150509250929050565b5f5f5f5f5f5f5f60e0888a031215613f11575f5ffd5b8735613f1c81613df7565b96506020880135613f2c81613df7565b95506040880135613f3c81613df7565b94506060880135613f4c81613df7565b93506080880135613f5c81613df7565b925060a0880135613f6c81613df7565b915060c0880135613f7c81613df7565b8091505092959891949750929550565b5f5f60408385031215613f9d575f5ffd5b8235613fa881613df7565b946020939093013593505050565b602081525f613e266020830184613e2d565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112613feb575f5ffd5b813567ffffffffffffffff81111561400557614005613fc8565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561403457614034613fc8565b60405281815283820160200185101561404b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215614077575f5ffd5b813567ffffffffffffffff81111561408d575f5ffd5b61409984828501613fdc565b949350505050565b5f602082840312156140b1575f5ffd5b5035919050565b608081525f6140ca6080830187613e2d565b61ffff959095166020830152506040810192909252606090910152919050565b5f5f5f606084860312156140fc575f5ffd5b833561410781613df7565b9250602084013567ffffffffffffffff811115614122575f5ffd5b61412e86828701613fdc565b925050604084013561ffff81168114614145575f5ffd5b809150509250925092565b6001600160a01b03831681526040602082018190525f9061409990830184613e2d565b604081525f6141856040830185613e2d565b905061ffff831660208301529392505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156141bf576141bf614198565b92915050565b600181811c908216806141d957607f821691505b6020821081036141f757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b818103818111156141bf576141bf614198565b805161425081613df7565b919050565b805162ffffff81168114614250575f5ffd5b8051600281900b8114614250575f5ffd5b80516001600160801b0381168114614250575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f0312156142aa575f5ffd5b8c516bffffffffffffffffffffffff811681146142c5575f5ffd5b9b506142d360208e01614245565b9a506142e160408e01614245565b99506142ef60608e01614245565b98506142fd60808e01614255565b975061430b60a08e01614267565b965061431960c08e01614267565b955061432760e08e01614278565b6101008e01516101208f0151919650945092506143476101408e01614278565b91506143566101608e01614278565b90509295989b509295989b509295989b565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f5f604083850312156143bc575f5ffd5b505080516020909101519092909150565b601f82111561366d57805f5260205f20601f840160051c810160208510156143f25750805b601f840160051c820191505b818110156124d7575f81556001016143fe565b815167ffffffffffffffff81111561442b5761442b613fc8565b61443f8161443984546141c5565b846143cd565b6020601f821160018114614471575f831561445a5750848201515b5f19600385901b1c1916600184901b1784556124d7565b5f84815260208120601f198516915b828110156144a05787850151825560209485019460019092019101614480565b50848210156144bd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b80820281158282048414176141bf576141bf614198565b5f826144fd57634e487b7160e01b5f52601260045260245ffd5b500490565b5f81518060208401855e5f93019283525090919050565b5f613e268284614502565b634e487b7160e01b5f52603260045260245ffd5b60ff81811683821601908111156141bf576141bf614198565b673a3bb4ba3a32b91d60c11b81525f613e26600883018461450256fea2646970667358221220ab549d56225fdd57c073c00152121c6866fd080d9fc8efd934543f86f9cb309764736f6c634300081e0033000000000000000000000000300dba24233b87ec0bcfaebe89d586619f02cacf0000000000000000000000007197e214c0b767cfb76fb734ab638e2c192f4e53
Deployed Bytecode
0x608060405260043610610419575f3560e01c80637d86b8a51161021b578063c75aad7b11610121578063ee99205c116100af578063f971762011610076578063f971762014610c88578063fa2af9da14610cbe578063fcb44e20146105c7578063fe136c4e14610cdd578063ff3d7a1814610d3c57005b8063ee99205c14610bb6578063ef717c7014610bd5578063eff1d50e14610c16578063f2fde38b14610c35578063f7fc5b9814610c5457005b8063dc0e641a116100f3578063dc0e641a14610b20578063e92ebec0146105c7578063eb75b64d14610b3f578063ebe6436514610b5e578063ecc9eda614610b8957005b8063c75aad7b14610a6f578063c78418b914610aa5578063c8166d02146105c7578063ca2bbf3014610ad257005b8063a1e8364f116101a9578063b1dcce2c11610170578063b1dcce2c146109de578063b2308d8e146109f2578063b5d331c414610a1d578063bc69b9e814610a3c578063c68a89b514610a5057005b8063a1e8364f146105c7578063aa74513914610949578063ad1e627114610974578063b151df6a146109b3578063b19f17b41461047657005b80638da5cb5b116101ed5780638da5cb5b146108cd57806393434d47146108eb5780639d9f0815146105c75780639dd373b9146108ff578063a13bd3b31461091e57005b80637d86b8a51461085857806385e144f91461087f57806387c5c5d1146105c75780638d2cce40146108ae57005b80634e281a7b116103205780636c7b14a5116102ae5780637983a2fc116102755780637983a2fc146107ee5780637a096bf9146104d75780637a3fdbe01461081a5780637ae64c8d146108395780637c40d3711461058057005b80636c7b14a5146107855780636e9d7600146105805780637352f67c146106b55780637433a05c146107b0578063791b98bc146107cf57005b806360239dad116102f257806360239dad14610708578063662bbedd14610733578063670f91f714610752578063686b2e13146105c757806368cc97ef1461076657005b80634e281a7b146106a25780634ef81f30146106b55780635aa4a914146106ca5780635c2cb5bf146106e957005b8063314a8265116103a857806343ff1fb81161036f57806343ff1fb81461061a57806344182dfb146106395780634535f5ca1461065857806345bd3bf4146105c75780634c89193e1461067757005b8063314a82651461059557806332e499c5146105c757806335082933146105dc57806336b19cd7146105fb5780633fe8bfd8146105c757005b8063196817d1116103ec578063196817d1146104d757806323f4a666146104ec57806328f42d461461050b57806329afaab71461052a578063302a41f01461058057005b806306ee6ad81461041b57806308ae669114610457578063097b50251461047657806314ff625e1461049e575b005b348015610426575f5ffd5b50600f5461043a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610462575f5ffd5b5060125461043a906001600160a01b031681565b348015610481575f5ffd5b5061048b6103e881565b60405161ffff909116815260200161044e565b3480156104a9575f5ffd5b506104c96104b8366004613e0b565b60036020525f908152604090205481565b60405190815260200161044e565b3480156104e2575f5ffd5b5061048b6105dc81565b3480156104f7575f5ffd5b50610419610506366004613e0b565b610d5b565b348015610516575f5ffd5b50610419610525366004613e0b565b610e5c565b348015610535575f5ffd5b5061056b610544366004613e0b565b6001600160a01b03165f908152600460209081526040808320546005909252909120549091565b6040805192835260208301919091520161044e565b34801561058b575f5ffd5b5061048b61271081565b3480156105a0575f5ffd5b506105b46105af366004613e0b565b610fdc565b60405161044e9796959493929190613e5b565b3480156105d2575f5ffd5b5061048b6101f481565b3480156105e7575f5ffd5b506104196105f6366004613e0b565b61121c565b348015610606575f5ffd5b50600d5461043a906001600160a01b031681565b348015610625575f5ffd5b50610419610634366004613e0b565b61128e565b348015610644575f5ffd5b50610419610653366004613ec4565b611300565b348015610663575f5ffd5b50610419610672366004613efb565b611453565b348015610682575f5ffd5b506104c9610691366004613e0b565b60076020525f908152604090205481565b6104196106b0366004613e0b565b6115f7565b3480156106c0575f5ffd5b5061048b61138881565b3480156106d5575f5ffd5b506104196106e4366004613e0b565b611604565b3480156106f4575f5ffd5b5060135461043a906001600160a01b031681565b348015610713575f5ffd5b506104c9610722366004613e0b565b60196020525f908152604090205481565b34801561073e575f5ffd5b5061041961074d366004613f8c565b61164f565b34801561075d575f5ffd5b5061041961186c565b348015610771575f5ffd5b5061056b610780366004613e0b565b61195d565b348015610790575f5ffd5b506104c961079f366004613e0b565b60046020525f908152604090205481565b3480156107bb575f5ffd5b506104196107ca366004613e0b565b611ac6565b3480156107da575f5ffd5b5060175461043a906001600160a01b031681565b3480156107f9575f5ffd5b5061080d610808366004613e0b565b611e74565b60405161044e9190613fb6565b348015610825575f5ffd5b50610419610834366004614067565b611f0b565b348015610844575f5ffd5b5061080d6108533660046140a1565b61209f565b348015610863575f5ffd5b5061043a733bd359c1119da7da1d913d1c4d2b7c461115433a81565b34801561088a575f5ffd5b5061089e610899366004613ec4565b6120b7565b60405161044e94939291906140b8565b3480156108b9575f5ffd5b506104196108c83660046140ea565b6121f5565b3480156108d8575f5ffd5b505f5461043a906001600160a01b031681565b3480156108f6575f5ffd5b506104196124de565b34801561090a575f5ffd5b50610419610919366004613e0b565b6125ea565b348015610929575f5ffd5b506104c9610938366004613e0b565b60026020525f908152604090205481565b348015610954575f5ffd5b506104c9610963366004613e0b565b60056020525f908152604090205481565b34801561097f575f5ffd5b5061099361098e366004613ec4565b61265c565b60408051948552602085019390935291830152606082015260800161044e565b3480156109be575f5ffd5b506104c96109cd366004613e0b565b60186020525f908152604090205481565b3480156109e9575f5ffd5b506104196128b4565b3480156109fd575f5ffd5b506104c9610a0c366004613e0b565b601a6020525f908152604090205481565b348015610a28575f5ffd5b5061043a610a37366004614067565b612a5e565b348015610a47575f5ffd5b50610419612a88565b348015610a5b575f5ffd5b5060115461043a906001600160a01b031681565b348015610a7a575f5ffd5b506104c9610a89366004613f8c565b600c60209081525f928352604080842090915290825290205481565b348015610ab0575f5ffd5b50610ac4610abf366004613e0b565b612bfb565b60405161044e929190614150565b348015610add575f5ffd5b50610b08610aec366004613e0b565b600a6020525f90815260409020805460019091015461ffff1682565b6040805192835261ffff90911660208301520161044e565b348015610b2b575f5ffd5b5061056b610b3a366004613e0b565b612cd5565b348015610b4a575f5ffd5b5060145461043a906001600160a01b031681565b348015610b69575f5ffd5b506104c9610b78366004613e0b565b601b6020525f908152604090205481565b348015610b94575f5ffd5b50610ba8610ba3366004613e0b565b612d4a565b60405161044e929190614173565b348015610bc1575f5ffd5b5060155461043a906001600160a01b031681565b348015610be0575f5ffd5b5061056b610bef366004613e0b565b6001600160a01b03165f90815260196020908152604080832054601a909252909120549091565b348015610c21575f5ffd5b5060165461043a906001600160a01b031681565b348015610c40575f5ffd5b50610419610c4f366004613e0b565b612e24565b348015610c5f575f5ffd5b5061043a610c6e3660046140a1565b60086020525f90815260409020546001600160a01b031681565b348015610c93575f5ffd5b506104c9610ca2366004613f8c565b600b60209081525f928352604080842090915290825290205481565b348015610cc9575f5ffd5b50600e5461043a906001600160a01b031681565b348015610ce8575f5ffd5b50610d1d610cf7366004613e0b565b60016020525f90815260409020546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835290151560208301520161044e565b348015610d47575f5ffd5b5060105461043a906001600160a01b031681565b6001600160a01b0381165f90815260196020908152604080832054601a9092529091205481151580610d8c57505f81115b610ddd5760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f20657363726f776564206665657360448201526064015b60405180910390fd5b6001600160a01b0383165f908152601960209081526040808320839055601a9091528120558115610e1257610e128383612f0b565b60408051838152602081018390526001600160a01b038516917fec32302a04d508b3b28a6e489c039509dc1363532ed831bfc73b007759bbcdc491015b60405180910390a2505050565b335f9081526007602052604090205480610eb85760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f2068616e646c6520626f756e64006044820152606401610dd4565b6001600160a01b0382165f908152600b6020908152604080832084845290915290205480610f325760405162461bcd60e51b815260206004820152602160248201527f4665654469737472696275746f723a206e6f2068616e646c65207265776172646044820152607360f81b6064820152608401610dd4565b6001600160a01b0383165f818152600b602090815260408083208684528252808320839055928252600c815282822085835290529081208054839290610f799084906141ac565b90915550610f89905033826135b4565b336001600160a01b031682846001600160a01b03167f92b534463e1ee4f769d68240f369a60341ce499586e91cb83de220fc9abe88ed84604051610fcf91815260200190565b60405180910390a4505050565b6001600160a01b038181165f908152600160209081526040808320815180830183529054948516808252600160a01b90950460ff1615158184015284845260069092528220805460609384939092839283928392909161103b906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611067906141c5565b80156110b25780601f10611089576101008083540402835291602001916110b2565b820191905f5260205f20905b81548152906001019060200180831161109557829003601f168201915b5050506001600160a01b038c165f908152600a6020908152604080832081518083018352815480825260019092015461ffff1681850152818552600990935292208054959c5090949193509150611108906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611134906141c5565b801561117f5780601f106111565761010080835404028352916020019161117f565b820191905f5260205f20905b81548152906001019060200180831161116257829003601f168201915b5050505050975060085f8281526020019081526020015f205f9054906101000a90046001600160a01b031696508160200151955060025f8b6001600160a01b03166001600160a01b031681526020019081526020015f20549450600b5f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8281526020019081526020015f20549350505050919395979092949650565b5f546001600160a01b031633146112455760405162461bcd60e51b8152600401610dd4906141fd565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f65ef617d87f7e47ab080058ac1d5ebf06817bbd817e49898ab9f9532405ecd9b905f90a250565b5f546001600160a01b031633146112b75760405162461bcd60e51b8152600401610dd4906141fd565b601680546001600160a01b0319166001600160a01b0383169081179091556040517fc4fda5d836a9aaafabd3088c5f5dcabfe179c3b392b09dbac0e8727667f3c776905f90a250565b5f546001600160a01b03163314806113225750600d546001600160a01b031633145b61136e5760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f74206f776e65722f61646d696e006044820152606401610dd4565b6001600160a01b0382166113d25760405162461bcd60e51b815260206004820152602560248201527f4665654469737472696275746f723a20746f6b656e206973207a65726f206164604482015264647265737360d81b6064820152608401610dd4565b6040805180820182526001600160a01b03808416808352600160208085018281528885165f818152939092528683209551865491511515600160a01b026001600160a81b031990921695169490941793909317909355925190917fc2b9e48c87971930b3535e0acb2a4b96c7287072255994d8caeea5328dc8ef0391a35050565b5f546001600160a01b03163314806114755750600d546001600160a01b031633145b6114c15760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f74206f776e65722f61646d696e006044820152606401610dd4565b6001600160a01b0387166115275760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a20706c6174666f726d2077616c6c6574206044820152666973207a65726f60c81b6064820152608401610dd4565b600e80546001600160a01b03199081166001600160a01b038a8116918217909355600f805483168a85169081179091556010805484168a86169081179091556011805485168a87169081179091556012805486168a88169081179091556013805487168a8916908117909155601480549097169789169788179096556040805192835260208301919091528101949094526060840194909452917f0ecc98265682cd56ae3665dff6d63e2392a9ed52f34725a8d4700c185c5e222c9060800160405180910390a450505050505050565b6116018134613672565b50565b5f546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610dd4906141fd565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031633146116a95760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f7420426f6e64696e6743757276656044820152606401610dd4565b6016546001600160a01b031661170d5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a20426f6e64696e674375727665206e6f74604482015263081cd95d60e21b6064820152608401610dd4565b6001600160a01b0382165f90815260186020526040902054156117815760405162461bcd60e51b815260206004820152602660248201527f4665654469737472696275746f723a204e465420616c726561647920726567696044820152651cdd195c995960d21b6064820152608401610dd4565b6001600160a01b0382166117d75760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a20746f6b656e206973207a65726f0000006044820152606401610dd4565b5f81116118265760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a20746f6b656e4964206973207a65726f006044820152606401610dd4565b6001600160a01b0382165f81815260186020526040808220849055518392917fc9784cea8d2c30f4e33ec792d8b9fe9055b92f4e24a3748c789490e56d290c2b91a35050565b335f9081526002602090815260408083205460049092528220549091818311611895575f61189f565b61189f8284614232565b90505f81116118f05760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f20637572766520726577617264736044820152606401610dd4565b335f90815260026020908152604080832085905560039091528120805483929061191b9084906141ac565b9091555061192b905033826135b4565b60405181815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c490602001610e4f565b6001600160a01b0381165f90815260186020526040812054819080158061198d57506017546001600160a01b0316155b1561199d57505f93849350915050565b60175460405163133f757160e31b8152600481018390525f918291829182916001600160a01b03909116906399fbab889060240161018060405180830381865afa1580156119ed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a11919061428e565b9b509b50505050505050955095505050733bd359c1119da7da1d913d1c4d2b7c461115433a6001600160a01b0316846001600160a01b031603611a6b57816001600160801b03169650806001600160801b03169550611abc565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03841601611aad57806001600160801b03169650816001600160801b03169550611abc565b505f9788975095505050505050565b5050505050915091565b6001600160a01b0381165f9081526018602052604090205480611b2b5760405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a206e6f204e465420666f7220746f6b656e6044820152606401610dd4565b6017546001600160a01b0316611b935760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a20706f736974696f6e4d616e61676572206044820152661b9bdd081cd95d60ca1b6064820152608401610dd4565b60175460405163133f757160e31b8152600481018390525f9182916001600160a01b03909116906399fbab889060240161018060405180830381865afa158015611bdf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c03919061428e565b5050601754604080516080810182528f81523060208201526001600160801b038183018190526060820152905163fc6f786560e01b8152999d50979b505f9a508a99506001600160a01b03169763fc6f786597611c6b97509550600401935061436892505050565b60408051808303815f875af1158015611c86573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611caa91906143ab565b90925090505f80733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03871601611ce0575082905081611d57565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b03861601611d0f575081905082611d57565b60405162461bcd60e51b815260206004820181905260248201527f4665654469737472696275746f723a20574d4f4e206e6f7420696e20706169726044820152606401610dd4565b8115611dbe57604051632e1a7d4d60e01b815260048101839052733bd359c1119da7da1d913d1c4d2b7c461115433a90632e1a7d4d906024015f604051808303815f87803b158015611da7575f5ffd5b505af1158015611db9573d5f5f3e3d5ffd5b505050505b6001600160a01b0388165f9081526019602052604081208054849290611de59084906141ac565b90915550506001600160a01b0388165f908152601a602052604081208054839290611e119084906141ac565b90915550506001600160a01b0388165f818152601b602090815260409182902042905581518581529081018490527f95d527d1f3395eb32e2ced24e8f7f5ec4e18ea5427dfe60ac1fe88642c7361a4910160405180910390a25050505050505050565b60066020525f908152604090208054611e8c906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb8906141c5565b8015611f035780601f10611eda57610100808354040283529160200191611f03565b820191905f5260205f20905b815481529060010190602001808311611ee657829003601f168201915b505050505081565b5f5f611f1683613a8c565b5f8281526008602052604090205491935091506001600160a01b0316801580611f4757506001600160a01b03811633145b611f9f5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a2068616e646c6520616c726561647920626044820152631bdd5b9960e21b6064820152608401610dd4565b335f908152600760205260409020548015801590611fbd5750838114155b15611ffd575f81815260086020526040902054336001600160a01b0390911603611ffd575f81815260086020526040902080546001600160a01b03191690555b335f9081526006602052604090206120158482614411565b50335f8181526007602090815260408083208890558783526008825280832080546001600160a01b03191690941790935560099052206120558482614411565b5083336001600160a01b03167f8e0acfaadfec23c32c4265b99babad83b73a03944fdf2a24c38094a032b56b95856040516120909190613fb6565b60405180910390a35050505050565b60096020525f908152604090208054611e8c906141c5565b6001600160a01b038082165f908152600760209081526040808320549386168352600a8252808320815180830183528154815260019091015461ffff1681840152848452600990925282208054606094849384939192909190612119906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612145906141c5565b80156121905780601f1061216757610100808354040283529160200191612190565b820191905f5260205f20905b81548152906001019060200180831161217357829003601f168201915b50505050509550805f015182036121ad57806020015194506121b1565b5f94505b506001600160a01b039096165f818152600b602090815260408083208a8452825280832054938352600c825280832099835298905296909620549396929594505050565b6001600160a01b038381165f908152600160209081526040918290208251808401909352549283168252600160a01b90920460ff161515918101829052849161228c5760405162461bcd60e51b8152602060048201526024808201527f4665654469737472696275746f723a20746f6b656e206e6f7420636f6e6669676044820152631d5c995960e21b6064820152608401610dd4565b80516001600160a01b03163314806122ad57505f546001600160a01b031633145b806122c25750600d546001600160a01b031633145b61231e5760405162461bcd60e51b815260206004820152602760248201527f4665654469737472696275746f723a206e6f742063726561746f722f6f776e656044820152663917b0b236b4b760c91b6064820152608401610dd4565b61ffff8316158061232e57508351155b156123be576040805180820182525f80825260208083018281526001600160a01b038a16808452600a83528584209451855590516001909401805461ffff191661ffff9095169490941790935583518481529384018290528301819052917f7f648e14577bb175572cecb4fab1bbbcc25c3840ac1829b8f6207d742a28b55e9060600160405180910390a36124d7565b61271061ffff841611156124205760405162461bcd60e51b815260206004820152602360248201527f4665654469737472696275746f723a2068616e646c652062707320746f6f20686044820152620d2ced60eb1b6064820152608401610dd4565b5f5f61242b86613a8c565b60408051808201825283815261ffff89811660208084019182526001600160a01b038e165f908152600a82528581209451855591516001909401805461ffff19169490931693909317909155848152600990915220919350915061248f8282614411565b5081876001600160a01b03167f7f648e14577bb175572cecb4fab1bbbcc25c3840ac1829b8f6207d742a28b55e83886040516124cc929190614173565b60405180910390a350505b5050505050565b335f90815260026020526040902054806125455760405162461bcd60e51b815260206004820152602260248201527f4665654469737472696275746f723a206e6f2063726561746f72207265776172604482015261647360f01b6064820152608401610dd4565b335f908152600460209081526040808320805460028452828520859055908490556003909252822080549192849261257e9084906141ac565b9091555050335f90815260056020526040812080548392906125a19084906141ac565b909155506125b1905033836135b4565b60405182815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c49060200160405180910390a25050565b5f546001600160a01b031633146126135760405162461bcd60e51b8152600401610dd4906141fd565b601580546001600160a01b0319166001600160a01b0383169081179091556040517f6397f5b135542bb3f477cb346cfab5abdec1251d08dc8f8d4efb4ffe122ea0bf905f90a250565b6001600160a01b038281165f908152600160209081526040808320815180830190925254808516808352600160a01b90910460ff1615159282019290925291928392839283928716146126bb575f5f5f5f9450945094509450506128ab565b6001600160a01b0387165f90815260186020526040812054908082158015906126ee57506017546001600160a01b031615155b156128045760175460405163133f757160e31b8152600481018590525f918291829182916001600160a01b03909116906399fbab889060240161018060405180830381865afa158015612743573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612767919061428e565b9b509b50505050505050955095505050733bd359c1119da7da1d913d1c4d2b7c461115433a6001600160a01b0316846001600160a01b0316036127c157816001600160801b03169550806001600160801b031694506127ff565b733bd359c1119da7da1d913d1c4d2b7c4611154339196001600160a01b038416016127ff57806001600160801b03169550816001600160801b031694505b505050505b612710612813611388846144cc565b61281d91906144e3565b975061271061282e611388836144cc565b61283891906144e3565b6001600160a01b038b165f908152601960205260409020549097506127109061286490611388906144cc565b61286e91906144e3565b6001600160a01b038b165f908152601a60205260409020549096506127109061289a90611388906144cc565b6128a491906144e3565b9450505050505b92959194509250565b335f90815260076020526040902054806129105760405162461bcd60e51b815260206004820152601f60248201527f4665654469737472696275746f723a206e6f2068616e646c6520626f756e64006044820152606401610dd4565b335f9081526006602052604081208054612929906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612955906141c5565b80156129a05780601f10612977576101008083540402835291602001916129a0565b820191905f5260205f20905b81548152906001019060200180831161298357829003601f168201915b5050335f81815260076020908152604080832083905580518083018252838152938352600690915290209495506129dc93509150839050614411565b505f82815260086020526040902054336001600160a01b0390911603612a18575f82815260086020526040902080546001600160a01b03191690555b81336001600160a01b03167ff7129563dfed00fb57275470a393d0e2fd8ca5a4da3afa7a41872696b283a9a183604051612a529190613fb6565b60405180910390a35050565b5f5f612a6983613a8c565b505f908152600860205260409020546001600160a01b03169392505050565b335f9081526004602052604090205480612ae45760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f20563320726577617264730000006044820152606401610dd4565b335f90815260026020526040902054811115612b425760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a20696e76616c69642073746174650000006044820152606401610dd4565b335f9081526002602052604081208054839290612b60908490614232565b9091555050335f908152600460209081526040808320839055600390915281208054839290612b909084906141ac565b9091555050335f9081526005602052604081208054839290612bb39084906141ac565b90915550612bc3905033826135b4565b60405181815233907fd3a47810d5b7bf060f5a846b2900e17ee7ebfc6e5f09c2c5fc978b967375e3c49060200160405180910390a250565b6001600160a01b038181165f908152600160209081526040808320815180830183529054948516808252600160a01b90950460ff16151581840152848452600690925290912080546060929190612c51906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7d906141c5565b8015612cc85780601f10612c9f57610100808354040283529160200191612cc8565b820191905f5260205f20905b815481529060010190602001808311612cab57829003601f168201915b5050505050915050915091565b6001600160a01b0381165f9081526002602090815260408083205460038352818420546004845282852054600590945291842054849391929190818411612d1c575f612d26565b612d268285614232565b9550808311612d35575f612d3f565b612d3f8184614232565b945050505050915091565b6001600160a01b0381165f908152600a6020908152604080832081518083018352815480825260019092015461ffff1681850152908452600990925282208054606093929190612d99906141c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc5906141c5565b8015612e105780601f10612de757610100808354040283529160200191612e10565b820191905f5260205f20905b815481529060010190602001808311612df357829003601f168201915b505050505092508060200151915050915091565b5f546001600160a01b03163314612e4d5760405162461bcd60e51b8152600401610dd4906141fd565b6001600160a01b038116612eb25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd4565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8111612f5a5760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f2076616c75652073656e740000006044820152606401610dd4565b6001600160a01b038281165f9081526001602090815260408083208151808301835290549485168152600160a01b90940460ff16151584830152805160c0810182528381529182018390528101829052606081018290526080810182905260a0810191909152612710612fcf611388856144cc565b612fd991906144e3565b8152612710612fea6105dc856144cc565b612ff491906144e3565b60608201526127106130086103e8856144cc565b61301291906144e3565b608082018190526060820151825161302a91906141ac565b61303491906141ac565b60a08201525f6127106130496101f4866144cc565b61305391906144e3565b9050808260a00181815161306791906141ac565b90525080156130b2576010546001600160a01b03161561309c57601054613097906001600160a01b0316826135b4565b6130b2565b80826080018181516130ae91906141ac565b9052505b6127106130c16101f4866144cc565b6130cb91906144e3565b9050808260a0018181516130df91906141ac565b905250801561312a576011546001600160a01b0316156131145760115461310f906001600160a01b0316826135b4565b61312a565b808260800181815161312691906141ac565b9052505b6127106131396101f4866144cc565b61314391906144e3565b9050808260a00181815161315791906141ac565b90525080156131a2576012546001600160a01b03161561318c57601254613187906001600160a01b0316826135b4565b6131a2565b808260800181815161319e91906141ac565b9052505b6127106131b16101f4866144cc565b6131bb91906144e3565b9050808260a0018181516131cf91906141ac565b905250801561321a576013546001600160a01b031615613204576013546131ff906001600160a01b0316826135b4565b61321a565b808260800181815161321691906141ac565b9052505b6127106132296101f4866144cc565b61323391906144e3565b9050808260a00181815161324791906141ac565b9052508015613292576014546001600160a01b03161561327c57601454613277906001600160a01b0316826135b4565b613292565b808260800181815161328e91906141ac565b9052505b5f8260a00151856132a39190614232565b905080836080018181516132b791906141ac565b9052508251158015906132d3575083516001600160a01b031615155b156133b2576132e586845f0151613ccb565b604085015260208401819052156133ad5760208084015185516001600160a01b03165f9081526002909252604082208054919290916133259084906141ac565b909155505060208084015185516001600160a01b03165f9081526004909252604082208054919290916133599084906141ac565b90915550508351602084810151855160408051928352928201526001600160a01b038981169316917f0d4cef82a4f7c87c7bf598878d7b68f98bb9a0e98b5fec2b8e96f444fb40f37f910160405180910390a35b6133cc565b82516080840180516133c59083906141ac565b9052505f83525b6060830151156134ee576015546001600160a01b03161561349d57601554606084015160408051600481526024810182526020810180516001600160e01b031663014d6aed60e41b17905290515f936001600160a01b0316929161342f91614519565b5f6040518083038185875af1925050503d805f8114613469576040519150601f19603f3d011682016040523d82523d5f602084013e61346e565b606091505b50509050806134975783606001518460800181815161348d91906141ac565b9052505f60608501525b506134ee565b600f546001600160a01b0316156134ce57600f5460608401516134c9916001600160a01b0316906135b4565b6134ee565b8260600151836080018181516134e491906141ac565b9052505f60608401525b60808301511561353957600e545f906001600160a01b031661351a575f546001600160a01b0316613527565b600e546001600160a01b03165b90506135378185608001516135b4565b505b82516020808501516040808701516060808901516080808b015185518e8152978801989098529386019490945284015282015260a08101919091526001600160a01b038716907fe205594824e0b766055113357eb9ca852cce628f1cd9cd5672527343a4e469079060c00160405180910390a2505050505050565b805f036135bf575050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613608576040519150601f19603f3d011682016040523d82523d5f602084013e61360d565b606091505b505090508061366d5760405162461bcd60e51b815260206004820152602660248201527f4665654469737472696275746f723a206e6174697665207472616e736665722060448201526519985a5b195960d21b6064820152608401610dd4565b505050565b5f81116136c15760405162461bcd60e51b815260206004820152601d60248201527f4665654469737472696275746f723a206e6f2076616c75652073656e740000006044820152606401610dd4565b6001600160a01b038281165f9081526001602090815260408083208151808301835290549485168152600160a01b90940460ff16151584830152805160c0810182528381529182018390528101829052606081018290526080810182905260a0810191909152612710613736611388856144cc565b61374091906144e3565b81526127106137516105dc856144cc565b61375b91906144e3565b606082015261271061376f6103e8856144cc565b61377991906144e3565b608082018190526060820151825161379191906141ac565b61379b91906141ac565b60a08201525f6127106137b06101f4866144cc565b6137ba91906144e3565b9050808260a0018181516137ce91906141ac565b9052508015613819576010546001600160a01b031615613803576010546137fe906001600160a01b0316826135b4565b613819565b808260800181815161381591906141ac565b9052505b6127106138286101f4866144cc565b61383291906144e3565b9050808260a00181815161384691906141ac565b9052508015613891576011546001600160a01b03161561387b57601154613876906001600160a01b0316826135b4565b613891565b808260800181815161388d91906141ac565b9052505b6127106138a06101f4866144cc565b6138aa91906144e3565b9050808260a0018181516138be91906141ac565b9052508015613909576012546001600160a01b0316156138f3576012546138ee906001600160a01b0316826135b4565b613909565b808260800181815161390591906141ac565b9052505b6127106139186101f4866144cc565b61392291906144e3565b9050808260a00181815161393691906141ac565b9052508015613981576013546001600160a01b03161561396b57601354613966906001600160a01b0316826135b4565b613981565b808260800181815161397d91906141ac565b9052505b6127106139906101f4866144cc565b61399a91906144e3565b9050808260a0018181516139ae91906141ac565b90525080156139f9576014546001600160a01b0316156139e3576014546139de906001600160a01b0316826135b4565b6139f9565b80826080018181516139f591906141ac565b9052505b5f8260a0015185613a0a9190614232565b90508083608001818151613a1e91906141ac565b905250825115801590613a3a575083516001600160a01b031615155b156133b257613a4c86845f0151613ccb565b604085015260208401819052156133ad5760208084015185516001600160a01b03165f9081526002909252604082208054919290916133599084906141ac565b80515f90606090839080613ae25760405162461bcd60e51b815260206004820152601c60248201527f4665654469737472696275746f723a20656d7074792068616e646c65000000006044820152606401610dd4565b81515f90600160fe1b9084908390613afc57613afc614524565b01602001516001600160f81b03191603613b645760018211613b605760405162461bcd60e51b815260206004820152601c60248201527f4665654469737472696275746f723a20656d7074792068616e646c65000000006044820152606401610dd4565b5060015b5f613b6f8284614232565b67ffffffffffffffff811115613b8757613b87613fc8565b6040519080825280601f01601f191660200182016040528015613bb1576020820181803683370190505b509050815b83811015613c95575f858281518110613bd157613bd1614524565b016020015160f81c905060418110801590613bf05750605a8160ff1611155b15613c3957613c00816020614538565b60f81b83613c0e8685614232565b81518110613c1e57613c1e614524565b60200101906001600160f81b03191690815f1a905350613c8c565b858281518110613c4b57613c4b614524565b01602001516001600160f81b03191683613c658685614232565b81518110613c7557613c75614524565b60200101906001600160f81b03191690815f1a9053505b50600101613bb6565b5080945080604051602001613caa9190614551565b60405160208183030381529060405280519060200120955050505050915091565b6001600160a01b0382165f908152600a602090815260408083208151808301909252805480835260019091015461ffff1692820192909252839291831580613d11575080155b80613d225750602082015161ffff16155b15613d3257505f9150613df09050565b602082015161271090613d499061ffff16876144cc565b613d5391906144e3565b9250825f03613d6757505f9150613df09050565b613d718386614232565b6001600160a01b0387165f908152600b60209081526040808320858452909152812080549296508592909190613da89084906141ac565b909155505060405183815281906001600160a01b038816907f0250a3283d2094fdc6db498e1475e74e424a6eceda9e99f2ec15be2c4d3883b59060200160405180910390a350505b9250929050565b6001600160a01b0381168114611601575f5ffd5b5f60208284031215613e1b575f5ffd5b8135613e2681613df7565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038816815260e0602082018190525f90613e7e90830189613e2d565b8281036040840152613e908189613e2d565b6001600160a01b03979097166060840152505061ffff93909316608084015260a083019190915260c0909101529392505050565b5f5f60408385031215613ed5575f5ffd5b8235613ee081613df7565b91506020830135613ef081613df7565b809150509250929050565b5f5f5f5f5f5f5f60e0888a031215613f11575f5ffd5b8735613f1c81613df7565b96506020880135613f2c81613df7565b95506040880135613f3c81613df7565b94506060880135613f4c81613df7565b93506080880135613f5c81613df7565b925060a0880135613f6c81613df7565b915060c0880135613f7c81613df7565b8091505092959891949750929550565b5f5f60408385031215613f9d575f5ffd5b8235613fa881613df7565b946020939093013593505050565b602081525f613e266020830184613e2d565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112613feb575f5ffd5b813567ffffffffffffffff81111561400557614005613fc8565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561403457614034613fc8565b60405281815283820160200185101561404b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215614077575f5ffd5b813567ffffffffffffffff81111561408d575f5ffd5b61409984828501613fdc565b949350505050565b5f602082840312156140b1575f5ffd5b5035919050565b608081525f6140ca6080830187613e2d565b61ffff959095166020830152506040810192909252606090910152919050565b5f5f5f606084860312156140fc575f5ffd5b833561410781613df7565b9250602084013567ffffffffffffffff811115614122575f5ffd5b61412e86828701613fdc565b925050604084013561ffff81168114614145575f5ffd5b809150509250925092565b6001600160a01b03831681526040602082018190525f9061409990830184613e2d565b604081525f6141856040830185613e2d565b905061ffff831660208301529392505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156141bf576141bf614198565b92915050565b600181811c908216806141d957607f821691505b6020821081036141f757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b818103818111156141bf576141bf614198565b805161425081613df7565b919050565b805162ffffff81168114614250575f5ffd5b8051600281900b8114614250575f5ffd5b80516001600160801b0381168114614250575f5ffd5b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f0312156142aa575f5ffd5b8c516bffffffffffffffffffffffff811681146142c5575f5ffd5b9b506142d360208e01614245565b9a506142e160408e01614245565b99506142ef60608e01614245565b98506142fd60808e01614255565b975061430b60a08e01614267565b965061431960c08e01614267565b955061432760e08e01614278565b6101008e01516101208f0151919650945092506143476101408e01614278565b91506143566101608e01614278565b90509295989b509295989b509295989b565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f5f604083850312156143bc575f5ffd5b505080516020909101519092909150565b601f82111561366d57805f5260205f20601f840160051c810160208510156143f25750805b601f840160051c820191505b818110156124d7575f81556001016143fe565b815167ffffffffffffffff81111561442b5761442b613fc8565b61443f8161443984546141c5565b846143cd565b6020601f821160018114614471575f831561445a5750848201515b5f19600385901b1c1916600184901b1784556124d7565b5f84815260208120601f198516915b828110156144a05787850151825560209485019460019092019101614480565b50848210156144bd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b80820281158282048414176141bf576141bf614198565b5f826144fd57634e487b7160e01b5f52601260045260245ffd5b500490565b5f81518060208401855e5f93019283525090919050565b5f613e268284614502565b634e487b7160e01b5f52603260045260245ffd5b60ff81811683821601908111156141bf576141bf614198565b673a3bb4ba3a32b91d60c11b81525f613e26600883018461450256fea2646970667358221220ab549d56225fdd57c073c00152121c6866fd080d9fc8efd934543f86f9cb309764736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000300dba24233b87ec0bcfaebe89d586619f02cacf0000000000000000000000007197e214c0b767cfb76fb734ab638e2c192f4e53
-----Decoded View---------------
Arg [0] : _platformWallet (address): 0x300Dba24233b87Ec0BcfAeBe89d586619F02caCf
Arg [1] : _positionManager (address): 0x7197E214c0b767cFB76Fb734ab638E2c192F4E53
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000300dba24233b87ec0bcfaebe89d586619f02cacf
Arg [1] : 0000000000000000000000007197e214c0b767cfb76fb734ab638e2c192f4e53
Deployed Bytecode Sourcemap
2390:45209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7468:28;;;;;;;;;;-1:-1:-1;7468:28:0;;;;-1:-1:-1;;;;;7468:28:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7468:28:0;;;;;;;;7571:27;;;;;;;;;;-1:-1:-1;7571:27:0;;;;-1:-1:-1;;;;;7571:27:0;;;2809:46;;;;;;;;;;;;2851:4;2809:46;;;;;396:6:1;384:19;;;366:38;;354:2;339:18;2809:46:0;222:188:1;4871:49:0;;;;;;;;;;-1:-1:-1;4871:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;949:25:1;;;937:2;922:18;4871:49:0;803:177:1;3402:46:0;;;;;;;;;;;;3444:4;3402:46;;46286:973;;;;;;;;;;-1:-1:-1;46286:973:0;;;;;:::i;:::-;;:::i;34823:502::-;;;;;;;;;;-1:-1:-1;34823:502:0;;;;;:::i;:::-;;:::i;43920:294::-;;;;;;;;;;-1:-1:-1;43920:294:0;;;;;:::i;:::-;-1:-1:-1;;;;;44131:27:0;44038:19;44131:27;;;:18;:27;;;;;;;;;44181:16;:25;;;;;;;44131:27;;43920:294;;;;;1159:25:1;;;1215:2;1200:18;;1193:34;;;;1132:18;43920:294:0;985:248:1;4064:53:0;;;;;;;;;;;;4112:5;4064:53;;37219:916;;;;;;;;;;-1:-1:-1;37219:916:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;3027:45::-;;;;;;;;;;;;3069:3;3027:45;;14116:158;;;;;;;;;;-1:-1:-1;14116:158:0;;;;;:::i;:::-;;:::i;7145:26::-;;;;;;;;;;-1:-1:-1;7145:26:0;;;;-1:-1:-1;;;;;7145:26:0;;;16623:164;;;;;;;;;;-1:-1:-1;16623:164:0;;;;;:::i;:::-;;:::i;14516:336::-;;;;;;;;;;-1:-1:-1;14516:336:0;;;;;:::i;:::-;;:::i;15077:913::-;;;;;;;;;;-1:-1:-1;15077:913:0;;;;;:::i;:::-;;:::i;5710:53::-;;;;;;;;;;-1:-1:-1;5710:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;31867:118;;;;;;:::i;:::-;;:::i;3329:46::-;;;;;;;;;;;;3371:4;3329:46;;16111:122;;;;;;;;;;-1:-1:-1;16111:122:0;;;;;:::i;:::-;;:::i;7605:27::-;;;;;;;;;;-1:-1:-1;7605:27:0;;;;-1:-1:-1;;;;;7605:27:0;;;8545:53;;;;;;;;;;-1:-1:-1;8545:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;38492:565;;;;;;;;;;-1:-1:-1;38492:565:0;;;;;:::i;:::-;;:::i;33096:642::-;;;;;;;;;;;;;:::i;39222:1334::-;;;;;;;;;;-1:-1:-1;39222:1334:0;;;;;:::i;:::-;;:::i;5063:53::-;;;;;;;;;;-1:-1:-1;5063:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;44389:1732;;;;;;;;;;-1:-1:-1;44389:1732:0;;;;;:::i;:::-;;:::i;8172:30::-;;;;;;;;;;-1:-1:-1;8172:30:0;;;;-1:-1:-1;;;;;8172:30:0;;;5593:49;;;;;;;;;;-1:-1:-1;5593:49:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16988:899::-;;;;;;;;;;-1:-1:-1;16988:899:0;;;;;:::i;:::-;;:::i;5966:45::-;;;;;;;;;;-1:-1:-1;5966:45:0;;;;;:::i;:::-;;:::i;8276:73::-;;;;;;;;;;;;8307:42;8276:73;;36071:651;;;;;;;;;;-1:-1:-1;36071:651:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;19310:918::-;;;;;;;;;;-1:-1:-1;19310:918:0;;;;;:::i;:::-;;:::i;1258:20::-;;;;;;;;;;-1:-1:-1;1258:20:0;;;;-1:-1:-1;;;;;1258:20:0;;;32365:656;;;;;;;;;;;;;:::i;16301:182::-;;;;;;;;;;-1:-1:-1;16301:182:0;;;;;:::i;:::-;;:::i;4664:51::-;;;;;;;;;;-1:-1:-1;4664:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;5257;;;;;;;;;;-1:-1:-1;5257:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;40943:1993;;;;;;;;;;-1:-1:-1;40943:1993:0;;;;;:::i;:::-;;:::i;:::-;;;;7298:25:1;;;7354:2;7339:18;;7332:34;;;;7382:18;;;7375:34;7440:2;7425:18;;7418:34;7285:3;7270:19;40943:1993:0;7067:391:1;8401:45:0;;;;;;;;;;-1:-1:-1;8401:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;17965:507;;;;;;;;;;;;;:::i;8638:55::-;;;;;;;;;;-1:-1:-1;8638:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;18554:183;;;;;;;;;;-1:-1:-1;18554:183:0;;;;;:::i;:::-;;:::i;33818:821::-;;;;;;;;;;;;;:::i;7537:27::-;;;;;;;;;;-1:-1:-1;7537:27:0;;;;-1:-1:-1;;;;;7537:27:0;;;6722:68;;;;;;;;;;-1:-1:-1;6722:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;36807:304;;;;;;;;;;-1:-1:-1;36807:304:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6424:55::-;;;;;;;;;;-1:-1:-1;6424:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;8329:25:1;;;8402:6;8390:19;;;8385:2;8370:18;;8363:47;8302:18;6424:55:0;8157:259:1;43126:642:0;;;;;;;;;;-1:-1:-1;43126:642:0;;;;;:::i;:::-;;:::i;7639:27::-;;;;;;;;;;-1:-1:-1;7639:27:0;;;;-1:-1:-1;;;;;7639:27:0;;;8795:53;;;;;;;;;;-1:-1:-1;8795:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;35616:294;;;;;;;;;;-1:-1:-1;35616:294:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;7758:30::-;;;;;;;;;;-1:-1:-1;7758:30:0;;;;-1:-1:-1;;;;;7758:30:0;;;40642:220;;;;;;;;;;-1:-1:-1;40642:220:0;;;;;:::i;:::-;-1:-1:-1;;;;;40799:25:0;40735:17;40799:25;;;:18;:25;;;;;;;;;40826:20;:27;;;;;;;40799:25;;40642:220;7883:27;;;;;;;;;;-1:-1:-1;7883:27:0;;;;-1:-1:-1;;;;;7883:27:0;;;1622:236;;;;;;;;;;-1:-1:-1;1622:236:0;;;;;:::i;:::-;;:::i;5846:53::-;;;;;;;;;;-1:-1:-1;5846:53:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;5846:53:0;;;6569:70;;;;;;;;;;-1:-1:-1;6569:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7432:29;;;;;;;;;;-1:-1:-1;7432:29:0;;;;-1:-1:-1;;;;;7432:29:0;;;4443:50;;;;;;;;;;-1:-1:-1;4443:50:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;4443:50:0;;;-1:-1:-1;;;4443:50:0;;;;;;;;;;-1:-1:-1;;;;;8914:32:1;;;8896:51;;8990:14;;8983:22;8978:2;8963:18;;8956:50;8869:18;4443:50:0;8728:284:1;7503:27:0;;;;;;;;;;-1:-1:-1;7503:27:0;;;;-1:-1:-1;;;;;7503:27:0;;;46286:973;-1:-1:-1;;;;;46375:25:0;;46355:17;46375:25;;;:18;:25;;;;;;;;;46433:20;:27;;;;;;;46489:13;;;;:32;;;46520:1;46506:11;:15;46489:32;46481:77;;;;-1:-1:-1;;;46481:77:0;;9219:2:1;46481:77:0;;;9201:21:1;;;9238:18;;;9231:30;9297:34;9277:18;;;9270:62;9349:18;;46481:77:0;;;;;;;;;-1:-1:-1;;;;;46604:25:0;;46632:1;46604:25;;;:18;:25;;;;;;;;:29;;;46644:20;:27;;;;;:31;46755:13;;46751:82;;46785:36;46804:5;46811:9;46785:18;:36::i;:::-;47203:48;;;1159:25:1;;;1215:2;1200:18;;1193:34;;;-1:-1:-1;;;;;47203:48:0;;;;;1132:18:1;47203:48:0;;;;;;;;46344:915;;46286:973;:::o;34823:502::-;34918:10;34886;34899:30;;;:18;:30;;;;;;;34940:60;;;;-1:-1:-1;;;34940:60:0;;9580:2:1;34940:60:0;;;9562:21:1;9619:2;9599:18;;;9592:30;9658:33;9638:18;;;9631:61;9709:18;;34940:60:0;9378:355:1;34940:60:0;-1:-1:-1;;;;;35030:22:0;;35013:14;35030:22;;;:15;:22;;;;;;;;:26;;;;;;;;;35075:10;35067:56;;;;-1:-1:-1;;;35067:56:0;;9940:2:1;35067:56:0;;;9922:21:1;9979:2;9959:18;;;9952:30;10018:34;9998:18;;;9991:62;-1:-1:-1;;;10069:18:1;;;10062:31;10110:19;;35067:56:0;9738:397:1;35067:56:0;-1:-1:-1;;;;;35136:22:0;;35165:1;35136:22;;;:15;:22;;;;;;;;:26;;;;;;;;:30;;;35177:20;;;:13;:20;;;;;:24;;;;;;;;:34;;35205:6;;35165:1;35177:34;;35205:6;;35177:34;:::i;:::-;;;;-1:-1:-1;35224:31:0;;-1:-1:-1;35236:10:0;35248:6;35224:11;:31::i;:::-;35298:10;-1:-1:-1;;;;;35273:44:0;35294:2;35287:5;-1:-1:-1;;;;;35273:44:0;;35310:6;35273:44;;;;949:25:1;;937:2;922:18;;803:177;35273:44:0;;;;;;;;34875:450;;34823:502;:::o;37219:916::-;-1:-1:-1;;;;;37647:18:0;;;37324:21;37647:18;;;:11;:18;;;;;;;;37622:43;;;;;;;;;;;;;;;-1:-1:-1;;;37622:43:0;;;;;;;;;;;37730:30;;;:15;:30;;;;;37714:46;;37360:27;;;;37324:21;;;;;;;;37622:43;;37714:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;37797:23:0;;37773:21;37797:23;;;:16;:23;;;;;;;;37773:47;;;;;;;;;;;;;;;;;;;;;;;37885:15;;;:11;:15;;;;;37870:30;;37714:46;;-1:-1:-1;37773:47:0;;;;-1:-1:-1;37885:15:0;-1:-1:-1;37870:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37932:18;:22;37951:2;37932:22;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37932:22:0;37911:43;;37982:2;:15;;;37965:32;;38035:16;:31;38052:13;-1:-1:-1;;;;;38035:31:0;-1:-1:-1;;;;;38035:31:0;;;;;;;;;;;;;38010:56;;38101:15;:22;38117:5;-1:-1:-1;;;;;38101:22:0;-1:-1:-1;;;;;38101:22:0;;;;;;;;;;;;:26;38124:2;38101:26;;;;;;;;;;;;38077:50;;37611:524;;;37219:916;;;;;;;;;:::o;14116:158::-;1552:5;;-1:-1:-1;;;;;1552:5:0;1538:10;:19;1530:64;;;;-1:-1:-1;;;1530:64:0;;;;;;;:::i;:::-;14192:11:::1;:26:::0;;-1:-1:-1;;;;;;14192:26:0::1;-1:-1:-1::0;;;;;14192:26:0;::::1;::::0;;::::1;::::0;;;14234:32:::1;::::0;::::1;::::0;-1:-1:-1;;14234:32:0::1;14116:158:::0;:::o;16623:164::-;1552:5;;-1:-1:-1;;;;;1552:5:0;1538:10;:19;1530:64;;;;-1:-1:-1;;;1530:64:0;;;;;;;:::i;:::-;16701:12:::1;:28:::0;;-1:-1:-1;;;;;;16701:28:0::1;-1:-1:-1::0;;;;;16701:28:0;::::1;::::0;;::::1;::::0;;;16745:34:::1;::::0;::::1;::::0;-1:-1:-1;;16745:34:0::1;16623:164:::0;:::o;14516:336::-;13264:5;;-1:-1:-1;;;;;13264:5:0;13250:10;:19;;:48;;-1:-1:-1;13287:11:0;;-1:-1:-1;;;;;13287:11:0;13273:10;:25;13250:48;13228:129;;;;-1:-1:-1;;;13228:129:0;;11350:2:1;13228:129:0;;;11332:21:1;11389:2;11369:18;;;11362:30;11428:33;11408:18;;;11401:61;11479:18;;13228:129:0;11148:355:1;13228:129:0;-1:-1:-1;;;;;14618:19:0;::::1;14610:69;;;::::0;-1:-1:-1;;;14610:69:0;;11710:2:1;14610:69:0::1;::::0;::::1;11692:21:1::0;11749:2;11729:18;;;11722:30;11788:34;11768:18;;;11761:62;-1:-1:-1;;;11839:18:1;;;11832:35;11884:19;;14610:69:0::1;11508:401:1::0;14610:69:0::1;14713:82;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;14713:82:0;;::::1;::::0;;;14779:4:::1;14713:82;::::0;;::::1;::::0;;;14692:18;;::::1;-1:-1:-1::0;14692:18:0;;;;;;;;;;:103;;;;;;::::1;;-1:-1:-1::0;;;14692:103:0::1;-1:-1:-1::0;;;;;;14692:103:0;;;;::::1;::::0;;;;;;;::::1;::::0;;;14813:31;;14692:18;;14813:31:::1;::::0;::::1;14516:336:::0;;:::o;15077:913::-;13264:5;;-1:-1:-1;;;;;13264:5:0;13250:10;:19;;:48;;-1:-1:-1;13287:11:0;;-1:-1:-1;;;;;13287:11:0;13273:10;:25;13250:48;13228:129;;;;-1:-1:-1;;;13228:129:0;;11350:2:1;13228:129:0;;;11332:21:1;11389:2;11369:18;;;11362:30;11428:33;11408:18;;;11401:61;11479:18;;13228:129:0;11148:355:1;13228:129:0;-1:-1:-1;;;;;15379:29:0;::::1;15371:81;;;::::0;-1:-1:-1;;;15371:81:0;;12116:2:1;15371:81:0::1;::::0;::::1;12098:21:1::0;12155:2;12135:18;;;12128:30;12194:34;12174:18;;;12167:62;-1:-1:-1;;;12245:18:1;;;12238:37;12292:19;;15371:81:0::1;11914:403:1::0;15371:81:0::1;15465:14;:32:::0;;-1:-1:-1;;;;;;15465:32:0;;::::1;-1:-1:-1::0;;;;;15465:32:0;;::::1;::::0;;::::1;::::0;;;15508:13:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15550:12:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15591:12:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15632:12:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15673:12:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15714:12:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;15762:220:::1;::::0;;12553:51:1;;;12635:2;12620:18;;12613:60;;;;12689:18;;12682:60;;;;12773:2;12758:18;;12751:60;;;;15508:31:0;15762:220:::1;::::0;12540:3:1;12525:19;15762:220:0::1;;;;;;;15077:913:::0;;;;;;;:::o;31867:118::-;31933:44;31960:5;31967:9;31933:26;:44::i;:::-;31867:118;:::o;16111:122::-;1552:5;;-1:-1:-1;;;;;1552:5:0;1538:10;:19;1530:64;;;;-1:-1:-1;;;1530:64:0;;;;;;;:::i;:::-;16191:15:::1;:34:::0;;-1:-1:-1;;;;;;16191:34:0::1;-1:-1:-1::0;;;;;16191:34:0;;;::::1;::::0;;;::::1;::::0;;16111:122::o;38492:565::-;38597:12;;-1:-1:-1;;;;;38597:12:0;38583:10;:26;38575:71;;;;-1:-1:-1;;;38575:71:0;;13024:2:1;38575:71:0;;;13006:21:1;;;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;13154:18;;38575:71:0;12822:356:1;38575:71:0;38665:12;;-1:-1:-1;;;;;38665:12:0;38657:75;;;;-1:-1:-1;;;38657:75:0;;13385:2:1;38657:75:0;;;13367:21:1;13424:2;13404:18;;;13397:30;13463:34;13443:18;;;13436:62;-1:-1:-1;;;13514:18:1;;;13507:34;13558:19;;38657:75:0;13183:400:1;38657:75:0;-1:-1:-1;;;;;38751:17:0;;;;;;:10;:17;;;;;;:22;38743:73;;;;-1:-1:-1;;;38743:73:0;;13790:2:1;38743:73:0;;;13772:21:1;13829:2;13809:18;;;13802:30;13868:34;13848:18;;;13841:62;-1:-1:-1;;;13919:18:1;;;13912:36;13965:19;;38743:73:0;13588:402:1;38743:73:0;-1:-1:-1;;;;;38835:19:0;;38827:61;;;;-1:-1:-1;;;38827:61:0;;14197:2:1;38827:61:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:31;14255:18;;;14248:59;14324:18;;38827:61:0;13995:353:1;38827:61:0;38917:1;38907:7;:11;38899:55;;;;-1:-1:-1;;;38899:55:0;;14555:2:1;38899:55:0;;;14537:21:1;14594:2;14574:18;;;14567:30;14633:33;14613:18;;;14606:61;14684:18;;38899:55:0;14353:355:1;38899:55:0;-1:-1:-1;;;;;38975:17:0;;;;;;:10;:17;;;;;;:27;;;39018:31;38995:7;;38975:17;39018:31;;;38492:565;;:::o;33096:642::-;33187:10;33145:22;33170:28;;;:16;:28;;;;;;;;;33231:18;:30;;;;;;33170:28;;33294;;;:63;;33356:1;33294:63;;;33325:28;33342:11;33325:14;:28;:::i;:::-;33272:85;;33400:1;33386:11;:15;33378:60;;;;-1:-1:-1;;;33378:60:0;;15048:2:1;33378:60:0;;;15030:21:1;;;15067:18;;;15060:30;15126:34;15106:18;;;15099:62;15178:18;;33378:60:0;14846:356:1;33378:60:0;33496:10;33479:28;;;;:16;:28;;;;;;;;:42;;;33559:14;:26;;;;;:41;;33589:11;;33479:28;33559:41;;33589:11;;33559:41;:::i;:::-;;;;-1:-1:-1;33637:36:0;;-1:-1:-1;33649:10:0;33661:11;33637;:36::i;:::-;33691:39;;949:25:1;;;33706:10:0;;33691:39;;937:2:1;922:18;33691:39:0;803:177:1;39222:1334:0;-1:-1:-1;;;;;39389:17:0;;39315;39389;;;:10;:17;;;;;;39315;;39421:12;;;:45;;-1:-1:-1;39437:15:0;;-1:-1:-1;;;;;39437:15:0;:29;39421:45;39417:64;;;-1:-1:-1;39476:1:0;;;;-1:-1:-1;39222:1334:0;-1:-1:-1;;39222:1334:0:o;39417:64::-;40001:15;;39973:63;;-1:-1:-1;;;39973:63:0;;;;;949:25:1;;;39613:14:0;;;;;;;;-1:-1:-1;;;;;40001:15:0;;;;39973:54;;922:18:1;;39973:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39532:504;;;;;;;;;;;;;;;;8307:42;-1:-1:-1;;;;;40187:14:0;:6;-1:-1:-1;;;;;40187:14:0;;40183:366;;40238:11;-1:-1:-1;;;;;40230:20:0;40218:32;;40287:11;-1:-1:-1;;;;;40279:20:0;40265:34;;40183:366;;;-1:-1:-1;;;;;;;40321:14:0;;;40317:232;;40372:11;-1:-1:-1;;;;;40364:20:0;40352:32;;40421:11;-1:-1:-1;;;;;40413:20:0;40399:34;;40317:232;;;-1:-1:-1;40532:1:0;;;;-1:-1:-1;39222:1334:0;-1:-1:-1;;;;;;39222:1334:0:o;40317:232::-;39360:1196;;;;;39222:1334;;;:::o;44389:1732::-;-1:-1:-1;;;;;44465:17:0;;44447:15;44465:17;;;:10;:17;;;;;;44501:11;44493:56;;;;-1:-1:-1;;;44493:56:0;;17383:2:1;44493:56:0;;;17365:21:1;;;17402:18;;;17395:30;17461:34;17441:18;;;17434:62;17513:18;;44493:56:0;17181:356:1;44493:56:0;44568:15;;-1:-1:-1;;;;;44568:15:0;44560:81;;;;-1:-1:-1;;;44560:81:0;;17744:2:1;44560:81:0;;;17726:21:1;17783:2;17763:18;;;17756:30;17822:34;17802:18;;;17795:62;-1:-1:-1;;;17873:18:1;;;17866:37;17920:19;;44560:81:0;17542:403:1;44560:81:0;44809:15;;44781:63;;-1:-1:-1;;;44781:63:0;;;;;949:25:1;;;44717:14:0;;;;-1:-1:-1;;;;;44809:15:0;;;;44781:54;;922:18:1;;44781:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;44972:15:0;;45011:259;;;;;;;;;;;45126:4;45011:259;;;;-1:-1:-1;;;;;45011:259:0;;;;;;;;;;44944:337;;-1:-1:-1;;;44944:337:0;;44712:132;;-1:-1:-1;44712:132:0;;-1:-1:-1;44908:15:0;;-1:-1:-1;44908:15:0;;-1:-1:-1;;;;;;44972:15:0;;44944:52;;:337;;-1:-1:-1;45011:259:0;-1:-1:-1;44944:337:0;;;-1:-1:-1;44944:337:0;;-1:-1:-1;;;44944:337:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44907:374;;-1:-1:-1;44907:374:0;-1:-1:-1;45357:17:0;;-1:-1:-1;;;;;;;45429:14:0;;;45425:285;;-1:-1:-1;45472:7:0;;-1:-1:-1;45508:7:0;45425:285;;;-1:-1:-1;;;;;;;45537:14:0;;;45533:177;;-1:-1:-1;45580:7:0;;-1:-1:-1;45616:7:0;45533:177;;;45656:42;;-1:-1:-1;;;45656:42:0;;19045:2:1;45656:42:0;;;19027:21:1;;;19064:18;;;19057:30;19123:34;19103:18;;;19096:62;19175:18;;45656:42:0;18843:356:1;45533:177:0;45775:13;;45771:77;;45805:31;;-1:-1:-1;;;45805:31:0;;;;;949:25:1;;;8307:42:0;;45805:20;;922:18:1;;45805:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45771:77;-1:-1:-1;;;;;45896:25:0;;;;;;:18;:25;;;;;:38;;45925:9;;45896:25;:38;;45925:9;;45896:38;:::i;:::-;;;;-1:-1:-1;;;;;;;45945:27:0;;;;;;:20;:27;;;;;:42;;45976:11;;45945:27;:42;;45976:11;;45945:42;:::i;:::-;;;;-1:-1:-1;;;;;;;45998:25:0;;;;;;:18;:25;;;;;;;;;46026:15;45998:43;;46067:46;;1159:25:1;;;1200:18;;;1193:34;;;46067:46:0;;1132:18:1;46067:46:0;;;;;;;44436:1685;;;;;;;44389:1732;:::o;5593:49::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16988:899::-;17058:10;17070:18;17092:25;17110:6;17092:17;:25::i;:::-;17130:20;17153:22;;;:18;:22;;;;;;17057:60;;-1:-1:-1;17057:60:0;-1:-1:-1;;;;;;17153:22:0;17208:26;;;:56;;-1:-1:-1;;;;;;17238:26:0;;17254:10;17238:26;17208:56;17186:142;;;;-1:-1:-1;;;17186:142:0;;19406:2:1;17186:142:0;;;19388:21:1;19445:2;19425:18;;;19418:30;19484:34;19464:18;;;19457:62;-1:-1:-1;;;19535:18:1;;;19528:34;19579:19;;17186:142:0;19204:400:1;17186:142:0;17436:10;17399:15;17417:30;;;:18;:30;;;;;;17462:21;;;;;:38;;;17498:2;17487:7;:13;;17462:38;17458:192;;;17521:27;;;;:18;:27;;;;;;17552:10;-1:-1:-1;;;;;17521:27:0;;;:41;17517:122;;17621:1;17583:27;;;:18;:27;;;;;:40;;-1:-1:-1;;;;;;17583:40:0;;;17517:122;17678:10;17662:27;;;;:15;:27;;;;;:34;17692:4;17662:27;:34;:::i;:::-;-1:-1:-1;17726:10:0;17707:30;;;;:18;:30;;;;;;;;:35;;;17753:22;;;:18;:22;;;;;:35;;-1:-1:-1;;;;;;17753:35:0;;;;;;;17799:11;:15;;;:22;17817:4;17799:15;:22;:::i;:::-;;17870:2;17858:10;-1:-1:-1;;;;;17839:40:0;;17874:4;17839:40;;;;;;:::i;:::-;;;;;;;;17046:841;;;;16988:899;:::o;5966:45::-;;;;;;;;;;;;;;;;:::i;36071:651::-;-1:-1:-1;;;;;36356:26:0;;;36234:19;36356:26;;;:18;:26;;;;;;;;;36417:23;;;;;:16;:23;;;;;36393:47;;;;;;;;;;;;;;;;;;;;;;36460:15;;;:11;:15;;;;;36451:24;;36199:20;;36234:19;;;;36356:26;;36393:47;;36460:15;36451:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36498:2;:13;;;36492:2;:19;36488:131;;36543:2;:15;;;36528:30;;36488:131;;;36606:1;36591:16;;36488:131;-1:-1:-1;;;;;;36643:22:0;;;;;;;:15;:22;;;;;;;;:26;;;;;;;;;36690:20;;;:13;:20;;;;;:24;;;;;;;;;;;36071:651;;;;36643:26;-1:-1:-1;;;36071:651:0:o;19310:918::-;-1:-1:-1;;;;;13469:18:0;;;13444:22;13469:18;;;:11;:18;;;;;;;;;13444:43;;;;;;;;;;;;;;-1:-1:-1;;;13444:43:0;;;;;;;;;;;;;13469:18;;13498:59;;;;-1:-1:-1;;;13498:59:0;;21935:2:1;13498:59:0;;;21917:21:1;21974:2;21954:18;;;21947:30;22013:34;21993:18;;;21986:62;-1:-1:-1;;;22064:18:1;;;22057:34;22108:19;;13498:59:0;21733:400:1;13498:59:0;13604:11;;-1:-1:-1;;;;;13590:25:0;:10;:25;;:48;;-1:-1:-1;13633:5:0;;-1:-1:-1;;;;;13633:5:0;13619:10;:19;13590:48;:77;;;-1:-1:-1;13656:11:0;;-1:-1:-1;;;;;13656:11:0;13642:10;:25;13590:77;13568:166;;;;-1:-1:-1;;;13568:166:0;;22340:2:1;13568:166:0;;;22322:21:1;22379:2;22359:18;;;22352:30;22418:34;22398:18;;;22391:62;-1:-1:-1;;;22469:18:1;;;22462:37;22516:19;;13568:166:0;22138:403:1;13568:166:0;19486:17:::1;::::0;::::1;::::0;;:46:::1;;-1:-1:-1::0;19507:20:0;;:25;19486:46:::1;19482:331;;;19612:103;::::0;;;;::::1;::::0;;-1:-1:-1;19612:103:0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;19586:23:0;::::1;::::0;;;:16:::1;:23:::0;;;;;:129;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;19586:129:0::1;19612:103;19586:129:::0;;::::1;::::0;;;::::1;::::0;;;19735:45;;22765:21:1;;;22802:18;;;22795:29;;;22875:20;;22868:49;;;-1:-1:-1;19735:45:0::1;::::0;22856:2:1;22841:18;19735:45:0::1;;;;;;;19795:7;;19482:331;4112:5;19833:38;::::0;::::1;;;19825:86;;;::::0;-1:-1:-1;;;19825:86:0;;23130:2:1;19825:86:0::1;::::0;::::1;23112:21:1::0;23169:2;23149:18;;;23142:30;23208:34;23188:18;;;23181:62;-1:-1:-1;;;23259:18:1;;;23252:33;23302:19;;19825:86:0::1;22928:399:1::0;19825:86:0::1;19925:10;19937:18;19959:25;19977:6;19959:17;:25::i;:::-;20023:94;::::0;;;;::::1;::::0;;;;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;19997:23:0;::::1;-1:-1:-1::0;19997:23:0;;;:16:::1;:23:::0;;;;;:120;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;19997:120:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;20130:15;;;:11:::1;:15:::0;;;;20023:94;;-1:-1:-1;19924:60:0;-1:-1:-1;20130:22:0::1;19924:60:::0;20130:15;:22:::1;:::i;:::-;;20197:2;20190:5;-1:-1:-1::0;;;;;20170:50:0::1;;20201:4;20207:12;20170:50;;;;;;;:::i;:::-;;;;;;;;19471:757;;13745:1;13433:321:::0;19310:918;;;;:::o;32365:656::-;32450:10;32416:14;32433:28;;;:16;:28;;;;;;32480:10;32472:57;;;;-1:-1:-1;;;32472:57:0;;23534:2:1;32472:57:0;;;23516:21:1;23573:2;23553:18;;;23546:30;23612:34;23592:18;;;23585:62;-1:-1:-1;;;23663:18:1;;;23656:32;23705:19;;32472:57:0;23332:398:1;32472:57:0;32617:10;32579:16;32598:30;;;:18;:30;;;;;;;;;;32641:16;:28;;;;;:32;;;32684:34;;;;32762:14;:26;;;;;:36;;32598:30;;32792:6;;32762:36;;32792:6;;32762:36;:::i;:::-;;;;-1:-1:-1;;32862:10:0;32845:28;;;;:16;:28;;;;;:40;;32877:8;;32845:28;:40;;32877:8;;32845:40;:::i;:::-;;;;-1:-1:-1;32930:31:0;;-1:-1:-1;32942:10:0;32954:6;32930:11;:31::i;:::-;32979:34;;949:25:1;;;32994:10:0;;32979:34;;937:2:1;922:18;32979:34:0;;;;;;;32405:616;;32365:656::o;16301:182::-;1552:5;;-1:-1:-1;;;;;1552:5:0;1538:10;:19;1530:64;;;;-1:-1:-1;;;1530:64:0;;;;;;;:::i;:::-;16385:15:::1;:34:::0;;-1:-1:-1;;;;;;16385:34:0::1;-1:-1:-1::0;;;;;16385:34:0;::::1;::::0;;::::1;::::0;;;16435:40:::1;::::0;::::1;::::0;-1:-1:-1;;16435:40:0::1;16301:182:::0;:::o;40943:1993::-;-1:-1:-1;;;;;41250:18:0;;;41068:20;41250:18;;;:11;:18;;;;;;;;41225:43;;;;;;;;;;;;;;;-1:-1:-1;;;41225:43:0;;;;;;;;;;;;;;41068:20;;;;;;;;41283:22;;;41279:47;;41315:1;41318;41321;41324;41307:19;;;;;;;;;;;41279:47;-1:-1:-1;;;;;41440:17:0;;41422:15;41440:17;;;:10;:17;;;;;;;41422:15;41544:11;;;;;:44;;-1:-1:-1;41559:15:0;;-1:-1:-1;;;;;41559:15:0;:29;;41544:44;41540:939;;;42126:15;;42098:63;;-1:-1:-1;;;42098:63:0;;;;;949:25:1;;;41698:14:0;;;;;;;;-1:-1:-1;;;;;42126:15:0;;;;42098:54;;922:18:1;;42098:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41605:556;;;;;;;;;;;;;;;;8307:42;-1:-1:-1;;;;;42194:14:0;:6;-1:-1:-1;;;;;42194:14:0;;42190:278;;42247:11;-1:-1:-1;;;;;42239:20:0;42229:30;;42298:11;-1:-1:-1;;;;;42290:20:0;42278:32;;42190:278;;;-1:-1:-1;;;;;;;42336:14:0;;;42332:136;;42389:11;-1:-1:-1;;;;;42381:20:0;42371:30;;42440:11;-1:-1:-1;;;;;42432:20:0;42420:32;;42332:136;41590:889;;;;41540:939;3956:5;42573:24;3371:4;42573:7;:24;:::i;:::-;42572:41;;;;:::i;:::-;42557:56;-1:-1:-1;3956:5:0;42642:26;3371:4;42642:9;:26;:::i;:::-;42641:43;;;;:::i;:::-;-1:-1:-1;;;;;42781:25:0;;;;;;:18;:25;;;;;;42624:60;;-1:-1:-1;3956:5:0;;42781:42;;3371:4;;42781:42;:::i;:::-;42780:59;;;;:::i;:::-;-1:-1:-1;;;;;42868:27:0;;;;;;:20;:27;;;;;;42765:74;;-1:-1:-1;3956:5:0;;42868:44;;3371:4;;42868:44;:::i;:::-;42867:61;;;;:::i;:::-;42850:78;;41214:1722;;;;40943:1993;;;;;;;;:::o;17965:507::-;18048:10;18016;18029:30;;;:18;:30;;;;;;;18070:60;;;;-1:-1:-1;;;18070:60:0;;9580:2:1;18070:60:0;;;9562:21:1;9619:2;9599:18;;;9592:30;9658:33;9638:18;;;9631:61;9709:18;;18070:60:0;9378:355:1;18070:60:0;18180:10;18143:18;18164:27;;;:15;:27;;;;;18143:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18223:10:0;18245:1;18204:30;;;:18;:30;;;;;;;;:43;;;18258:32;;;;;;;;;;:27;;;:15;:27;;;;;18143:48;;-1:-1:-1;18258:32:0;;-1:-1:-1;18258:32:0;-1:-1:-1;18258:27:0;;-1:-1:-1;18258:32:0;:::i;:::-;-1:-1:-1;18305:22:0;;;;:18;:22;;;;;;18331:10;-1:-1:-1;;;;;18305:22:0;;;:36;18301:104;;18391:1;18358:22;;;:18;:22;;;;;:35;;-1:-1:-1;;;;;;18358:35:0;;;18301:104;18455:2;18443:10;-1:-1:-1;;;;;18422:42:0;;18459:4;18422:42;;;;;;:::i;:::-;;;;;;;;18005:467;;17965:507::o;18554:183::-;18627:7;18648:10;18664:25;18682:6;18664:17;:25::i;:::-;-1:-1:-1;18707:22:0;;;;:18;:22;;;;;;-1:-1:-1;;;;;18707:22:0;;18554:183;-1:-1:-1;;;18554:183:0:o;33818:821::-;33902:10;33864:16;33883:30;;;:18;:30;;;;;;33932:12;33924:54;;;;-1:-1:-1;;;33924:54:0;;24332:2:1;33924:54:0;;;24314:21:1;24371:2;24351:18;;;24344:30;24410:31;24390:18;;;24383:59;24459:18;;33924:54:0;24130:353:1;33924:54:0;34132:10;34115:28;;;;:16;:28;;;;;;:40;-1:-1:-1;34115:40:0;34107:82;;;;-1:-1:-1;;;34107:82:0;;24690:2:1;34107:82:0;;;24672:21:1;24729:2;24709:18;;;24702:30;24768:31;24748:18;;;24741:59;24817:18;;34107:82:0;24488:353:1;34107:82:0;34247:10;34230:28;;;;:16;:28;;;;;:40;;34262:8;;34230:28;:40;;34262:8;;34230:40;:::i;:::-;;;;-1:-1:-1;;34327:10:0;34341:1;34308:30;;;:18;:30;;;;;;;;:34;;;34386:14;:26;;;;;:38;;34416:8;;34341:1;34386:38;;34416:8;;34386:38;:::i;:::-;;;;-1:-1:-1;;34476:10:0;34459:28;;;;:16;:28;;;;;:40;;34491:8;;34459:28;:40;;34491:8;;34459:40;:::i;:::-;;;;-1:-1:-1;34544:33:0;;-1:-1:-1;34556:10:0;34568:8;34544:11;:33::i;:::-;34595:36;;949:25:1;;;34610:10:0;;34595:36;;937:2:1;922:18;34595:36:0;;;;;;;33853:786;33818:821::o;36807:304::-;-1:-1:-1;;;;;36990:18:0;;;36897:21;36990:18;;;:11;:18;;;;;;;;36965:43;;;;;;;;;;;;;;;-1:-1:-1;;;36965:43:0;;;;;;;;;;;37073:30;;;:15;:30;;;;;;37057:46;;36920:27;;36965:43;37073:30;37057:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36954:157;36807:304;;;:::o;43126:642::-;-1:-1:-1;;;;;43349:25:0;;43239:22;43349:25;;;:16;:25;;;;;;;;;43408:14;:23;;;;;;43464:18;:27;;;;;;43522:16;:25;;;;;;;43239:22;;43349:25;;43408:23;43464:27;43616:28;;;:63;;43678:1;43616:63;;;43647:28;43664:11;43647:14;:28;:::i;:::-;43599:80;;43720:9;43705:12;:24;:55;;43759:1;43705:55;;;43732:24;43747:9;43732:12;:24;:::i;:::-;43690:70;;43313:455;;;;43126:642;;;:::o;35616:294::-;-1:-1:-1;;;;;35792:23:0;;35731:19;35792:23;;;:16;:23;;;;;;;;35768:47;;;;;;;;;;;;;;;;;;;;;;;35835:26;;;:11;:26;;;;;35826:35;;35709:20;;35731:19;35768:47;35835:26;35826:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35887:2;:15;;;35872:30;;35757:153;35616:294;;;:::o;1622:236::-;1552:5;;-1:-1:-1;;;;;1552:5:0;1538:10;:19;1530:64;;;;-1:-1:-1;;;1530:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1705:22:0;::::1;1697:73;;;::::0;-1:-1:-1;;;1697:73:0;;25048:2:1;1697:73:0::1;::::0;::::1;25030:21:1::0;25087:2;25067:18;;;25060:30;25126:34;25106:18;;;25099:62;-1:-1:-1;;;25177:18:1;;;25170:36;25223:19;;1697:73:0::1;24846:402:1::0;1697:73:0::1;1807:5;::::0;;1786:37:::1;::::0;-1:-1:-1;;;;;1786:37:0;;::::1;::::0;1807:5;::::1;::::0;1786:37:::1;::::0;::::1;1834:5;:16:::0;;-1:-1:-1;;;;;;1834:16:0::1;-1:-1:-1::0;;;;;1834:16:0;;;::::1;::::0;;;::::1;::::0;;1622:236::o;26760:4704::-;26856:1;26847:6;:10;26839:52;;;;-1:-1:-1;;;26839:52:0;;25455:2:1;26839:52:0;;;25437:21:1;25494:2;25474:18;;;25467:30;25533:31;25513:18;;;25506:59;25582:18;;26839:52:0;25253:353:1;26839:52:0;-1:-1:-1;;;;;26929:18:0;;;26904:22;26929:18;;;:11;:18;;;;;;;;26904:43;;;;;;;;;;;;;;-1:-1:-1;;;26904:43:0;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3956:5:0;27024:23;3371:4;27024:6;:23;:::i;:::-;27023:41;;;;:::i;:::-;27002:62;;3956:5;27097:23;3444:4;27097:6;:23;:::i;:::-;27096:41;;;;:::i;:::-;27075:18;;;:62;3956:5;27170:24;3518:4;27170:6;:24;:::i;:::-;27169:41;;;;:::i;:::-;27148:19;;;:62;;;27254:18;;;;27234:17;;:38;;27254:18;27234:38;:::i;:::-;:60;;;;:::i;:::-;27223:8;;;:71;27305:19;3956:5;27371:22;3591:3;27371:6;:22;:::i;:::-;27370:39;;;;:::i;:::-;27356:53;;27432:11;27420:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;27458:15:0;;27454:227;;27494:12;;-1:-1:-1;;;;;27494:12:0;:26;27490:180;;27553:12;;27541:38;;-1:-1:-1;;;;;27553:12:0;27567:11;27541;:38::i;:::-;27490:180;;;27643:11;27620:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;27490:180:0;3956:5;27727:22;3664:3;27727:6;:22;:::i;:::-;27726:39;;;;:::i;:::-;27712:53;;27788:11;27776:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;27814:15:0;;27810:227;;27850:12;;-1:-1:-1;;;;;27850:12:0;:26;27846:180;;27909:12;;27897:38;;-1:-1:-1;;;;;27909:12:0;27923:11;27897;:38::i;:::-;27846:180;;;27999:11;27976:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;27846:180:0;3956:5;28083:22;3737:3;28083:6;:22;:::i;:::-;28082:39;;;;:::i;:::-;28068:53;;28144:11;28132:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;28170:15:0;;28166:227;;28206:12;;-1:-1:-1;;;;;28206:12:0;:26;28202:180;;28265:12;;28253:38;;-1:-1:-1;;;;;28265:12:0;28279:11;28253;:38::i;:::-;28202:180;;;28355:11;28332:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;28202:180:0;3956:5;28439:22;3810:3;28439:6;:22;:::i;:::-;28438:39;;;;:::i;:::-;28424:53;;28500:11;28488:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;28526:15:0;;28522:227;;28562:12;;-1:-1:-1;;;;;28562:12:0;:26;28558:180;;28621:12;;28609:38;;-1:-1:-1;;;;;28621:12:0;28635:11;28609;:38::i;:::-;28558:180;;;28711:11;28688:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;28558:180:0;3956:5;28795:22;3883:3;28795:6;:22;:::i;:::-;28794:39;;;;:::i;:::-;28780:53;;28856:11;28844:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;28882:15:0;;28878:227;;28918:12;;-1:-1:-1;;;;;28918:12:0;:26;28914:180;;28977:12;;28965:38;;-1:-1:-1;;;;;28977:12:0;28991:11;28965;:38::i;:::-;28914:180;;;29067:11;29044:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;28914:180:0;29156:17;29185:4;:8;;;29176:6;:17;;;;:::i;:::-;29156:37;;29227:9;29204:4;:19;;:32;;;;;;;:::i;:::-;;;-1:-1:-1;29326:17:0;;:21;;;;:50;;-1:-1:-1;29351:11:0;;-1:-1:-1;;;;;29351:25:0;;;29326:50;29322:704;;;29432:43;29450:5;29457:4;:17;;;29432;:43::i;:::-;29411:17;;;29393:82;29394:15;;;29393:82;;;29496:19;29492:336;;29569:15;;;;;29553:11;;-1:-1:-1;;;;;29536:29:0;;;;;:16;:29;;;;;;:48;;29569:15;;29536:29;;:48;;29569:15;;29536:48;:::i;:::-;;;;-1:-1:-1;;29674:15:0;;;;;29658:11;;-1:-1:-1;;;;;29639:31:0;;;;;:18;:31;;;;;;:50;;29674:15;;29639:31;;:50;;29674:15;;29639:50;:::i;:::-;;;;-1:-1:-1;;29757:11:0;;29777:15;;;;;29794:17;;29742:70;;;1159:25:1;;;1200:18;;;1193:34;-1:-1:-1;;;;;29742:70:0;;;;;;;;1132:18:1;29742:70:0;;;;;;;29492:336;29322:704;;;29961:17;;29938:19;;;:40;;;;29961:17;;29938:40;:::i;:::-;;;-1:-1:-1;30013:1:0;29993:21;;29322:704;30124:18;;;;:22;30120:839;;30167:15;;-1:-1:-1;;;;;30167:15:0;:29;30163:785;;30339:15;;30368:18;;;;30410:39;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30410:39:0;-1:-1:-1;;;30410:39:0;;;30331:137;;30313:12;;-1:-1:-1;;;;;30339:15:0;;30368:18;30331:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30312:156;;;30492:7;30487:203;;30607:4;:18;;;30584:4;:19;;:41;;;;;;;:::i;:::-;;;-1:-1:-1;30669:1:0;30648:18;;;:22;30487:203;30198:507;30163:785;;;30715:13;;-1:-1:-1;;;;;30715:13:0;:27;30711:237;;30775:13;;30790:18;;;;30763:46;;-1:-1:-1;;;;;30775:13:0;;30763:11;:46::i;:::-;30711:237;;;30873:4;:18;;;30850:4;:19;;:41;;;;;;;:::i;:::-;;;-1:-1:-1;30931:1:0;30910:18;;;:22;30711:237;31035:19;;;;:23;31031:181;;31092:14;;31075;;-1:-1:-1;;;;;31092:14:0;:53;;31140:5;;-1:-1:-1;;;;;31140:5:0;31092:53;;;31123:14;;-1:-1:-1;;;;;31123:14:0;31092:53;31075:70;;31160:40;31172:6;31180:4;:19;;;31160:11;:40::i;:::-;31060:152;31031:181;31299:17;;31331:15;;;;;31361:17;;;;;31393:18;;;;;31426:19;;;;;31229:227;;26308:25:1;;;26349:18;;;26342:34;;;;26392:18;;;26385:34;;;;26435:18;;26428:34;26478:19;;26471:35;26537:3;26522:19;;26515:35;;;;-1:-1:-1;;;;;31229:227:0;;;;;26295:3:1;26280:19;31229:227:0;;;;;;;26828:4636;;;;26760:4704;;:::o;21285:224::-;21358:6;21368:1;21358:11;21354:24;;21285:224;;:::o;21354:24::-;21389:7;21410:2;-1:-1:-1;;;;;21402:16:0;21426:6;21402:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21388:49;;;21456:2;21448:53;;;;-1:-1:-1;;;21448:53:0;;26973:2:1;21448:53:0;;;26955:21:1;27012:2;26992:18;;;26985:30;27051:34;27031:18;;;27024:62;-1:-1:-1;;;27102:18:1;;;27095:36;27148:19;;21448:53:0;26771:402:1;21448:53:0;21343:166;21285:224;;:::o;22101:4578::-;22205:1;22196:6;:10;22188:52;;;;-1:-1:-1;;;22188:52:0;;25455:2:1;22188:52:0;;;25437:21:1;25494:2;25474:18;;;25467:30;25533:31;25513:18;;;25506:59;25582:18;;22188:52:0;25253:353:1;22188:52:0;-1:-1:-1;;;;;22278:18:0;;;22253:22;22278:18;;;:11;:18;;;;;;;;22253:43;;;;;;;;;;;;;;-1:-1:-1;;;22253:43:0;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3285:5:0;22373:23;2707:4;22373:6;:23;:::i;:::-;22372:41;;;;:::i;:::-;22351:62;;3285:5;22446:23;2778:4;22446:6;:23;:::i;:::-;22445:41;;;;:::i;:::-;22424:18;;;:62;3285:5;22519:24;2851:4;22519:6;:24;:::i;:::-;22518:41;;;;:::i;:::-;22497:19;;;:62;;;22603:18;;;;22583:17;;:38;;22603:18;22583:38;:::i;:::-;:60;;;;:::i;:::-;22572:8;;;:71;22654:19;3285:5;22720:22;2925:3;22720:6;:22;:::i;:::-;22719:39;;;;:::i;:::-;22705:53;;22781:11;22769:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;22807:15:0;;22803:227;;22843:12;;-1:-1:-1;;;;;22843:12:0;:26;22839:180;;22902:12;;22890:38;;-1:-1:-1;;;;;22902:12:0;22916:11;22890;:38::i;:::-;22839:180;;;22992:11;22969:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;22839:180:0;3285:5;23076:22;2997:3;23076:6;:22;:::i;:::-;23075:39;;;;:::i;:::-;23061:53;;23137:11;23125:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;23163:15:0;;23159:227;;23199:12;;-1:-1:-1;;;;;23199:12:0;:26;23195:180;;23258:12;;23246:38;;-1:-1:-1;;;;;23258:12:0;23272:11;23246;:38::i;:::-;23195:180;;;23348:11;23325:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;23195:180:0;3285:5;23432:22;3069:3;23432:6;:22;:::i;:::-;23431:39;;;;:::i;:::-;23417:53;;23493:11;23481:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;23519:15:0;;23515:227;;23555:12;;-1:-1:-1;;;;;23555:12:0;:26;23551:180;;23614:12;;23602:38;;-1:-1:-1;;;;;23614:12:0;23628:11;23602;:38::i;:::-;23551:180;;;23704:11;23681:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;23551:180:0;3285:5;23788:22;3141:3;23788:6;:22;:::i;:::-;23787:39;;;;:::i;:::-;23773:53;;23849:11;23837:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;23875:15:0;;23871:227;;23911:12;;-1:-1:-1;;;;;23911:12:0;:26;23907:180;;23970:12;;23958:38;;-1:-1:-1;;;;;23970:12:0;23984:11;23958;:38::i;:::-;23907:180;;;24060:11;24037:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;23907:180:0;3285:5;24144:22;3213:3;24144:6;:22;:::i;:::-;24143:39;;;;:::i;:::-;24129:53;;24205:11;24193:4;:8;;:23;;;;;;;:::i;:::-;;;-1:-1:-1;24231:15:0;;24227:227;;24267:12;;-1:-1:-1;;;;;24267:12:0;:26;24263:180;;24326:12;;24314:38;;-1:-1:-1;;;;;24326:12:0;24340:11;24314;:38::i;:::-;24263:180;;;24416:11;24393:4;:19;;:34;;;;;;;:::i;:::-;;;-1:-1:-1;24263:180:0;24505:17;24534:4;:8;;;24525:6;:17;;;;:::i;:::-;24505:37;;24576:9;24553:4;:19;;:32;;;;;;;:::i;:::-;;;-1:-1:-1;24675:17:0;;:21;;;;:50;;-1:-1:-1;24700:11:0;;-1:-1:-1;;;;;24700:25:0;;;24675:50;24671:570;;;24781:43;24799:5;24806:4;:17;;;24781;:43::i;:::-;24760:17;;;24742:82;24743:15;;;24742:82;;;24845:19;24841:202;;24918:15;;;;;24902:11;;-1:-1:-1;;;;;24885:29:0;;;;;:16;:29;;;;;;:48;;24918:15;;24885:29;;:48;;24918:15;;24885:48;:::i;12136:869::-;12338:8;;12235:10;;12247:18;;12306:6;;12365:7;12357:48;;;;-1:-1:-1;;;12357:48:0;;27380:2:1;12357:48:0;;;27362:21:1;27419:2;27399:18;;;27392:30;27458;27438:18;;;27431:58;27506:18;;12357:48:0;27178:352:1;12357:48:0;12450:4;;12418:13;;-1:-1:-1;;;12458:17:0;12450:1;;12418:13;;12450:4;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;12450:4:0;:25;12446:137;;12513:1;12507:3;:7;12499:48;;;;-1:-1:-1;;;12499:48:0;;27380:2:1;12499:48:0;;;27362:21:1;27419:2;27399:18;;;27392:30;27458;27438:18;;;27431:58;27506:18;;12499:48:0;27178:352:1;12499:48:0;-1:-1:-1;12570:1:0;12446:137;12595:14;12622:11;12628:5;12622:3;:11;:::i;:::-;12612:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12612:22:0;-1:-1:-1;12595:39:0;-1:-1:-1;12662:5:0;12645:266;12673:3;12669:1;:7;12645:266;;;12698:7;12714:1;12716;12714:4;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;12743:2:0;12738:7;;;;;:18;;;12754:2;12749:1;:7;;;;12738:18;12734:166;;;12799:6;:1;12803:2;12799:6;:::i;:::-;12792:14;;12777:1;12779:9;12783:5;12779:1;:9;:::i;:::-;12777:12;;;;;;;;:::i;:::-;;;;:29;-1:-1:-1;;;;;12777:29:0;;;;;;;;;12734:166;;;12880:1;12882;12880:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;12880:4:0;12865:1;12867:9;12871:5;12867:1;:9;:::i;:::-;12865:12;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;12865:19:0;;;;;;;;;12734:166;-1:-1:-1;12678:3:0;;12645:266;;;;12937:1;12923:16;;12994:1;12965:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;12955:42;;;;;;12950:47;;12272:733;;;;12136:869;;;:::o;20532:745::-;-1:-1:-1;;;;;20752:23:0;;20639:18;20752:23;;;:16;:23;;;;;;;;20728:47;;;;;;;;;;;;;;;;;;;;;;;;;;;20705:12;;20639:18;20829:17;;;:37;;-1:-1:-1;20850:16:0;;20829:37;:61;;;-1:-1:-1;20870:15:0;;;;:20;;;20829:61;20825:116;;;-1:-1:-1;20927:1:0;;-1:-1:-1;20907:22:0;;-1:-1:-1;20907:22:0;20825:116;20984:15;;;;4112:5;;20969:30;;20968:57;20969:30;:12;:30;:::i;:::-;20968:57;;;;:::i;:::-;20953:72;;21040:12;21056:1;21040:17;21036:72;;-1:-1:-1;21094:1:0;;-1:-1:-1;21074:22:0;;-1:-1:-1;21074:22:0;21036:72;21133:27;21148:12;21133;:27;:::i;:::-;-1:-1:-1;;;;;21171:22:0;;;;;;:15;:22;;;;;;;;:26;;;;;;;;:42;;21120:40;;-1:-1:-1;21201:12:0;;21171:26;;:22;:42;;21201:12;;21171:42;:::i;:::-;;;;-1:-1:-1;;21231:38:0;;949:25:1;;;21252:2:0;;-1:-1:-1;;;;;21231:38:0;;;;;937:2:1;922:18;21231:38:0;;;;;;;20681:596;;20532:745;;;;;;:::o;415:131:1:-;-1:-1:-1;;;;;490:31:1;;480:42;;470:70;;536:1;533;526:12;551:247;610:6;663:2;651:9;642:7;638:23;634:32;631:52;;;679:1;676;669:12;631:52;718:9;705:23;737:31;762:5;737:31;:::i;:::-;787:5;551:247;-1:-1:-1;;;551:247:1:o;1238:289::-;1280:3;1318:5;1312:12;1345:6;1340:3;1333:19;1401:6;1394:4;1387:5;1383:16;1376:4;1371:3;1367:14;1361:47;1453:1;1446:4;1437:6;1432:3;1428:16;1424:27;1417:38;1516:4;1509:2;1505:7;1500:2;1492:6;1488:15;1484:29;1479:3;1475:39;1471:50;1464:57;;;1238:289;;;;:::o;1532:806::-;-1:-1:-1;;;;;1867:32:1;;1849:51;;1936:3;1931:2;1916:18;;1909:31;;;-1:-1:-1;;1963:46:1;;1989:19;;1981:6;1963:46;:::i;:::-;2057:9;2049:6;2045:22;2040:2;2029:9;2025:18;2018:50;2085:33;2111:6;2103;2085:33;:::i;:::-;-1:-1:-1;;;;;2154:32:1;;;;2149:2;2134:18;;2127:60;-1:-1:-1;;2236:6:1;2224:19;;;;2218:3;2203:19;;2196:48;2174:3;2260:19;;2253:35;;;;2319:3;2304:19;;;2297:35;2077:41;1532:806;-1:-1:-1;;;1532:806:1:o;2343:388::-;2411:6;2419;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2527:9;2514:23;2546:31;2571:5;2546:31;:::i;:::-;2596:5;-1:-1:-1;2653:2:1;2638:18;;2625:32;2666:33;2625:32;2666:33;:::i;:::-;2718:7;2708:17;;;2343:388;;;;;:::o;2736:1097::-;2849:6;2857;2865;2873;2881;2889;2897;2950:3;2938:9;2929:7;2925:23;2921:33;2918:53;;;2967:1;2964;2957:12;2918:53;3006:9;2993:23;3025:31;3050:5;3025:31;:::i;:::-;3075:5;-1:-1:-1;3132:2:1;3117:18;;3104:32;3145:33;3104:32;3145:33;:::i;:::-;3197:7;-1:-1:-1;3256:2:1;3241:18;;3228:32;3269:33;3228:32;3269:33;:::i;:::-;3321:7;-1:-1:-1;3380:2:1;3365:18;;3352:32;3393:33;3352:32;3393:33;:::i;:::-;3445:7;-1:-1:-1;3504:3:1;3489:19;;3476:33;3518;3476;3518;:::i;:::-;3570:7;-1:-1:-1;3629:3:1;3614:19;;3601:33;3643;3601;3643;:::i;:::-;3695:7;-1:-1:-1;3754:3:1;3739:19;;3726:33;3768;3726;3768;:::i;:::-;3820:7;3810:17;;;2736:1097;;;;;;;;;;:::o;4020:315::-;4088:6;4096;4149:2;4137:9;4128:7;4124:23;4120:32;4117:52;;;4165:1;4162;4155:12;4117:52;4204:9;4191:23;4223:31;4248:5;4223:31;:::i;:::-;4273:5;4325:2;4310:18;;;;4297:32;;-1:-1:-1;;;4020:315:1:o;4340:220::-;4489:2;4478:9;4471:21;4452:4;4509:45;4550:2;4539:9;4535:18;4527:6;4509:45;:::i;4565:127::-;4626:10;4621:3;4617:20;4614:1;4607:31;4657:4;4654:1;4647:15;4681:4;4678:1;4671:15;4697:726;4740:5;4793:3;4786:4;4778:6;4774:17;4770:27;4760:55;;4811:1;4808;4801:12;4760:55;4851:6;4838:20;4881:18;4873:6;4870:30;4867:56;;;4903:18;;:::i;:::-;4952:2;4946:9;5044:2;5006:17;;-1:-1:-1;;5002:31:1;;;5035:2;4998:40;4994:54;4982:67;;5079:18;5064:34;;5100:22;;;5061:62;5058:88;;;5126:18;;:::i;:::-;5162:2;5155:22;5186;;;5227:19;;;5248:4;5223:30;5220:39;-1:-1:-1;5217:59:1;;;5272:1;5269;5262:12;5217:59;5336:6;5329:4;5321:6;5317:17;5310:4;5302:6;5298:17;5285:58;5391:1;5363:19;;;5384:4;5359:30;5352:41;;;;5367:6;4697:726;-1:-1:-1;;;4697:726:1:o;5428:322::-;5497:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:52;;;5566:1;5563;5556:12;5518:52;5606:9;5593:23;5639:18;5631:6;5628:30;5625:50;;;5671:1;5668;5661:12;5625:50;5694;5736:7;5727:6;5716:9;5712:22;5694:50;:::i;:::-;5684:60;5428:322;-1:-1:-1;;;;5428:322:1:o;5755:226::-;5814:6;5867:2;5855:9;5846:7;5842:23;5838:32;5835:52;;;5883:1;5880;5873:12;5835:52;-1:-1:-1;5928:23:1;;5755:226;-1:-1:-1;5755:226:1:o;5986:446::-;6217:3;6206:9;6199:22;6180:4;6238:46;6279:3;6268:9;6264:19;6256:6;6238:46;:::i;:::-;6332:6;6320:19;;;;6315:2;6300:18;;6293:47;-1:-1:-1;6371:2:1;6356:18;;6349:34;;;;6414:2;6399:18;;;6392:34;6230:54;5986:446;-1:-1:-1;5986:446:1:o;6437:625::-;6523:6;6531;6539;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:31;6691:5;6666:31;:::i;:::-;6716:5;-1:-1:-1;6772:2:1;6757:18;;6744:32;6799:18;6788:30;;6785:50;;;6831:1;6828;6821:12;6785:50;6854;6896:7;6887:6;6876:9;6872:22;6854:50;:::i;:::-;6844:60;;;6956:2;6945:9;6941:18;6928:32;7004:6;6995:7;6991:20;6982:7;6979:33;6969:61;;7026:1;7023;7016:12;6969:61;7049:7;7039:17;;;6437:625;;;;;:::o;7835:317::-;-1:-1:-1;;;;;8012:32:1;;7994:51;;8081:2;8076;8061:18;;8054:30;;;-1:-1:-1;;8101:45:1;;8127:18;;8119:6;8101:45;:::i;8421:302::-;8596:2;8585:9;8578:21;8559:4;8616:45;8657:2;8646:9;8642:18;8634:6;8616:45;:::i;:::-;8608:53;;8709:6;8701;8697:19;8692:2;8681:9;8677:18;8670:47;8421:302;;;;;:::o;10140:127::-;10201:10;10196:3;10192:20;10189:1;10182:31;10232:4;10229:1;10222:15;10256:4;10253:1;10246:15;10272:125;10337:9;;;10358:10;;;10355:36;;;10371:18;;:::i;:::-;10272:125;;;;:::o;10402:380::-;10481:1;10477:12;;;;10524;;;10545:61;;10599:4;10591:6;10587:17;10577:27;;10545:61;10652:2;10644:6;10641:14;10621:18;10618:38;10615:161;;10698:10;10693:3;10689:20;10686:1;10679:31;10733:4;10730:1;10723:15;10761:4;10758:1;10751:15;10615:161;;10402:380;;;:::o;10787:356::-;10989:2;10971:21;;;11008:18;;;11001:30;11067:34;11062:2;11047:18;;11040:62;11134:2;11119:18;;10787:356::o;14713:128::-;14780:9;;;14801:11;;;14798:37;;;14815:18;;:::i;15207:138::-;15286:13;;15308:31;15286:13;15308:31;:::i;:::-;15207:138;;;:::o;15350:165::-;15428:13;;15481:8;15470:20;;15460:31;;15450:59;;15505:1;15502;15495:12;15520:164;15597:13;;15650:1;15639:20;;;15629:31;;15619:59;;15674:1;15671;15664:12;15689:192;15768:13;;-1:-1:-1;;;;;15810:46:1;;15800:57;;15790:85;;15871:1;15868;15861:12;15886:1290;16049:6;16057;16065;16073;16081;16089;16097;16105;16113;16121;16129:7;16138;16192:3;16180:9;16171:7;16167:23;16163:33;16160:53;;;16209:1;16206;16199:12;16160:53;16241:9;16235:16;16291:26;16284:5;16280:38;16273:5;16270:49;16260:77;;16333:1;16330;16323:12;16260:77;16356:5;-1:-1:-1;16380:49:1;16425:2;16410:18;;16380:49;:::i;:::-;16370:59;;16448:49;16493:2;16482:9;16478:18;16448:49;:::i;:::-;16438:59;;16516:49;16561:2;16550:9;16546:18;16516:49;:::i;:::-;16506:59;;16584:49;16628:3;16617:9;16613:19;16584:49;:::i;:::-;16574:59;;16652:48;16695:3;16684:9;16680:19;16652:48;:::i;:::-;16642:58;;16719:48;16762:3;16751:9;16747:19;16719:48;:::i;:::-;16709:58;;16786:50;16831:3;16820:9;16816:19;16786:50;:::i;:::-;16902:3;16887:19;;16881:26;16999:3;16984:19;;16978:26;16776:60;;-1:-1:-1;16881:26:1;-1:-1:-1;16978:26:1;-1:-1:-1;17050:50:1;17095:3;17080:19;;17050:50;:::i;:::-;17039:61;;17120:50;17165:3;17154:9;17150:19;17120:50;:::i;:::-;17109:61;;15886:1290;;;;;;;;;;;;;;:::o;17950:540::-;18173:13;;18155:32;;18247:4;18235:17;;;18229:24;-1:-1:-1;;;;;18225:50:1;18203:20;;;18196:80;18336:4;18324:17;;;18318:24;-1:-1:-1;;;;;18314:65:1;;;18292:20;;;18285:95;;;;18440:4;18428:17;;;18422:24;18418:65;18396:20;;;18389:95;;;;18142:3;18127:19;;17950:540::o;18495:343::-;18574:6;18582;18635:2;18623:9;18614:7;18610:23;18606:32;18603:52;;;18651:1;18648;18641:12;18603:52;-1:-1:-1;;18696:16:1;;18802:2;18787:18;;;18781:25;18696:16;;18781:25;;-1:-1:-1;18495:343:1:o;19735:518::-;19837:2;19832:3;19829:11;19826:421;;;19873:5;19870:1;19863:16;19917:4;19914:1;19904:18;19987:2;19975:10;19971:19;19968:1;19964:27;19958:4;19954:38;20023:4;20011:10;20008:20;20005:47;;;-1:-1:-1;20046:4:1;20005:47;20101:2;20096:3;20092:12;20089:1;20085:20;20079:4;20075:31;20065:41;;20156:81;20174:2;20167:5;20164:13;20156:81;;;20233:1;20219:16;;20200:1;20189:13;20156:81;;20429:1299;20555:3;20549:10;20582:18;20574:6;20571:30;20568:56;;;20604:18;;:::i;:::-;20633:97;20723:6;20683:38;20715:4;20709:11;20683:38;:::i;:::-;20677:4;20633:97;:::i;:::-;20779:4;20810:2;20799:14;;20827:1;20822:649;;;;21515:1;21532:6;21529:89;;;-1:-1:-1;21584:19:1;;;21578:26;21529:89;-1:-1:-1;;20386:1:1;20382:11;;;20378:24;20374:29;20364:40;20410:1;20406:11;;;20361:57;21631:81;;20792:930;;20822:649;19682:1;19675:14;;;19719:4;19706:18;;-1:-1:-1;;20858:20:1;;;20976:222;20990:7;20987:1;20984:14;20976:222;;;21072:19;;;21066:26;21051:42;;21179:4;21164:20;;;;21132:1;21120:14;;;;21006:12;20976:222;;;20980:3;21226:6;21217:7;21214:19;21211:201;;;21287:19;;;21281:26;-1:-1:-1;;21370:1:1;21366:14;;;21382:3;21362:24;21358:37;21354:42;21339:58;21324:74;;21211:201;-1:-1:-1;;;;21458:1:1;21442:14;;;21438:22;21425:36;;-1:-1:-1;20429:1299:1:o;23735:168::-;23808:9;;;23839;;23856:15;;;23850:22;;23836:37;23826:71;;23877:18;;:::i;23908:217::-;23948:1;23974;23964:132;;24018:10;24013:3;24009:20;24006:1;23999:31;24053:4;24050:1;24043:15;24081:4;24078:1;24071:15;23964:132;-1:-1:-1;24110:9:1;;23908:217::o;25611:211::-;25652:3;25690:5;25684:12;25734:6;25727:4;25720:5;25716:16;25711:3;25705:36;25796:1;25760:16;;25785:13;;;-1:-1:-1;25760:16:1;;25611:211;-1:-1:-1;25611:211:1:o;25827:189::-;25956:3;25981:29;26006:3;25998:6;25981:29;:::i;27535:127::-;27596:10;27591:3;27587:20;27584:1;27577:31;27627:4;27624:1;27617:15;27651:4;27648:1;27641:15;27667:148;27755:4;27734:12;;;27748;;;27730:31;;27773:13;;27770:39;;;27789:18;;:::i;27820:330::-;-1:-1:-1;;;28075:3:1;28068:23;28050:3;28107:37;28141:1;28136:3;28132:11;28124:6;28107:37;:::i
Swarm Source
ipfs://ab549d56225fdd57c073c00152121c6866fd080d9fc8efd934543f86f9cb3097
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.94
Net Worth in MON
Token Allocations
MON
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| MONAD | 100.00% | $0.019197 | 49.1003 | $0.942559 |
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.