S Price: $0.587539 (-1.58%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

6

Total Transfers

-

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FARMER

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-03
*/

/**
 *Submitted for verification at SonicScan.org on 2025-03-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

// OpenZeppelin Contracts v5.0.1

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 */
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "R1");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert("O1");
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "O2");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "O1");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "E1");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "E2");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "E3");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "E4");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= amount, "E5");
        unchecked {
            _approve(owner, spender, currentAllowance - amount);
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        // Boş implementasyon
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        // Boş implementasyon
    }
}

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    // Mevcut fonksiyonlar
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    // Yeni eklenen fonksiyonlar
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IMetropolisFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Pair interface'ini de ekleyelim
interface IMetropolisPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 private constant TAX_RATE = 5; // 5%
    uint256 private constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 private constant AIRDROP_TAX = 25; // 2.5%
    uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing
    uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped
    uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance
    uint256 private constant TREASURY_PERCENTAGE = 25; // 25% of Sonic tokens to treasury
    uint256 private constant HOLDERS_PERCENTAGE = 75; // 75% of Sonic tokens to holders

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public metropolisFactory;
    address public sonicToken;
    address public liquidityPair;
    address public treasuryWallet;
    bool public treasuryApproved; // Treasury wallet'ın onay durumu

    // Holder tracking
    mapping(address => bool) public isHolder;
    address[] public holders;

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);
    event TreasuryTransfer(uint256 amount);
    event SwapFailed(string reason);
    event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop);
    event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived);
    event TreasuryWalletUpdated(address oldTreasury, address newTreasury);
    event LiquidityAddFailed(string reason);
    event AirdropFailed(string reason);
    event ApprovalRefreshed(address token, address spender, uint256 amount);
    event TreasuryApprovalGranted(address treasury);
    event AutoTransferFromTreasury(uint256 amount);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;
    bool private _initialized;
    bool private _inSwap;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3;
        address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0;
        address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
        address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175;

        require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1");

        metropolisRouter = IMetropolisRouter(_metropolisRouter);
        metropolisFactory = IMetropolisFactory(_metropolisFactory);
        sonicToken = _sonicToken;
        treasuryWallet = _treasuryWallet;

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "F2");
        _initialized = true;

        // Try to get existing pair first
        liquidityPair = metropolisFactory.getPair(address(this), sonicToken);
        
        // If pair doesn't exist, create it
        if (liquidityPair == address(0)) {
            liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        }
        
        require(liquidityPair != address(0), "F3");

        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4");
        IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
        IERC20(address(this)).approve(liquidityPair, type(uint256).max);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Vergi işleme mantığı
        if (
            !_inSwap && 
            from != owner() && 
            to != owner() && 
            from != address(this) && 
            to == liquidityPair
        ) {
            // Vergi hesapla
            uint256 taxAmount = amount * TAX_RATE / 100;
            
            if (taxAmount > 0) {
                // Vergiyi likidite ve airdrop için ayır
                uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100;
                uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100;
                
                // Vergi miktarını ana miktardan düş
                uint256 transferAmount = amount - taxAmount;
                
                // Vergiyi kontrata aktar
                super._transfer(from, address(this), taxAmount);
                
                // Kalan miktarı alıcıya aktar
                super._transfer(from, to, transferAmount);
                
                // Bekleyen miktarları güncelle
                _pendingLiquidityTokens += liquidityTokens;
                _pendingAirdropTokens += airdropTokens;
                
                // Eğer yeterli miktarda token biriktiysek işlemi başlat
                if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) {
                    try this.processLiquidityAndAirdrop() {} catch {}
                }
                
                // Holder durumunu güncelle
                _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
                _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
                
                return;
            }
        }
        
        // Normal transfer
        super._transfer(from, to, amount);
        
        // Holder durumunu güncelle
        _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
        _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
    }

    function _updateHolder(address account, bool isHolderStatus) private {
        if (account != liquidityPair && account != address(this)) {
            if (isHolderStatus && !isHolder[account]) {
                isHolder[account] = true;
                holders.push(account);
            } else if (!isHolderStatus && isHolder[account]) {
                isHolder[account] = false;
                
                // Remove from holders array
                for (uint256 i = 0; i < holders.length; i++) {
                    if (holders[i] == account) {
                        holders[i] = holders[holders.length - 1];
                        holders.pop();
                        break;
                    }
                }
            }
        }
    }

    function processLiquidityAndAirdrop() external nonReentrant {
        require(!_inSwap, "AP");
        _inSwap = true;
        
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        
        if (tokensForLiquidity == 0 && tokensForAirdrop == 0) {
            _inSwap = false;
            return;
        }
        
        emit ProcessStarted(tokensForLiquidity, tokensForAirdrop);
        
        // Reset pending amounts
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;
        
        // Refresh approvals
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
        
        // Process swap
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop;
        uint256 sonicReceived = _processSwap(totalTokensToSwap);
        
        if (sonicReceived == 0) {
            _inSwap = false;
            return;
        }
        
        // Kontrol et: Eğer Sonic token kontrata değil treasury'ye gönderildiyse
        uint256 sonicBalance = IERC20(sonicToken).balanceOf(address(this));
        if (sonicBalance < sonicReceived) {
            // Treasury'den otomatik transfer dene (eğer onay verilmişse)
            if (treasuryApproved) {
                uint256 sonicInTreasury = IERC20(sonicToken).balanceOf(treasuryWallet);
                if (sonicInTreasury > 0) {
                    try IERC20(sonicToken).transferFrom(treasuryWallet, address(this), sonicInTreasury) {
                        emit AutoTransferFromTreasury(sonicInTreasury);
                        sonicBalance = IERC20(sonicToken).balanceOf(address(this));
                        sonicReceived = sonicInTreasury;
                    } catch {
                        emit SwapFailed("ATF");
                        _inSwap = false;
                        return;
                    }
                }
            } else {
                emit SwapFailed("TNA");
                _inSwap = false;
                return;
            }
        }
        
        // Calculate amounts
        uint256 sonicForLiquidity = sonicReceived * tokensForLiquidity / totalTokensToSwap;
        uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity;
        
        // Process liquidity
        if (sonicForLiquidity > 0) {
            _processLiquidity(tokensForLiquidity, sonicForLiquidity);
        }
        
        // Process airdrop
        if (sonicForAirdrop > 0) {
            uint256 sonicForTreasury = sonicForAirdrop * TREASURY_PERCENTAGE / 100;
            uint256 sonicForHolders = sonicForAirdrop - sonicForTreasury;
            
            _processTreasuryTransfer(sonicForTreasury);
            _processAirdrop(sonicForHolders);
        }
        
        _inSwap = false;
    }

    function _processSwap(uint256 tokensToSwap) private returns (uint256) {
        if (tokensToSwap == 0) return 0;

        _approve(address(this), address(metropolisRouter), tokensToSwap);

        // Swap için path oluştur
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken; // Bu aslında WETH (WSonic)

        uint256 sonicBefore = IERC20(sonicToken).balanceOf(address(this));

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this), // Kontrata gönder
            block.timestamp + 300
        ) {
            uint256 sonicAfter = IERC20(sonicToken).balanceOf(address(this));
            uint256 sonicReceived = sonicAfter - sonicBefore;
            emit SwapSuccessful(tokensToSwap, sonicReceived);
            return sonicReceived;
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("E");
            return 0;
        }
    }

    function _processLiquidity(uint256 tokensForLiquidity, uint256 sonicForLiquidity) private {
        if (tokensForLiquidity == 0 || sonicForLiquidity == 0) {
            return;
        }

        // Approve Sonic token for router
        IERC20(sonicToken).approve(address(metropolisRouter), sonicForLiquidity);
        // Approve this token for router
        _approve(address(this), address(metropolisRouter), tokensForLiquidity);

        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokensForLiquidity,
            sonicForLiquidity,
            tokensForLiquidity * (100 - MAX_SLIPPAGE) / 100,
            sonicForLiquidity * (100 - MAX_SLIPPAGE) / 100,
            address(this),
            block.timestamp + 300
        ) {
            emit LiquidityAdded(tokensForLiquidity, sonicForLiquidity);
        } catch Error(string memory reason) {
            emit LiquidityAddFailed(reason);
        } catch {
            emit LiquidityAddFailed("E");
        }
    }

    function _processTreasuryTransfer(uint256 sonicAmount) private {
        if (sonicAmount == 0 || treasuryWallet == address(0)) return;
        
        try IERC20(sonicToken).transfer(treasuryWallet, sonicAmount) {
            emit TreasuryTransfer(sonicAmount);
        } catch {
            emit AirdropFailed("TTF");
        }
    }

    function _processAirdrop(uint256 sonicAmount) private {
        if (sonicAmount == 0 || holders.length == 0) {
            return;
        }

        uint256 sonicPerHolder = sonicAmount / holders.length;
        
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] != address(0) && holders[i] != address(this) && holders[i] != liquidityPair) {
                try IERC20(sonicToken).transfer(holders[i], sonicPerHolder) {
                    // Transfer başarılı
                } catch Error(string memory reason) {
                    emit AirdropFailed(reason);
                } catch {
                    emit AirdropFailed("E");
                }
            }
        }
    }

    // View functions
    function getHolderCount() external view returns (uint256) {
        return holders.length;
    }
    
    function getHolders() external view returns (address[] memory) {
        return holders;
    }

    // Initial liquidity function (must be called by owner with ETH)
    function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner {
        require(msg.value > 0, "NE");
        require(tokenAmount > 0, "NT");
        
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "IB"
        );

        _approve(address(this), address(metropolisRouter), tokenAmount);

        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            msg.sender,
            block.timestamp
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            revert("FL");
        }

        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            payable(msg.sender).transfer(remainingETH);
        }
    }

    function setRouter(address _router) external onlyOwner {
        require(_router != address(0), "IR");
        metropolisRouter = IMetropolisRouter(_router);
    }

    function rescueTokens(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "CF");
        IERC20(_token).transfer(owner(), _amount);
    }

    // View functions for pending amounts
    function getPendingLiquidityTokens() external view returns (uint256) {
        return _pendingLiquidityTokens;
    }

    function getPendingAirdropTokens() external view returns (uint256) {
        return _pendingAirdropTokens;
    }

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP");
        require(holders.length > 0, "NH");
        try this.processLiquidityAndAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
        }
    }

    // Router için onayları yenile
    function refreshAllApprovals() external onlyOwner {
        // Router için onayları yenile
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        // Sonic token için onayları yenile
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {
            emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max);
        } catch {}
        
        // Likidite çifti için onayları yenile
        if (liquidityPair != address(0)) {
            try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {
                emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max);
            } catch {}
            
            try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {
                emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max);
            } catch {}
        }
    }

    // Treasury wallet'ın kontrata Sonic token transferi için onay vermesi
    function approveTreasuryToContract() external {
        require(msg.sender == treasuryWallet, "OT");
        require(sonicToken != address(0), "NS");
        
        // Treasury wallet'ın kontrata Sonic token transferi için onay vermesi
        try IERC20(sonicToken).approve(address(this), type(uint256).max) {
            treasuryApproved = true;
            emit TreasuryApprovalGranted(treasuryWallet);
        } catch Error(string memory reason) {
            revert(string(abi.encodePacked("AF: ", reason)));
        } catch {
            revert("AF");
        }
    }

    // Set treasury wallet (only owner)
    function setTreasuryWallet(address _treasuryWallet) external onlyOwner {
        require(_treasuryWallet != address(0), "IT");
        address oldTreasury = treasuryWallet;
        treasuryWallet = _treasuryWallet;
        treasuryApproved = false; // Yeni treasury wallet için onay durumunu sıfırla
        emit TreasuryWalletUpdated(oldTreasury, _treasuryWallet);
    }

    // Treasury'den kontrata Sonic token transferi (acil durumlar için)
    function transferSonicFromTreasury(uint256 amount) external onlyOwner {
        require(treasuryWallet != address(0), "NT");
        require(amount > 0, "NA");
        
        // Onay verildikten sonra transferi gerçekleştir
        try IERC20(sonicToken).transferFrom(treasuryWallet, address(this), amount) {
            emit TreasuryTransfer(amount);
        } catch Error(string memory reason) {
            revert(string(abi.encodePacked("TF: ", reason)));
        } catch {
            revert("TF");
        }
    }

    // Manuel olarak swap işlemini gerçekleştir (acil durumlar için)
    function manualSwap(uint256 amount) external onlyOwner {
        require(amount > 0, "NA");
        require(IERC20(address(this)).balanceOf(address(this)) >= amount, "IB");
        
        uint256 sonicReceived = _processSwap(amount);
        
        if (sonicReceived > 0) {
            emit SwapSuccessful(amount, sonicReceived);
        }
    }

    // Manuel olarak likidite ve airdrop işlemlerini gerçekleştir (acil durumlar için)
    function manualLiquidityAndAirdrop(uint256 farmerAmount, uint256 sonicAmount) external onlyOwner {
        require(farmerAmount > 0 && sonicAmount > 0, "NA");
        require(IERC20(address(this)).balanceOf(address(this)) >= farmerAmount, "IF");
        require(IERC20(sonicToken).balanceOf(address(this)) >= sonicAmount, "IS");
        
        // Likidite ve airdrop için Sonic token miktarlarını hesapla
        uint256 sonicForLiquidity = sonicAmount * LIQUIDITY_TAX / (LIQUIDITY_TAX + AIRDROP_TAX);
        uint256 sonicForAirdrop = sonicAmount - sonicForLiquidity;
        
        // Likidite ve airdrop için FARMER token miktarlarını hesapla
        uint256 farmerForLiquidity = farmerAmount * LIQUIDITY_TAX / (LIQUIDITY_TAX + AIRDROP_TAX);
        
        // Likidite ekle
        if (farmerForLiquidity > 0 && sonicForLiquidity > 0) {
            _processLiquidity(farmerForLiquidity, sonicForLiquidity);
        }
        
        // Airdrop işlemini gerçekleştir
        if (sonicForAirdrop > 0) {
            uint256 sonicForTreasury = sonicForAirdrop * TREASURY_PERCENTAGE / 100;
            uint256 sonicForHolders = sonicForAirdrop - sonicForTreasury;
            
            _processTreasuryTransfer(sonicForTreasury);
            _processAirdrop(sonicForHolders);
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoTransferFromTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasuryApprovalGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveTreasuryToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"farmerAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferSonicFromTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b61342180620004186000396000f3fe6080604052600436106102085760003560e01c80637ac84fc111610118578063a9059cbb116100a0578063d4d7b19a1161006f578063d4d7b19a146105b6578063dd62ed3e146105e6578063ed9cacfe1461062c578063f2fde38b14610641578063fd7c9fab1461066157600080fd5b8063a9059cbb14610535578063b03b06b314610555578063b70143c914610576578063c0d786551461059657600080fd5b80638da5cb5b116100e75780638da5cb5b146104a25780638e7c3ec5146104c05780638f7f0e64146104e057806395d89b4114610500578063a8602fea1461051557600080fd5b80637ac84fc1146104435780637ff793d314610458578063808a54571461046d5780638129fc1c1461048d57600080fd5b806341a22cc21161019b5780635d76b04c1161016a5780635d76b04c146103a15780635fe8e7cc146103b657806362b6327a146103d857806370a08231146103f85780637136982b1461042e57600080fd5b806341a22cc21461032e578063461a3a95146103415780634626402b14610361578063573761981461038157600080fd5b806323b872dd116101d757806323b872dd146102a35780632a11ced0146102c3578063313ce567146102fb578063397883d21461031757600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610681565b6040516102369190612ed1565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e610279366004612f19565b610713565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b5061027e6102be366004612f45565b61072d565b3480156102cf57600080fd5b506102e36102de366004612f86565b610751565b6040516001600160a01b039091168152602001610236565b34801561030757600080fd5b5060405160128152602001610236565b34801561032357600080fd5b5061032c61077b565b005b61032c61033c366004612f86565b610899565b34801561034d57600080fd5b506009546102e3906001600160a01b031681565b34801561036d57600080fd5b50600b546102e3906001600160a01b031681565b34801561038d57600080fd5b5061032c61039c366004612f19565b610aff565b3480156103ad57600080fd5b50600f54610250565b3480156103c257600080fd5b506103cb610bc6565b6040516102369190612fe3565b3480156103e457600080fd5b506007546102e3906001600160a01b031681565b34801561040457600080fd5b50610250610413366004612ffd565b6001600160a01b031660009081526020819052604090205490565b34801561043a57600080fd5b50600d54610250565b34801561044f57600080fd5b5061032c610c27565b34801561046457600080fd5b5061032c61114a565b34801561047957600080fd5b50600a546102e3906001600160a01b031681565b34801561049957600080fd5b5061032c611316565b3480156104ae57600080fd5b506006546001600160a01b03166102e3565b3480156104cc57600080fd5b5061032c6104db36600461301a565b61168c565b3480156104ec57600080fd5b5061032c6104fb366004612f86565b6118b3565b34801561050c57600080fd5b50610229611a2e565b34801561052157600080fd5b5061032c610530366004612ffd565b611a3d565b34801561054157600080fd5b5061027e610550366004612f19565b611ae2565b34801561056157600080fd5b50600b5461027e90600160a01b900460ff1681565b34801561058257600080fd5b5061032c610591366004612f86565b611af0565b3480156105a257600080fd5b5061032c6105b1366004612ffd565b611bf5565b3480156105c257600080fd5b5061027e6105d1366004612ffd565b600c6020526000908152604090205460ff1681565b3480156105f257600080fd5b5061025061060136600461303c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561063857600080fd5b5061032c611c5a565b34801561064d57600080fd5b5061032c61065c366004612ffd565b611ed3565b34801561066d57600080fd5b506008546102e3906001600160a01b031681565b60606003805461069090613075565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90613075565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b600033610721818585611f1f565b60019150505b92915050565b60003361073b858285611fd1565b61074685858561203f565b506001949350505050565b600d818154811061076157600080fd5b6000918252602090912001546001600160a01b0316905081565b61078361228e565b6000600e54118061079657506000600f54115b6107cc5760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108005760405162461bcd60e51b815260206004820152600260248201526109c960f31b60448201526064016107c3565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561083b57600080fd5b505af192505050801561084c575060015b610897577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161088e929190918252602082015260400190565b60405180910390a15b565b6108a161228e565b600034116108d65760405162461bcd60e51b81526020600482015260026024820152614e4560f01b60448201526064016107c3565b6000811161090b5760405162461bcd60e51b8152602060048201526002602482015261139560f21b60448201526064016107c3565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096c91906130af565b101561099f5760405162461bcd60e51b815260206004820152600260248201526124a160f11b60448201526064016107c3565b6007546109b79030906001600160a01b031683611f1f565b60075460405163f305d71960e01b81523060048201526024810183905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990349060c40160606040518083038185885af193505050508015610a40575060408051601f3d908101601f19168201909252610a3d918101906130c8565b60015b610a8a57600754610a5d9030906001600160a01b03166000611f1f565b60405162461bcd60e51b8152602060048201526002602482015261119360f21b60448201526064016107c3565b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a1478015610afb57604051339082156108fc029083906000818181858888f19350505050158015610af9573d6000803e3d6000fd5b505b5050565b610b0761228e565b306001600160a01b03831603610b445760405162461bcd60e51b815260206004820152600260248201526121a360f11b60448201526064016107c3565b816001600160a01b031663a9059cbb610b656006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610b839291906130f6565b6020604051808303816000875af1158015610ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af9919061310f565b6060600d80548060200260200160405190810160405280929190818152602001828054801561070957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c00575050505050905090565b600260055403610c5e5760405162461bcd60e51b8152602060048201526002602482015261523160f01b60448201526064016107c3565b6002600555601054610100900460ff1615610ca05760405162461bcd60e51b8152602060048201526002602482015261041560f41b60448201526064016107c3565b6010805461ff001916610100179055600e54600f5481158015610cc1575080155b15610cd85750506010805461ff0019169055611143565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f55600754610d359030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610d6d92911690600019906004016130f6565b6020604051808303816000875af1158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db0919061310f565b506000610dbd8284613147565b90506000610dca826122dc565b905080600003610de95750506010805461ff0019169055506111439050565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5691906130af565b9050818110156110b557600b54600160a01b900460ff161561106457600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee791906130af565b9050801561105e57600954600b546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610f27929116903090869060040161315a565b6020604051808303816000875af1925050508015610f62575060408051601f3d908101601f19168201909252610f5f9181019061310f565b60015b610fb8576000805160206133cc833981519152604051610f999060208082526003908201526220aa2360e91b604082015260600190565b60405180910390a150506010805461ff00191690555061114392505050565b506040518181527fc6359f75dd26788a9c37bd02903f193da3f5c417c0742f245600976783acb3d19060200160405180910390a16009546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906130af565b91508092505b506110b5565b6000805160206133cc83398151915260405161109790602080825260039082015262544e4160e81b604082015260600190565b60405180910390a150506010805461ff001916905550611143915050565b6000836110c2878561317e565b6110cc9190613195565b905060006110da82856131b7565b905081156110ec576110ec87836125a4565b8015611130576000606461110160198461317e565b61110b9190613195565b9050600061111982846131b7565b90506111248261281d565b61112d816128f5565b50505b50506010805461ff001916905550505050505b6001600555565b600b546001600160a01b031633146111895760405162461bcd60e51b815260206004820152600260248201526113d560f21b60448201526064016107c3565b6009546001600160a01b03166111c65760405162461bcd60e51b81526020600482015260026024820152614e5360f01b60448201526064016107c3565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906111fa903090600019906004016130f6565b6020604051808303816000875af1925050508015611235575060408051601f3d908101601f191682019092526112329181019061310f565b60015b6112c6576112416131ca565b806308c379a0036112975750611255613221565b806112605750611299565b8060405160200161127191906132ab565b60408051601f198184030181529082905262461bcd60e51b82526107c391600401612ed1565b505b60405162461bcd60e51b815260206004820152600260248201526120a360f11b60448201526064016107c3565b50600b8054600160a01b60ff60a01b198216179091556040516001600160a01b0390911681527f61f455c025be680134d6c3dfee8a7bedc6d3eb445cd61c5210f4b7f83609742f9060200161088e565b61131e61228e565b60105460ff16156113565760405162461bcd60e51b8152602060048201526002602482015261231960f11b60448201526064016107c3565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906132d7565b600a80546001600160a01b0319166001600160a01b03929092169182179055611495576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147491906132d7565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166114d25760405162461bcd60e51b8152602060048201526002602482015261463360f01b60448201526064016107c3565b6007546114ec9030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261152492911690600019906004016130f6565b6020604051808303816000875af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611567919061310f565b6115985760405162461bcd60e51b8152602060048201526002602482015261118d60f21b60448201526064016107c3565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115d092911690600019906004016130f6565b6020604051808303816000875af11580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611613919061310f565b50600a5460405163095ea7b360e01b8152309163095ea7b391611646916001600160a01b031690600019906004016130f6565b6020604051808303816000875af1158015611665573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611689919061310f565b50565b61169461228e565b6000821180156116a45750600081115b6116c05760405162461bcd60e51b81526004016107c3906132f4565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172191906130af565b10156117545760405162461bcd60e51b815260206004820152600260248201526124a360f11b60448201526064016107c3565b6009546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906130af565b10156117f35760405162461bcd60e51b8152602060048201526002602482015261495360f01b60448201526064016107c3565b6000611800601980613147565b61180b60198461317e565b6118159190613195565b9050600061182382846131b7565b90506000611832601980613147565b61183d60198761317e565b6118479190613195565b90506000811180156118595750600083115b156118685761186881846125a4565b81156118ac576000606461187d60198561317e565b6118879190613195565b9050600061189582856131b7565b90506118a08261281d565b6118a9816128f5565b50505b5050505050565b6118bb61228e565b600b546001600160a01b03166118f85760405162461bcd60e51b8152602060048201526002602482015261139560f21b60448201526064016107c3565b600081116119185760405162461bcd60e51b81526004016107c3906132f4565b600954600b546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92611950929116903090869060040161315a565b6020604051808303816000875af192505050801561198b575060408051601f3d908101601f191682019092526119889181019061310f565b60015b6119f6576119976131ca565b806308c379a0036119c757506119ab613221565b806119b657506119c9565b806040516020016112719190613310565b505b60405162461bcd60e51b81526020600482015260026024820152612a2360f11b60448201526064016107c3565b506040518181527f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad2906020015b60405180910390a150565b60606004805461069090613075565b611a4561228e565b6001600160a01b038116611a805760405162461bcd60e51b8152602060048201526002602482015261125560f21b60448201526064016107c3565b600b80546001600160a01b038381166001600160a81b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb491015b60405180910390a15050565b60003361072181858561203f565b611af861228e565b60008111611b185760405162461bcd60e51b81526004016107c3906132f4565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7991906130af565b1015611bac5760405162461bcd60e51b815260206004820152600260248201526124a160f11b60448201526064016107c3565b6000611bb7826122dc565b90508015610afb5760408051838152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc019101611ad6565b611bfd61228e565b6001600160a01b038116611c385760405162461bcd60e51b815260206004820152600260248201526124a960f11b60448201526064016107c3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611c6261228e565b600754611c7c9030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611cb492911690600019906004016130f6565b6020604051808303816000875af1925050508015611cef575060408051601f3d908101601f19168201909252611cec9181019061310f565b60015b15611d4557506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92611d3c926001600160a01b03918216929116906000199061315a565b60405180910390a15b600a546001600160a01b03161561089757600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d8e92911690600019906004016130f6565b6020604051808303816000875af1925050508015611dc9575060408051601f3d908101601f19168201909252611dc69181019061310f565b60015b15611e1f5750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92611e16926001600160a01b03918216929116906000199061315a565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391611e51916001600160a01b031690600019906004016130f6565b6020604051808303816000875af1925050508015611e8c575060408051601f3d908101601f19168201909252611e899181019061310f565b60015b156108975750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9161088e9130916001600160a01b0316906000199061315a565b611edb61228e565b6001600160a01b038116611f165760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064016107c3565b61168981612b36565b6001600160a01b03831615801590611f3f57506001600160a01b03821615155b611f705760405162461bcd60e51b8152602060048201526002602482015261114d60f21b60448201526064016107c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220548181101561202c5760405162461bcd60e51b8152602060048201526002602482015261453560f01b60448201526064016107c3565b6120398484848403611f1f565b50505050565b601054610100900460ff1615801561206557506006546001600160a01b03848116911614155b801561207f57506006546001600160a01b03838116911614155b801561209457506001600160a01b0383163014155b80156120ad5750600a546001600160a01b038381169116145b1561222b57600060646120c160058461317e565b6120cb9190613195565b9050801561222957600060646120e260198461317e565b6120ec9190613195565b9050600060646120fd60198561317e565b6121079190613195565b9050600061211584866131b7565b9050612122873086612b88565b61212d878783612b88565b82600e600082825461213f9190613147565b9250508190555081600f60008282546121589190613147565b9091555050600f54600e5468056bc75e2d631000009161217791613147565b106121ca57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121b757600080fd5b505af19250505080156121c8575060015b505b6121fd87678ac7230489e800006121f68a6001600160a01b031660009081526020819052604090205490565b1015612c9e565b6118a986678ac7230489e800006121f6896001600160a01b031660009081526020819052604090205490565b505b612236838383612b88565b61226283678ac7230489e800006121f6866001600160a01b031660009081526020819052604090205490565b610af982678ac7230489e800006121f6856001600160a01b031660009081526020819052604090205490565b336122a16006546001600160a01b031690565b6001600160a01b0316146108975760405162461bcd60e51b8152602060048201526002602482015261279960f11b60448201526064016107c3565b6000816000036122ee57506000919050565b6007546123069030906001600160a01b031684611f1f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233b5761233b61332f565b6001600160a01b03928316602091820292909201015260095482519116908290600190811061236c5761236c61332f565b6001600160a01b0392831660209182029290920101526009546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea91906130af565b6007549091506001600160a01b0316635c11d795856000853061240f4261012c613147565b6040518663ffffffff1660e01b815260040161242f959493929190613345565b600060405180830381600087803b15801561244957600080fd5b505af192505050801561245a575060015b6124e4576124666131ca565b806308c379a0036124b5575061247a613221565b8061248557506124b7565b6000805160206133cc833981519152816040516124a29190612ed1565b60405180910390a1506000949350505050565b505b6000805160206133cc8339815191526040516124d290613381565b60405180910390a15060009392505050565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255191906130af565b9050600061255f83836131b7565b60408051888152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a195945050505050565b8115806125af575080155b156125b8575050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926125ee9291169085906004016130f6565b6020604051808303816000875af115801561260d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612631919061310f565b5060075461264a9030906001600160a01b031684611f1f565b6007546009546001600160a01b039182169163e8e337009130911685856064612674601e826131b7565b61267e908a61317e565b6126889190613195565b6064612695601e826131b7565b61269f908a61317e565b6126a99190613195565b306126b64261012c613147565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af192505050801561274e575060408051601f3d908101601f1916820190925261274b918101906130c8565b60015b6127e45761275a6131ca565b806308c379a0036127b5575061276e613221565b8061277957506127b7565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516127a89190612ed1565b60405180910390a1505050565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051611ad690613381565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b925001611ad6565b8015806128335750600b546001600160a01b0316155b1561283b5750565b600954600b5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926128719291169085906004016130f6565b6020604051808303816000875af19250505080156128ac575060408051601f3d908101601f191682019092526128a99181019061310f565b60015b6119f6577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051611a23906020808252600390820152622a2a2360e91b604082015260600190565b8015806129025750600d54155b1561290a5750565b600d5460009061291a9083613195565b905060005b600d54811015610af95760006001600160a01b0316600d82815481106129475761294761332f565b6000918252602090912001546001600160a01b03161480159061299a5750306001600160a01b0316600d82815481106129825761298261332f565b6000918252602090912001546001600160a01b031614155b80156129dc5750600a54600d80546001600160a01b0390921691839081106129c4576129c461332f565b6000918252602090912001546001600160a01b031614155b15612b2457600954600d80546001600160a01b039092169163a9059cbb919084908110612a0b57612a0b61332f565b6000918252602090912001546040516001600160e01b031960e084901b168152612a43916001600160a01b03169086906004016130f6565b6020604051808303816000875af1925050508015612a7e575060408051601f3d908101601f19168201909252612a7b9181019061310f565b60015b612b2257612a8a6131ca565b806308c379a003612ae65750612a9e613221565b80612aa95750612ae8565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161481604051612ad89190612ed1565b60405180910390a150612b24565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612b1590613381565b60405180910390a1612b24565b505b80612b2e8161339c565b91505061291f565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590612ba857506001600160a01b03821615155b612bd95760405162461bcd60e51b8152602060048201526002602482015261453160f01b60448201526064016107c3565b612be4838383610af9565b6001600160a01b03831660009081526020819052604090205481811015612c325760405162461bcd60e51b8152602060048201526002602482015261229960f11b60448201526064016107c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612039848484610af9565b600a546001600160a01b03838116911614801590612cc557506001600160a01b0382163014155b15610afb57808015612cf057506001600160a01b0382166000908152600c602052604090205460ff16155b15612d5c57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b80158015612d8257506001600160a01b0382166000908152600c602052604090205460ff165b15610afb576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610af957826001600160a01b0316600d8281548110612dcf57612dcf61332f565b6000918252602090912001546001600160a01b031603612e9b57600d8054612df9906001906131b7565b81548110612e0957612e0961332f565b600091825260209091200154600d80546001600160a01b039092169183908110612e3557612e3561332f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d805480612e7457612e746133b5565b600082815260209020810160001990810180546001600160a01b0319169055019055610af9565b80612ea58161339c565b915050612da8565b60005b83811015612ec8578181015183820152602001612eb0565b50506000910152565b6020815260008251806020840152612ef0816040850160208701612ead565b601f01601f19169190910160400192915050565b6001600160a01b038116811461168957600080fd5b60008060408385031215612f2c57600080fd5b8235612f3781612f04565b946020939093013593505050565b600080600060608486031215612f5a57600080fd5b8335612f6581612f04565b92506020840135612f7581612f04565b929592945050506040919091013590565b600060208284031215612f9857600080fd5b5035919050565b600081518084526020808501945080840160005b83811015612fd85781516001600160a01b031687529582019590820190600101612fb3565b509495945050505050565b602081526000612ff66020830184612f9f565b9392505050565b60006020828403121561300f57600080fd5b8135612ff681612f04565b6000806040838503121561302d57600080fd5b50508035926020909101359150565b6000806040838503121561304f57600080fd5b823561305a81612f04565b9150602083013561306a81612f04565b809150509250929050565b600181811c9082168061308957607f821691505b6020821081036130a957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130c157600080fd5b5051919050565b6000806000606084860312156130dd57600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03929092168252602082015260400190565b60006020828403121561312157600080fd5b81518015158114612ff657600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072757610727613131565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808202811582820484141761072757610727613131565b6000826131b257634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561072757610727613131565b600060033d11156131e35760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561321a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d101561322f5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561325f57505050505090565b82850191508151818111156132775750505050505090565b843d87010160208285010111156132915750505050505090565b6132a0602082860101876131e6565b509095945050505050565b63020a31d160e51b8152600082516132ca816004850160208701612ead565b9190910160040192915050565b6000602082840312156132e957600080fd5b8151612ff681612f04565b6020808252600290820152614e4160f01b604082015260600190565b6302a231d160e51b8152600082516132ca816004850160208701612ead565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061336460a0830186612f9f565b6001600160a01b0394909416606083015250608001529392505050565b6020808252600190820152604560f81b604082015260600190565b6000600182016133ae576133ae613131565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220c1d8affd27ef60ef3f39b8411ac0d0c59d161493f1d475fc7a0dcef036f2136b64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c80637ac84fc111610118578063a9059cbb116100a0578063d4d7b19a1161006f578063d4d7b19a146105b6578063dd62ed3e146105e6578063ed9cacfe1461062c578063f2fde38b14610641578063fd7c9fab1461066157600080fd5b8063a9059cbb14610535578063b03b06b314610555578063b70143c914610576578063c0d786551461059657600080fd5b80638da5cb5b116100e75780638da5cb5b146104a25780638e7c3ec5146104c05780638f7f0e64146104e057806395d89b4114610500578063a8602fea1461051557600080fd5b80637ac84fc1146104435780637ff793d314610458578063808a54571461046d5780638129fc1c1461048d57600080fd5b806341a22cc21161019b5780635d76b04c1161016a5780635d76b04c146103a15780635fe8e7cc146103b657806362b6327a146103d857806370a08231146103f85780637136982b1461042e57600080fd5b806341a22cc21461032e578063461a3a95146103415780634626402b14610361578063573761981461038157600080fd5b806323b872dd116101d757806323b872dd146102a35780632a11ced0146102c3578063313ce567146102fb578063397883d21461031757600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610681565b6040516102369190612ed1565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e610279366004612f19565b610713565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b5061027e6102be366004612f45565b61072d565b3480156102cf57600080fd5b506102e36102de366004612f86565b610751565b6040516001600160a01b039091168152602001610236565b34801561030757600080fd5b5060405160128152602001610236565b34801561032357600080fd5b5061032c61077b565b005b61032c61033c366004612f86565b610899565b34801561034d57600080fd5b506009546102e3906001600160a01b031681565b34801561036d57600080fd5b50600b546102e3906001600160a01b031681565b34801561038d57600080fd5b5061032c61039c366004612f19565b610aff565b3480156103ad57600080fd5b50600f54610250565b3480156103c257600080fd5b506103cb610bc6565b6040516102369190612fe3565b3480156103e457600080fd5b506007546102e3906001600160a01b031681565b34801561040457600080fd5b50610250610413366004612ffd565b6001600160a01b031660009081526020819052604090205490565b34801561043a57600080fd5b50600d54610250565b34801561044f57600080fd5b5061032c610c27565b34801561046457600080fd5b5061032c61114a565b34801561047957600080fd5b50600a546102e3906001600160a01b031681565b34801561049957600080fd5b5061032c611316565b3480156104ae57600080fd5b506006546001600160a01b03166102e3565b3480156104cc57600080fd5b5061032c6104db36600461301a565b61168c565b3480156104ec57600080fd5b5061032c6104fb366004612f86565b6118b3565b34801561050c57600080fd5b50610229611a2e565b34801561052157600080fd5b5061032c610530366004612ffd565b611a3d565b34801561054157600080fd5b5061027e610550366004612f19565b611ae2565b34801561056157600080fd5b50600b5461027e90600160a01b900460ff1681565b34801561058257600080fd5b5061032c610591366004612f86565b611af0565b3480156105a257600080fd5b5061032c6105b1366004612ffd565b611bf5565b3480156105c257600080fd5b5061027e6105d1366004612ffd565b600c6020526000908152604090205460ff1681565b3480156105f257600080fd5b5061025061060136600461303c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561063857600080fd5b5061032c611c5a565b34801561064d57600080fd5b5061032c61065c366004612ffd565b611ed3565b34801561066d57600080fd5b506008546102e3906001600160a01b031681565b60606003805461069090613075565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90613075565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b600033610721818585611f1f565b60019150505b92915050565b60003361073b858285611fd1565b61074685858561203f565b506001949350505050565b600d818154811061076157600080fd5b6000918252602090912001546001600160a01b0316905081565b61078361228e565b6000600e54118061079657506000600f54115b6107cc5760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d546108005760405162461bcd60e51b815260206004820152600260248201526109c960f31b60448201526064016107c3565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561083b57600080fd5b505af192505050801561084c575060015b610897577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f5460405161088e929190918252602082015260400190565b60405180910390a15b565b6108a161228e565b600034116108d65760405162461bcd60e51b81526020600482015260026024820152614e4560f01b60448201526064016107c3565b6000811161090b5760405162461bcd60e51b8152602060048201526002602482015261139560f21b60448201526064016107c3565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096c91906130af565b101561099f5760405162461bcd60e51b815260206004820152600260248201526124a160f11b60448201526064016107c3565b6007546109b79030906001600160a01b031683611f1f565b60075460405163f305d71960e01b81523060048201526024810183905260006044820181905260648201523360848201524260a48201526001600160a01b039091169063f305d71990349060c40160606040518083038185885af193505050508015610a40575060408051601f3d908101601f19168201909252610a3d918101906130c8565b60015b610a8a57600754610a5d9030906001600160a01b03166000611f1f565b60405162461bcd60e51b8152602060048201526002602482015261119360f21b60448201526064016107c3565b5050604080518381523460208201527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a1478015610afb57604051339082156108fc029083906000818181858888f19350505050158015610af9573d6000803e3d6000fd5b505b5050565b610b0761228e565b306001600160a01b03831603610b445760405162461bcd60e51b815260206004820152600260248201526121a360f11b60448201526064016107c3565b816001600160a01b031663a9059cbb610b656006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610b839291906130f6565b6020604051808303816000875af1158015610ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af9919061310f565b6060600d80548060200260200160405190810160405280929190818152602001828054801561070957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c00575050505050905090565b600260055403610c5e5760405162461bcd60e51b8152602060048201526002602482015261523160f01b60448201526064016107c3565b6002600555601054610100900460ff1615610ca05760405162461bcd60e51b8152602060048201526002602482015261041560f41b60448201526064016107c3565b6010805461ff001916610100179055600e54600f5481158015610cc1575080155b15610cd85750506010805461ff0019169055611143565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f55600754610d359030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610d6d92911690600019906004016130f6565b6020604051808303816000875af1158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db0919061310f565b506000610dbd8284613147565b90506000610dca826122dc565b905080600003610de95750506010805461ff0019169055506111439050565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5691906130af565b9050818110156110b557600b54600160a01b900460ff161561106457600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee791906130af565b9050801561105e57600954600b546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610f27929116903090869060040161315a565b6020604051808303816000875af1925050508015610f62575060408051601f3d908101601f19168201909252610f5f9181019061310f565b60015b610fb8576000805160206133cc833981519152604051610f999060208082526003908201526220aa2360e91b604082015260600190565b60405180910390a150506010805461ff00191690555061114392505050565b506040518181527fc6359f75dd26788a9c37bd02903f193da3f5c417c0742f245600976783acb3d19060200160405180910390a16009546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906130af565b91508092505b506110b5565b6000805160206133cc83398151915260405161109790602080825260039082015262544e4160e81b604082015260600190565b60405180910390a150506010805461ff001916905550611143915050565b6000836110c2878561317e565b6110cc9190613195565b905060006110da82856131b7565b905081156110ec576110ec87836125a4565b8015611130576000606461110160198461317e565b61110b9190613195565b9050600061111982846131b7565b90506111248261281d565b61112d816128f5565b50505b50506010805461ff001916905550505050505b6001600555565b600b546001600160a01b031633146111895760405162461bcd60e51b815260206004820152600260248201526113d560f21b60448201526064016107c3565b6009546001600160a01b03166111c65760405162461bcd60e51b81526020600482015260026024820152614e5360f01b60448201526064016107c3565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906111fa903090600019906004016130f6565b6020604051808303816000875af1925050508015611235575060408051601f3d908101601f191682019092526112329181019061310f565b60015b6112c6576112416131ca565b806308c379a0036112975750611255613221565b806112605750611299565b8060405160200161127191906132ab565b60408051601f198184030181529082905262461bcd60e51b82526107c391600401612ed1565b505b60405162461bcd60e51b815260206004820152600260248201526120a360f11b60448201526064016107c3565b50600b8054600160a01b60ff60a01b198216179091556040516001600160a01b0390911681527f61f455c025be680134d6c3dfee8a7bedc6d3eb445cd61c5210f4b7f83609742f9060200161088e565b61131e61228e565b60105460ff16156113565760405162461bcd60e51b8152602060048201526002602482015261231960f11b60448201526064016107c3565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906132d7565b600a80546001600160a01b0319166001600160a01b03929092169182179055611495576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147491906132d7565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166114d25760405162461bcd60e51b8152602060048201526002602482015261463360f01b60448201526064016107c3565b6007546114ec9030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261152492911690600019906004016130f6565b6020604051808303816000875af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611567919061310f565b6115985760405162461bcd60e51b8152602060048201526002602482015261118d60f21b60448201526064016107c3565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926115d092911690600019906004016130f6565b6020604051808303816000875af11580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611613919061310f565b50600a5460405163095ea7b360e01b8152309163095ea7b391611646916001600160a01b031690600019906004016130f6565b6020604051808303816000875af1158015611665573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611689919061310f565b50565b61169461228e565b6000821180156116a45750600081115b6116c05760405162461bcd60e51b81526004016107c3906132f4565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172191906130af565b10156117545760405162461bcd60e51b815260206004820152600260248201526124a360f11b60448201526064016107c3565b6009546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906130af565b10156117f35760405162461bcd60e51b8152602060048201526002602482015261495360f01b60448201526064016107c3565b6000611800601980613147565b61180b60198461317e565b6118159190613195565b9050600061182382846131b7565b90506000611832601980613147565b61183d60198761317e565b6118479190613195565b90506000811180156118595750600083115b156118685761186881846125a4565b81156118ac576000606461187d60198561317e565b6118879190613195565b9050600061189582856131b7565b90506118a08261281d565b6118a9816128f5565b50505b5050505050565b6118bb61228e565b600b546001600160a01b03166118f85760405162461bcd60e51b8152602060048201526002602482015261139560f21b60448201526064016107c3565b600081116119185760405162461bcd60e51b81526004016107c3906132f4565b600954600b546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92611950929116903090869060040161315a565b6020604051808303816000875af192505050801561198b575060408051601f3d908101601f191682019092526119889181019061310f565b60015b6119f6576119976131ca565b806308c379a0036119c757506119ab613221565b806119b657506119c9565b806040516020016112719190613310565b505b60405162461bcd60e51b81526020600482015260026024820152612a2360f11b60448201526064016107c3565b506040518181527f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad2906020015b60405180910390a150565b60606004805461069090613075565b611a4561228e565b6001600160a01b038116611a805760405162461bcd60e51b8152602060048201526002602482015261125560f21b60448201526064016107c3565b600b80546001600160a01b038381166001600160a81b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb491015b60405180910390a15050565b60003361072181858561203f565b611af861228e565b60008111611b185760405162461bcd60e51b81526004016107c3906132f4565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015611b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7991906130af565b1015611bac5760405162461bcd60e51b815260206004820152600260248201526124a160f11b60448201526064016107c3565b6000611bb7826122dc565b90508015610afb5760408051838152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc019101611ad6565b611bfd61228e565b6001600160a01b038116611c385760405162461bcd60e51b815260206004820152600260248201526124a960f11b60448201526064016107c3565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b611c6261228e565b600754611c7c9030906001600160a01b0316600019611f1f565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611cb492911690600019906004016130f6565b6020604051808303816000875af1925050508015611cef575060408051601f3d908101601f19168201909252611cec9181019061310f565b60015b15611d4557506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92611d3c926001600160a01b03918216929116906000199061315a565b60405180910390a15b600a546001600160a01b03161561089757600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d8e92911690600019906004016130f6565b6020604051808303816000875af1925050508015611dc9575060408051601f3d908101601f19168201909252611dc69181019061310f565b60015b15611e1f5750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92611e16926001600160a01b03918216929116906000199061315a565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391611e51916001600160a01b031690600019906004016130f6565b6020604051808303816000875af1925050508015611e8c575060408051601f3d908101601f19168201909252611e899181019061310f565b60015b156108975750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca9161088e9130916001600160a01b0316906000199061315a565b611edb61228e565b6001600160a01b038116611f165760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064016107c3565b61168981612b36565b6001600160a01b03831615801590611f3f57506001600160a01b03821615155b611f705760405162461bcd60e51b8152602060048201526002602482015261114d60f21b60448201526064016107c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220548181101561202c5760405162461bcd60e51b8152602060048201526002602482015261453560f01b60448201526064016107c3565b6120398484848403611f1f565b50505050565b601054610100900460ff1615801561206557506006546001600160a01b03848116911614155b801561207f57506006546001600160a01b03838116911614155b801561209457506001600160a01b0383163014155b80156120ad5750600a546001600160a01b038381169116145b1561222b57600060646120c160058461317e565b6120cb9190613195565b9050801561222957600060646120e260198461317e565b6120ec9190613195565b9050600060646120fd60198561317e565b6121079190613195565b9050600061211584866131b7565b9050612122873086612b88565b61212d878783612b88565b82600e600082825461213f9190613147565b9250508190555081600f60008282546121589190613147565b9091555050600f54600e5468056bc75e2d631000009161217791613147565b106121ca57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121b757600080fd5b505af19250505080156121c8575060015b505b6121fd87678ac7230489e800006121f68a6001600160a01b031660009081526020819052604090205490565b1015612c9e565b6118a986678ac7230489e800006121f6896001600160a01b031660009081526020819052604090205490565b505b612236838383612b88565b61226283678ac7230489e800006121f6866001600160a01b031660009081526020819052604090205490565b610af982678ac7230489e800006121f6856001600160a01b031660009081526020819052604090205490565b336122a16006546001600160a01b031690565b6001600160a01b0316146108975760405162461bcd60e51b8152602060048201526002602482015261279960f11b60448201526064016107c3565b6000816000036122ee57506000919050565b6007546123069030906001600160a01b031684611f1f565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061233b5761233b61332f565b6001600160a01b03928316602091820292909201015260095482519116908290600190811061236c5761236c61332f565b6001600160a01b0392831660209182029290920101526009546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa1580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea91906130af565b6007549091506001600160a01b0316635c11d795856000853061240f4261012c613147565b6040518663ffffffff1660e01b815260040161242f959493929190613345565b600060405180830381600087803b15801561244957600080fd5b505af192505050801561245a575060015b6124e4576124666131ca565b806308c379a0036124b5575061247a613221565b8061248557506124b7565b6000805160206133cc833981519152816040516124a29190612ed1565b60405180910390a1506000949350505050565b505b6000805160206133cc8339815191526040516124d290613381565b60405180910390a15060009392505050565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255191906130af565b9050600061255f83836131b7565b60408051888152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a195945050505050565b8115806125af575080155b156125b8575050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926125ee9291169085906004016130f6565b6020604051808303816000875af115801561260d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612631919061310f565b5060075461264a9030906001600160a01b031684611f1f565b6007546009546001600160a01b039182169163e8e337009130911685856064612674601e826131b7565b61267e908a61317e565b6126889190613195565b6064612695601e826131b7565b61269f908a61317e565b6126a99190613195565b306126b64261012c613147565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af192505050801561274e575060408051601f3d908101601f1916820190925261274b918101906130c8565b60015b6127e45761275a6131ca565b806308c379a0036127b5575061276e613221565b8061277957506127b7565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516127a89190612ed1565b60405180910390a1505050565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad604051611ad690613381565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b925001611ad6565b8015806128335750600b546001600160a01b0316155b1561283b5750565b600954600b5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926128719291169085906004016130f6565b6020604051808303816000875af19250505080156128ac575060408051601f3d908101601f191682019092526128a99181019061310f565b60015b6119f6577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051611a23906020808252600390820152622a2a2360e91b604082015260600190565b8015806129025750600d54155b1561290a5750565b600d5460009061291a9083613195565b905060005b600d54811015610af95760006001600160a01b0316600d82815481106129475761294761332f565b6000918252602090912001546001600160a01b03161480159061299a5750306001600160a01b0316600d82815481106129825761298261332f565b6000918252602090912001546001600160a01b031614155b80156129dc5750600a54600d80546001600160a01b0390921691839081106129c4576129c461332f565b6000918252602090912001546001600160a01b031614155b15612b2457600954600d80546001600160a01b039092169163a9059cbb919084908110612a0b57612a0b61332f565b6000918252602090912001546040516001600160e01b031960e084901b168152612a43916001600160a01b03169086906004016130f6565b6020604051808303816000875af1925050508015612a7e575060408051601f3d908101601f19168201909252612a7b9181019061310f565b60015b612b2257612a8a6131ca565b806308c379a003612ae65750612a9e613221565b80612aa95750612ae8565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161481604051612ad89190612ed1565b60405180910390a150612b24565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051612b1590613381565b60405180910390a1612b24565b505b80612b2e8161339c565b91505061291f565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831615801590612ba857506001600160a01b03821615155b612bd95760405162461bcd60e51b8152602060048201526002602482015261453160f01b60448201526064016107c3565b612be4838383610af9565b6001600160a01b03831660009081526020819052604090205481811015612c325760405162461bcd60e51b8152602060048201526002602482015261229960f11b60448201526064016107c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612039848484610af9565b600a546001600160a01b03838116911614801590612cc557506001600160a01b0382163014155b15610afb57808015612cf057506001600160a01b0382166000908152600c602052604090205460ff16155b15612d5c57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b80158015612d8257506001600160a01b0382166000908152600c602052604090205460ff165b15610afb576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610af957826001600160a01b0316600d8281548110612dcf57612dcf61332f565b6000918252602090912001546001600160a01b031603612e9b57600d8054612df9906001906131b7565b81548110612e0957612e0961332f565b600091825260209091200154600d80546001600160a01b039092169183908110612e3557612e3561332f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d805480612e7457612e746133b5565b600082815260209020810160001990810180546001600160a01b0319169055019055610af9565b80612ea58161339c565b915050612da8565b60005b83811015612ec8578181015183820152602001612eb0565b50506000910152565b6020815260008251806020840152612ef0816040850160208701612ead565b601f01601f19169190910160400192915050565b6001600160a01b038116811461168957600080fd5b60008060408385031215612f2c57600080fd5b8235612f3781612f04565b946020939093013593505050565b600080600060608486031215612f5a57600080fd5b8335612f6581612f04565b92506020840135612f7581612f04565b929592945050506040919091013590565b600060208284031215612f9857600080fd5b5035919050565b600081518084526020808501945080840160005b83811015612fd85781516001600160a01b031687529582019590820190600101612fb3565b509495945050505050565b602081526000612ff66020830184612f9f565b9392505050565b60006020828403121561300f57600080fd5b8135612ff681612f04565b6000806040838503121561302d57600080fd5b50508035926020909101359150565b6000806040838503121561304f57600080fd5b823561305a81612f04565b9150602083013561306a81612f04565b809150509250929050565b600181811c9082168061308957607f821691505b6020821081036130a957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130c157600080fd5b5051919050565b6000806000606084860312156130dd57600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03929092168252602082015260400190565b60006020828403121561312157600080fd5b81518015158114612ff657600080fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561072757610727613131565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808202811582820484141761072757610727613131565b6000826131b257634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561072757610727613131565b600060033d11156131e35760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561321a57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d101561322f5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561325f57505050505090565b82850191508151818111156132775750505050505090565b843d87010160208285010111156132915750505050505090565b6132a0602082860101876131e6565b509095945050505050565b63020a31d160e51b8152600082516132ca816004850160208701612ead565b9190910160040192915050565b6000602082840312156132e957600080fd5b8151612ff681612f04565b6020808252600290820152614e4160f01b604082015260600190565b6302a231d160e51b8152600082516132ca816004850160208701612ead565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a06040820152600061336460a0830186612f9f565b6001600160a01b0394909416606083015250608001529392505050565b6020808252600190820152604560f81b604082015260600190565b6000600182016133ae576133ae613131565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723a2646970667358221220c1d8affd27ef60ef3f39b8411ac0d0c59d161493f1d475fc7a0dcef036f2136b64736f6c63430008110033

Deployed Bytecode Sourcemap

8477:20046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23207:118;;;;;;;;;;-1:-1:-1;23294:23:0;;23207:118;;;816:25:1;;;804:2;789:18;23207:118:0;670:177:1;3740:190:0;;;;;;;;;;-1:-1:-1;3740:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3740:190:0;1308:187:1;3167:99:0;;;;;;;;;;-1:-1:-1;3246:12:0;;3167:99;;3938:250;;;;;;;;;;-1:-1:-1;3938:250:0;;;;;:::i;:::-;;:::i;9790:24::-;;;;;;;;;;-1:-1:-1;9790:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;9790:24:0;2146:203:1;3075:84:0;;;;;;;;;;-1:-1:-1;3075:84:0;;3149:2;2496:36:1;;2484:2;2469:18;3075:84:0;2354:184:1;23506:378:0;;;;;;;;;;;;;:::i;:::-;;21855:936;;;;;;:::i;:::-;;:::i;9544:25::-;;;;;;;;;;-1:-1:-1;9544:25:0;;;;-1:-1:-1;;;;;9544:25:0;;;9611:29;;;;;;;;;;-1:-1:-1;9611:29:0;;;;-1:-1:-1;;;;;9611:29:0;;;22973:183;;;;;;;;;;-1:-1:-1;22973:183:0;;;;;:::i;:::-;;:::i;23333:114::-;;;;;;;;;;-1:-1:-1;23418:21:0;;23333:114;;21681:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9446:41::-;;;;;;;;;;-1:-1:-1;9446:41:0;;;;-1:-1:-1;;;;;9446:41:0;;;3274:118;;;;;;;;;;-1:-1:-1;3274:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;21571:98;;;;;;;;;;-1:-1:-1;21647:7:0;:14;21571:98;;15268:2973;;;;;;;;;;;;;:::i;24974:590::-;;;;;;;;;;;;;:::i;9576:28::-;;;;;;;;;;-1:-1:-1;9576:28:0;;;;-1:-1:-1;;;;;9576:28:0;;;11523:836;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;1934:6:0;1861:87;;27150:1333;;;;;;;;;;-1:-1:-1;27150:1333:0;;;;;:::i;:::-;;:::i;26075:535::-;;;;;;;;;;-1:-1:-1;26075:535:0;;;;;:::i;:::-;;:::i;2972:95::-;;;;;;;;;;;;;:::i;25613:380::-;;;;;;;;;;-1:-1:-1;25613:380:0;;;;;:::i;:::-;;:::i;3400:182::-;;;;;;;;;;-1:-1:-1;3400:182:0;;;;;:::i;:::-;;:::i;9647:28::-;;;;;;;;;;-1:-1:-1;9647:28:0;;;;-1:-1:-1;;;9647:28:0;;;;;;26692:358;;;;;;;;;;-1:-1:-1;26692:358:0;;;;;:::i;:::-;;:::i;22799:166::-;;;;;;;;;;-1:-1:-1;22799:166:0;;;;;:::i;:::-;;:::i;9743:40::-;;;;;;;;;;-1:-1:-1;9743:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3590:142;;;;;;;;;;-1:-1:-1;3590:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3697:18:0;;;3670:7;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3590:142;23930:958;;;;;;;;;;;;;:::i;2064:165::-;;;;;;;;;;-1:-1:-1;2064:165:0;;;;;:::i;:::-;;:::i;9494:43::-;;;;;;;;;;-1:-1:-1;9494:43:0;;;;-1:-1:-1;;;;;9494:43:0;;;2873:91;2918:13;2951:5;2944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;:::o;3740:190::-;3814:4;3847:10;3868:32;3847:10;3884:7;3893:6;3868:8;:32::i;:::-;3918:4;3911:11;;;3740:190;;;;;:::o;3938:250::-;4026:4;4061:10;4082:38;4098:4;4061:10;4113:6;4082:15;:38::i;:::-;4131:27;4141:4;4147:2;4151:6;4131:9;:27::i;:::-;-1:-1:-1;4176:4:0;;3938:250;-1:-1:-1;;;;3938:250:0:o;9790:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9790:24:0;;-1:-1:-1;9790:24:0;:::o;23506:378::-;1820:13;:11;:13::i;:::-;23599:1:::1;23573:23;;:27;:56;;;;23628:1;23604:21;;:25;23573:56;23565:71;;;::::0;-1:-1:-1;;;23565:71:0;;5227:2:1;23565:71:0::1;::::0;::::1;5209:21:1::0;5266:1;5246:18;;;5239:29;-1:-1:-1;;;5284:18:1;;;5277:32;5326:18;;23565:71:0::1;;;;;;;;;23655:7;:14:::0;23647:33:::1;;;::::0;-1:-1:-1;;;23647:33:0;;5557:2:1;23647:33:0::1;::::0;::::1;5539:21:1::0;5596:1;5576:18;;;5569:29;-1:-1:-1;;;5614:18:1;;;5607:32;5656:18;;23647:33:0::1;5355:325:1::0;23647:33:0::1;23695:4;-1:-1:-1::0;;;;;23695:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23691:186;;23803:62;23818:23;;23843:21;;23803:62;;;;;;5859:25:1::0;;;5915:2;5900:18;;5893:34;5847:2;5832:18;;5685:248;23803:62:0::1;;;;;;;;23691:186;23506:378::o:0;21855:936::-;1820:13;:11;:13::i;:::-;21963:1:::1;21951:9;:13;21943:28;;;::::0;-1:-1:-1;;;21943:28:0;;6140:2:1;21943:28:0::1;::::0;::::1;6122:21:1::0;6179:1;6159:18;;;6152:29;-1:-1:-1;;;6197:18:1;;;6190:32;6239:18;;21943:28:0::1;5938:325:1::0;21943:28:0::1;22004:1;21990:11;:15;21982:30;;;::::0;-1:-1:-1;;;21982:30:0;;6470:2:1;21982:30:0::1;::::0;::::1;6452:21:1::0;6509:1;6489:18;;;6482:29;-1:-1:-1;;;6527:18:1;;;6520:32;6569:18;;21982:30:0::1;6268:325:1::0;21982:30:0::1;22055:46;::::0;-1:-1:-1;;;22055:46:0;;22070:4:::1;22055:46;::::0;::::1;2292:51:1::0;;;22105:11:0;;22055:31:::1;::::0;2265:18:1;;22055:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;22033:113;;;::::0;-1:-1:-1;;;22033:113:0;;6989:2:1;22033:113:0::1;::::0;::::1;6971:21:1::0;7028:1;7008:18;;;7001:29;-1:-1:-1;;;7046:18:1;;;7039:32;7088:18;;22033:113:0::1;6787:325:1::0;22033:113:0::1;22191:16;::::0;22159:63:::1;::::0;22176:4:::1;::::0;-1:-1:-1;;;;;22191:16:0::1;22210:11:::0;22159:8:::1;:63::i;:::-;22239:16;::::0;:202:::1;::::0;-1:-1:-1;;;22239:202:0;;22312:4:::1;22239:202;::::0;::::1;7458:34:1::0;7508:18;;;7501:34;;;22239:16:0::1;7551:18:1::0;;;7544:34;;;7594:18;;;7587:34;22390:10:0::1;7637:19:1::0;;;7630:44;22415:15:0::1;7690:19:1::0;;;7683:35;-1:-1:-1;;;;;22239:16:0;;::::1;::::0;:32:::1;::::0;22279:9:::1;::::0;7392:19:1;;22239:202:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22239:202:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;22239:202:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;22235:391;;22566:16;::::0;22534:53:::1;::::0;22551:4:::1;::::0;-1:-1:-1;;;;;22566:16:0::1;;22534:8;:53::i;:::-;22602:12;::::0;-1:-1:-1;;;22602:12:0;;8242:2:1;22602:12:0::1;::::0;::::1;8224:21:1::0;8281:1;8261:18;;;8254:29;-1:-1:-1;;;8299:18:1;;;8292:32;8341:18;;22602:12:0::1;8040:325:1::0;22235:391:0::1;-1:-1:-1::0;;22462:38:0::1;::::0;;5859:25:1;;;22490:9:0::1;5915:2:1::0;5900:18;;5893:34;22462:38:0::1;::::0;-1:-1:-1;5832:18:1;22462:38:0::1;;;;;;;22661:21;22697:16:::0;;22693:91:::1;;22730:42;::::0;22738:10:::1;::::0;22730:42;::::1;;;::::0;22759:12;;22730:42:::1;::::0;;;22759:12;22738:10;22730:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22693:91;21932:859;21855:936:::0;:::o;22973:183::-;1820:13;:11;:13::i;:::-;23084:4:::1;-1:-1:-1::0;;;;;23066:23:0;::::1;::::0;23058:38:::1;;;::::0;-1:-1:-1;;;23058:38:0;;8572:2:1;23058:38:0::1;::::0;::::1;8554:21:1::0;8611:1;8591:18;;;8584:29;-1:-1:-1;;;8629:18:1;;;8622:32;8671:18;;23058:38:0::1;8370:325:1::0;23058:38:0::1;23114:6;-1:-1:-1::0;;;;;23107:23:0::1;;23131:7;1934:6:::0;;-1:-1:-1;;;;;1934:6:0;;1861:87;23131:7:::1;23140;23107:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21681:96::-:0;21726:16;21762:7;21755:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21755:14:0;;;;;;;;;;;;;;;;;;;;;;21681:96;:::o;15268:2973::-;1114:1;1260:7;;:19;1252:34;;;;-1:-1:-1;;;1252:34:0;;9463:2:1;1252:34:0;;;9445:21:1;9502:1;9482:18;;;9475:29;-1:-1:-1;;;9520:18:1;;;9513:32;9562:18;;1252:34:0;9261:325:1;1252:34:0;1114:1;1297:7;:18;15348:7:::1;::::0;::::1;::::0;::::1;;;15347:8;15339:23;;;::::0;-1:-1:-1;;;15339:23:0;;9793:2:1;15339:23:0::1;::::0;::::1;9775:21:1::0;9832:1;9812:18;;;9805:29;-1:-1:-1;;;9850:18:1;;;9843:32;9892:18;;15339:23:0::1;9591:325:1::0;15339:23:0::1;15373:7;:14:::0;;-1:-1:-1;;15373:14:0::1;;;::::0;;15437:23:::1;::::0;15498:21:::1;::::0;15544:23;;:48;::::1;;;-1:-1:-1::0;15571:21:0;;15544:48:::1;15540:117;;;-1:-1:-1::0;;15609:7:0::1;:15:::0;;-1:-1:-1;;15609:15:0::1;::::0;;15639:7:::1;;15540:117;15682:52;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;15682:52:0::1;::::0;5832:18:1;15682:52:0::1;;;;;;;15815:1;15789:23;:27:::0;;;15827:21:::1;:25:::0;15935:16:::1;::::0;15903:69:::1;::::0;15920:4:::1;::::0;-1:-1:-1;;;;;15935:16:0::1;-1:-1:-1::0;;15903:8:0::1;:69::i;:::-;15990:10;::::0;16018:16:::1;::::0;15983:72:::1;::::0;-1:-1:-1;;;15983:72:0;;-1:-1:-1;;;;;15990:10:0;;::::1;::::0;15983:26:::1;::::0;:72:::1;::::0;16018:16;::::1;::::0;-1:-1:-1;;16037:17:0;15983:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16101:25:0::1;16129:37;16150:16:::0;16129:18;:37:::1;:::i;:::-;16101:65;;16177:21;16201:31;16214:17;16201:12;:31::i;:::-;16177:55;;16257:13;16274:1;16257:18:::0;16253:87:::1;;-1:-1:-1::0;;16292:7:0::1;:15:::0;;-1:-1:-1;;16292:15:0::1;::::0;;-1:-1:-1;16322:7:0::1;::::0;-1:-1:-1;16322:7:0::1;16253:87;16475:10;::::0;16468:43:::1;::::0;-1:-1:-1;;;16468:43:0;;16505:4:::1;16468:43;::::0;::::1;2292:51:1::0;16445:20:0::1;::::0;-1:-1:-1;;;;;16475:10:0::1;::::0;16468:28:::1;::::0;2265:18:1;;16468:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16445:66;;16541:13;16526:12;:28;16522:950;;;16652:16;::::0;-1:-1:-1;;;16652:16:0;::::1;;;16648:813;;;16722:10;::::0;16744:14:::1;::::0;16715:44:::1;::::0;-1:-1:-1;;;16715:44:0;;-1:-1:-1;;;;;16744:14:0;;::::1;16715:44;::::0;::::1;2292:51:1::0;16689:23:0::1;::::0;16722:10;;;::::1;::::0;16715:28:::1;::::0;2265:18:1;;16715:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16689:70:::0;-1:-1:-1;16782:19:0;;16778:546:::1;;16837:10;::::0;16862:14:::1;::::0;16830:79:::1;::::0;-1:-1:-1;;;16830:79:0;;-1:-1:-1;;;;;16837:10:0;;::::1;::::0;16830:31:::1;::::0;:79:::1;::::0;16862:14;::::1;::::0;16886:4:::1;::::0;16893:15;;16830:79:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;16830:79:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;16830:79:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;16826:479;;-1:-1:-1::0;;;;;;;;;;;17189:17:0::1;;;;10765:2:1::0;10747:21;;;10804:1;10784:18;;;10777:29;-1:-1:-1;;;10837:2:1;10822:18;;10815:33;10880:2;10865:18;;10563:326;17189:17:0::1;;;;;;;;-1:-1:-1::0;;17233:7:0::1;:15:::0;;-1:-1:-1;;17233:15:0::1;::::0;;-1:-1:-1;17275:7:0::1;::::0;-1:-1:-1;;;17275:7:0::1;16826:479;-1:-1:-1::0;16942:41:0::1;::::0;816:25:1;;;16942:41:0::1;::::0;804:2:1;789:18;16942:41:0::1;;;;;;;17032:10;::::0;17025:43:::1;::::0;-1:-1:-1;;;17025:43:0;;17062:4:::1;17025:43;::::0;::::1;2292:51:1::0;-1:-1:-1;;;;;17032:10:0;;::::1;::::0;17025:28:::1;::::0;2265:18:1;;17025:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17010:58;;17111:15;17095:31;;16826:479;16670:669;16648:813;;;-1:-1:-1::0;;;;;;;;;;;17369:17:0::1;;;;11096:2:1::0;11078:21;;;11135:1;11115:18;;;11108:29;-1:-1:-1;;;11168:2:1;11153:18;;11146:33;11211:2;11196:18;;10894:326;17369:17:0::1;;;;;;;;-1:-1:-1::0;;17405:7:0::1;:15:::0;;-1:-1:-1;;17405:15:0::1;::::0;;-1:-1:-1;17439:7:0::1;::::0;-1:-1:-1;;17439:7:0::1;16648:813;17522:25;17587:17:::0;17550:34:::1;17566:18:::0;17550:13;:34:::1;:::i;:::-;:54;;;;:::i;:::-;17522:82:::0;-1:-1:-1;17615:23:0::1;17641:33;17522:82:::0;17641:13;:33:::1;:::i;:::-;17615:59:::0;-1:-1:-1;17729:21:0;;17725:110:::1;;17767:56;17785:18;17805:17;17767;:56::i;:::-;17887:19:::0;;17883:315:::1;;17923:24;17990:3;17950:37;9278:2;17950:15:::0;:37:::1;:::i;:::-;:43;;;;:::i;:::-;17923:70:::0;-1:-1:-1;18008:23:0::1;18034:34;17923:70:::0;18034:15;:34:::1;:::i;:::-;18008:60;;18097:42;18122:16;18097:24;:42::i;:::-;18154:32;18170:15;18154;:32::i;:::-;17908:290;;17883:315;-1:-1:-1::0;;18218:7:0::1;:15:::0;;-1:-1:-1;;18218:15:0::1;::::0;;-1:-1:-1;;;;;1326:1:0::1;1070::::0;1338:7;:22;15268:2973::o;24974:590::-;25053:14;;-1:-1:-1;;;;;25053:14:0;25039:10;:28;25031:43;;;;-1:-1:-1;;;25031:43:0;;11955:2:1;25031:43:0;;;11937:21:1;11994:1;11974:18;;;11967:29;-1:-1:-1;;;12012:18:1;;;12005:32;12054:18;;25031:43:0;11753:325:1;25031:43:0;25093:10;;-1:-1:-1;;;;;25093:10:0;25085:39;;;;-1:-1:-1;;;25085:39:0;;12285:2:1;25085:39:0;;;12267:21:1;12324:1;12304:18;;;12297:29;-1:-1:-1;;;12342:18:1;;;12335:32;12384:18;;25085:39:0;12083:325:1;25085:39:0;25238:10;;25231:60;;-1:-1:-1;;;25231:60:0;;-1:-1:-1;;;;;25238:10:0;;;;25231:26;;:60;;25266:4;;-1:-1:-1;;25273:17:0;25231:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25231:60:0;;;;;;;;-1:-1:-1;;25231:60:0;;;;;;;;;;;;:::i;:::-;;;25227:330;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25490:6;25465:32;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25465:32:0;;;;;;;;;;-1:-1:-1;;;25451:48:0;;;;;;;:::i;25227:330::-;;;25533:12;;-1:-1:-1;;;25533:12:0;;14397:2:1;25533:12:0;;;14379:21:1;14436:1;14416:18;;;14409:29;-1:-1:-1;;;14454:18:1;;;14447:32;14496:18;;25533:12:0;14195:325:1;25227:330:0;-1:-1:-1;25307:16:0;:23;;-1:-1:-1;;;;;;;25307:23:0;;;;;;25350:39;;-1:-1:-1;;;;;25374:14:0;;;2292:51:1;;25350:39:0;;2280:2:1;2265:18;25350:39:0;2146:203:1;11523:836:0;1820:13;:11;:13::i;:::-;11584:12:::1;::::0;::::1;;11583:13;11575:28;;;::::0;-1:-1:-1;;;11575:28:0;;14727:2:1;11575:28:0::1;::::0;::::1;14709:21:1::0;14766:1;14746:18;;;14739:29;-1:-1:-1;;;14784:18:1;;;14777:32;14826:18;;11575:28:0::1;14525:325:1::0;11575:28:0::1;11614:12;:19:::0;;-1:-1:-1;;11614:19:0::1;11629:4;11614:19;::::0;;11705:17:::1;::::0;11746:10:::1;::::0;11705:52:::1;::::0;-1:-1:-1;;;11705:52:0;;11739:4:::1;11705:52;::::0;::::1;15067:34:1::0;-1:-1:-1;;;;;11746:10:0;;::::1;15117:18:1::0;;;15110:43;11705:17:0;::::1;::::0;:25:::1;::::0;15002:18:1;;11705:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11689:13;:68:::0;;-1:-1:-1;;;;;;11689:68:0::1;-1:-1:-1::0;;;;;11689:68:0;;;::::1;::::0;;::::1;::::0;;11823:131:::1;;11887:17;::::0;11931:10:::1;::::0;11887:55:::1;::::0;-1:-1:-1;;;11887:55:0;;11924:4:::1;11887:55;::::0;::::1;15067:34:1::0;-1:-1:-1;;;;;11931:10:0;;::::1;15117:18:1::0;;;15110:43;11887:17:0;::::1;::::0;:28:::1;::::0;15002:18:1;;11887:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11871:13;:71:::0;;-1:-1:-1;;;;;;11871:71:0::1;-1:-1:-1::0;;;;;11871:71:0;;;::::1;::::0;;;::::1;::::0;;11823:131:::1;11982:13;::::0;-1:-1:-1;;;;;11982:13:0::1;11974:42;;;::::0;-1:-1:-1;;;11974:42:0;;15622:2:1;11974:42:0::1;::::0;::::1;15604:21:1::0;15661:1;15641:18;;;15634:29;-1:-1:-1;;;15679:18:1;;;15672:32;15721:18;;11974:42:0::1;15420:325:1::0;11974:42:0::1;12061:16;::::0;12029:69:::1;::::0;12046:4:::1;::::0;-1:-1:-1;;;;;12061:16:0::1;-1:-1:-1::0;;12029:8:0::1;:69::i;:::-;12134:10;::::0;12162:16:::1;::::0;12127:72:::1;::::0;-1:-1:-1;;;12127:72:0;;-1:-1:-1;;;;;12134:10:0;;::::1;::::0;12127:26:::1;::::0;:72:::1;::::0;12162:16;::::1;::::0;-1:-1:-1;;12181:17:0;12127:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12119:87;;;::::0;-1:-1:-1;;;12119:87:0;;15952:2:1;12119:87:0::1;::::0;::::1;15934:21:1::0;15991:1;15971:18;;;15964:29;-1:-1:-1;;;16009:18:1;;;16002:32;16051:18;;12119:87:0::1;15750:325:1::0;12119:87:0::1;12224:10;::::0;12244:13:::1;::::0;12217:60:::1;::::0;-1:-1:-1;;;12217:60:0;;-1:-1:-1;;;;;12224:10:0;;::::1;::::0;12217:26:::1;::::0;:60:::1;::::0;12244:13;::::1;::::0;-1:-1:-1;;12259:17:0;12217:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12318:13:0::1;::::0;12288:63:::1;::::0;-1:-1:-1;;;12288:63:0;;12303:4:::1;::::0;12288:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;12318:13:0::1;::::0;-1:-1:-1;;12333:17:0;12288:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11523:836::o:0;27150:1333::-;1820:13;:11;:13::i;:::-;27281:1:::1;27266:12;:16;:35;;;;;27300:1;27286:11;:15;27266:35;27258:50;;;;-1:-1:-1::0;;;27258:50:0::1;;;;;;;:::i;:::-;27327:46;::::0;-1:-1:-1;;;27327:46:0;;27342:4:::1;27327:46;::::0;::::1;2292:51:1::0;;;27377:12:0;;27327:31:::1;::::0;2265:18:1;;27327:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;27319:77;;;::::0;-1:-1:-1;;;27319:77:0;;16612:2:1;27319:77:0::1;::::0;::::1;16594:21:1::0;16651:1;16631:18;;;16624:29;-1:-1:-1;;;16669:18:1;;;16662:32;16711:18;;27319:77:0::1;16410:325:1::0;27319:77:0::1;27422:10;::::0;27415:43:::1;::::0;-1:-1:-1;;;27415:43:0;;27452:4:::1;27415:43;::::0;::::1;2292:51:1::0;27462:11:0;;-1:-1:-1;;;;;27422:10:0::1;::::0;27415:28:::1;::::0;2265:18:1;;27415:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;27407:73;;;::::0;-1:-1:-1;;;27407:73:0;;16942:2:1;27407:73:0::1;::::0;::::1;16924:21:1::0;16981:1;16961:18;;;16954:29;-1:-1:-1;;;16999:18:1;;;16992:32;17041:18;;27407:73:0::1;16740:325:1::0;27407:73:0::1;27574:25;27633:27;8765:2;::::0;27633:27:::1;:::i;:::-;27602;8709:2;27602:11:::0;:27:::1;:::i;:::-;:59;;;;:::i;:::-;27574:87:::0;-1:-1:-1;27672:23:0::1;27698:31;27574:87:::0;27698:11;:31:::1;:::i;:::-;27672:57:::0;-1:-1:-1;27824:26:0::1;27885:27;8765:2;::::0;27885:27:::1;:::i;:::-;27853:28;8709:2;27853:12:::0;:28:::1;:::i;:::-;:60;;;;:::i;:::-;27824:89;;27985:1;27964:18;:22;:47;;;;;28010:1;27990:17;:21;27964:47;27960:136;;;28028:56;28046:18;28066:17;28028;:56::i;:::-;28165:19:::0;;28161:315:::1;;28201:24;28268:3;28228:37;9278:2;28228:15:::0;:37:::1;:::i;:::-;:43;;;;:::i;:::-;28201:70:::0;-1:-1:-1;28286:23:0::1;28312:34;28201:70:::0;28312:15;:34:::1;:::i;:::-;28286:60;;28375:42;28400:16;28375:24;:42::i;:::-;28432:32;28448:15;28432;:32::i;:::-;28186:290;;28161:315;27247:1236;;;27150:1333:::0;;:::o;26075:535::-;1820:13;:11;:13::i;:::-;26164:14:::1;::::0;-1:-1:-1;;;;;26164:14:0::1;26156:43;;;::::0;-1:-1:-1;;;26156:43:0;;6470:2:1;26156:43:0::1;::::0;::::1;6452:21:1::0;6509:1;6489:18;;;6482:29;-1:-1:-1;;;6527:18:1;;;6520:32;6569:18;;26156:43:0::1;6268:325:1::0;26156:43:0::1;26227:1;26218:6;:10;26210:25;;;;-1:-1:-1::0;;;26210:25:0::1;;;;;;;:::i;:::-;26327:10;::::0;26352:14:::1;::::0;26320:70:::1;::::0;-1:-1:-1;;;26320:70:0;;-1:-1:-1;;;;;26327:10:0;;::::1;::::0;26320:31:::1;::::0;:70:::1;::::0;26352:14;::::1;::::0;26376:4:::1;::::0;26383:6;;26320:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26320:70:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;26320:70:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;26316:287;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;26536:6;26511:32;;;;;;;;:::i;26316:287::-;;;26579:12;::::0;-1:-1:-1;;;26579:12:0;;17711:2:1;26579:12:0::1;::::0;::::1;17693:21:1::0;17750:1;17730:18;;;17723:29;-1:-1:-1;;;17768:18:1;;;17761:32;17810:18;;26579:12:0::1;17509:325:1::0;26316:287:0::1;-1:-1:-1::0;26411:24:0::1;::::0;816:25:1;;;26411:24:0::1;::::0;804:2:1;789:18;26411:24:0::1;;;;;;;;26075:535:::0;:::o;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;25613:380::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;25703:29:0;::::1;25695:44;;;::::0;-1:-1:-1;;;25695:44:0;;18041:2:1;25695:44:0::1;::::0;::::1;18023:21:1::0;18080:1;18060:18;;;18053:29;-1:-1:-1;;;18098:18:1;;;18091:32;18140:18;;25695:44:0::1;17839:325:1::0;25695:44:0::1;25772:14;::::0;;-1:-1:-1;;;;;25797:32:0;;::::1;-1:-1:-1::0;;;;;;25840:24:0;;;;;;;25934:51:::1;::::0;;25772:14;;;::::1;15067:34:1::0;;;15132:2;15117:18;;15110:43;;;;25934:51:0::1;::::0;15002:18:1;25934:51:0::1;;;;;;;;25684:309;25613:380:::0;:::o;3400:182::-;3470:4;3503:10;3524:28;3503:10;3541:2;3545:6;3524:9;:28::i;26692:358::-;1820:13;:11;:13::i;:::-;26775:1:::1;26766:6;:10;26758:25;;;;-1:-1:-1::0;;;26758:25:0::1;;;;;;;:::i;:::-;26802:46;::::0;-1:-1:-1;;;26802:46:0;;26817:4:::1;26802:46;::::0;::::1;2292:51:1::0;;;26852:6:0;;26802:31:::1;::::0;2265:18:1;;26802:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;26794:71;;;::::0;-1:-1:-1;;;26794:71:0;;6989:2:1;26794:71:0::1;::::0;::::1;6971:21:1::0;7028:1;7008:18;;;7001:29;-1:-1:-1;;;7046:18:1;;;7039:32;7088:18;;26794:71:0::1;6787:325:1::0;26794:71:0::1;26886:21;26910:20;26923:6;26910:12;:20::i;:::-;26886:44:::0;-1:-1:-1;26955:17:0;;26951:92:::1;;26994:37;::::0;;5859:25:1;;;5915:2;5900:18;;5893:34;;;26994:37:0::1;::::0;5832:18:1;26994:37:0::1;5685:248:1::0;22799:166:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;22873:21:0;::::1;22865:36;;;::::0;-1:-1:-1;;;22865:36:0;;18371:2:1;22865:36:0::1;::::0;::::1;18353:21:1::0;18410:1;18390:18;;;18383:29;-1:-1:-1;;;18428:18:1;;;18421:32;18470:18;;22865:36:0::1;18169:325:1::0;22865:36:0::1;22912:16;:45:::0;;-1:-1:-1;;;;;;22912:45:0::1;-1:-1:-1::0;;;;;22912:45:0;;;::::1;::::0;;;::::1;::::0;;22799:166::o;23930:958::-;1820:13;:11;:13::i;:::-;24065:16:::1;::::0;24033:69:::1;::::0;24050:4:::1;::::0;-1:-1:-1;;;;;24065:16:0::1;-1:-1:-1::0;;24033:8:0::1;:69::i;:::-;24181:10;::::0;24209:16:::1;::::0;24174:72:::1;::::0;-1:-1:-1;;;24174:72:0;;-1:-1:-1;;;;;24181:10:0;;::::1;::::0;24174:26:::1;::::0;:72:::1;::::0;24209:16;::::1;::::0;-1:-1:-1;;24228:17:0;24174:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24174:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24174:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24170:193:::0;::::1;;-1:-1:-1::0;24285:10:0::1;::::0;24305:16:::1;::::0;24267:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;24285:10:0;;::::1;::::0;24305:16;::::1;::::0;-1:-1:-1;;24324:17:0;24267:75:::1;:::i;:::-;;;;;;;;24170:193;24438:13;::::0;-1:-1:-1;;;;;24438:13:0::1;:27:::0;24434:447:::1;;24493:10;::::0;24513:13:::1;::::0;24486:60:::1;::::0;-1:-1:-1;;;24486:60:0;;-1:-1:-1;;;;;24493:10:0;;::::1;::::0;24486:26:::1;::::0;:60:::1;::::0;24513:13;::::1;::::0;-1:-1:-1;;24528:17:0;24486:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24486:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24486:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24482:177:::0;::::1;;-1:-1:-1::0;24589:10:0::1;::::0;24601:13:::1;::::0;24571:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;24589:10:0;;::::1;::::0;24601:13;::::1;::::0;-1:-1:-1;;24616:17:0;24571:63:::1;:::i;:::-;;;;;;;;24482:177;24721:13;::::0;24691:63:::1;::::0;-1:-1:-1;;;24691:63:0;;24706:4:::1;::::0;24691:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;24721:13:0::1;::::0;-1:-1:-1;;24736:17:0;24691:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24691:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24691:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24687:183:::0;::::1;;-1:-1:-1::0;24812:13:0::1;::::0;24779:66:::1;::::0;::::1;::::0;::::1;::::0;24805:4:::1;::::0;-1:-1:-1;;;;;24812:13:0::1;::::0;-1:-1:-1;;24827:17:0;24779:66:::1;:::i;2064:165::-:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;2153:22:0;::::1;2145:37;;;::::0;-1:-1:-1;;;2145:37:0;;18701:2:1;2145:37:0::1;::::0;::::1;18683:21:1::0;18740:1;18720:18;;;18713:29;-1:-1:-1;;;18758:18:1;;;18751:32;18800:18;;2145:37:0::1;18499:325:1::0;2145:37:0::1;2193:28;2212:8;2193:18;:28::i;5119:256::-:0;-1:-1:-1;;;;;5221:19:0;;;;;;:44;;-1:-1:-1;;;;;;5244:21:0;;;;5221:44;5213:59;;;;-1:-1:-1;;;5213:59:0;;19031:2:1;5213:59:0;;;19013:21:1;19070:1;19050:18;;;19043:29;-1:-1:-1;;;19088:18:1;;;19081:32;19130:18;;5213:59:0;18829:325:1;5213:59:0;-1:-1:-1;;;;;5283:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5335:32;;816:25:1;;;5335:32:0;;789:18:1;5335:32:0;;;;;;;5119:256;;;:::o;5383:311::-;-1:-1:-1;;;;;3697:18:0;;;5484:24;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5555:26;;;;5547:41;;;;-1:-1:-1;;;5547:41:0;;19361:2:1;5547:41:0;;;19343:21:1;19400:1;19380:18;;;19373:29;-1:-1:-1;;;19418:18:1;;;19411:32;19460:18;;5547:41:0;19159:325:1;5547:41:0;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;:::-;5473:221;5383:311;;;:::o;12367:2106::-;12555:7;;;;;;;12554:8;:41;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12580:15:0;;;1934:6;;12580:15;;12554:41;:72;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12613:13:0;;;1934:6;;12613:13;;12554:72;:111;;;;-1:-1:-1;;;;;;12644:21:0;;12660:4;12644:21;;12554:111;:148;;;;-1:-1:-1;12689:13:0;;-1:-1:-1;;;;;12683:19:0;;;12689:13;;12683:19;12554:148;12536:1668;;;12759:17;12799:3;12779:17;8654:1;12779:6;:17;:::i;:::-;:23;;;;:::i;:::-;12759:43;-1:-1:-1;12835:13:0;;12831:1362;;12929:23;12983:3;12955:25;8709:2;12955:9;:25;:::i;:::-;:31;;;;:::i;:::-;12929:57;-1:-1:-1;13005:21:0;13055:3;13029:23;8765:2;13029:9;:23;:::i;:::-;:29;;;;:::i;:::-;13005:53;-1:-1:-1;13153:22:0;13178:18;13187:9;13178:6;:18;:::i;:::-;13153:43;;13276:47;13292:4;13306;13313:9;13276:15;:47::i;:::-;13411:41;13427:4;13433:2;13437:14;13411:15;:41::i;:::-;13567:15;13540:23;;:42;;;;;;;:::i;:::-;;;;;;;;13626:13;13601:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;13783:21:0;;13757:23;;8934:12;;13757:47;;;:::i;:::-;:73;13753:170;;13859:4;-1:-1:-1;;;;;13859:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13855:49;;14005:57;14019:4;8827:11;14025:15;14035:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14025:15;:36;;14005:13;:57::i;:::-;14081:53;14095:2;8827:11;14099:13;14109:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;12831:1362;12714:1490;12536:1668;14252:33;14268:4;14274:2;14278:6;14252:15;:33::i;:::-;14344:57;14358:4;8827:11;14364:15;14374:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14344:57;14412:53;14426:2;8827:11;14430:13;14440:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;1956:100;2031:10;2020:7;1934:6;;-1:-1:-1;;;;;1934:6:0;;1861:87;2020:7;-1:-1:-1;;;;;2020:21:0;;2012:36;;;;-1:-1:-1;;;2012:36:0;;19691:2:1;2012:36:0;;;19673:21:1;19730:1;19710:18;;;19703:29;-1:-1:-1;;;19748:18:1;;;19741:32;19790:18;;2012:36:0;19489:325:1;18249:1140:0;18310:7;18334:12;18350:1;18334:17;18330:31;;-1:-1:-1;18360:1:0;;18249:1140;-1:-1:-1;18249:1140:0:o;18330:31::-;18406:16;;18374:64;;18391:4;;-1:-1:-1;;;;;18406:16:0;18425:12;18374:8;:64::i;:::-;18512:16;;;18526:1;18512:16;;;;;;;;18488:21;;18512:16;;;;;;;;;;-1:-1:-1;18512:16:0;18488:40;;18557:4;18539;18544:1;18539:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18539:23:0;;;:7;;;;;;;;;:23;18583:10;;18573:7;;18583:10;;;18573:4;;18583:10;;18573:7;;;;;;:::i;:::-;-1:-1:-1;;;;;18573:20:0;;;:7;;;;;;;;;:20;18664:10;;18657:43;;-1:-1:-1;;;18657:43:0;;18694:4;18657:43;;;2292:51:1;18635:19:0;;18664:10;;;;;18657:28;;2265:18:1;;18657:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18717:16;;18635:65;;-1:-1:-1;;;;;;18717:16:0;:70;18802:12;18717:16;18845:4;18872;18912:21;:15;18930:3;18912:21;:::i;:::-;18717:227;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18713:669;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;19263:6:0;19252:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;19292:1:0;;18249:1140;-1:-1:-1;;;;18249:1140:0:o;18713:669::-;;;-1:-1:-1;;;;;;;;;;;19332:15:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;19369:1:0;;18249:1140;-1:-1:-1;;;18249:1140:0:o;18713:669::-;18988:10;;18981:43;;-1:-1:-1;;;18981:43:0;;19018:4;18981:43;;;2292:51:1;18960:18:0;;-1:-1:-1;;;;;18988:10:0;;18981:28;;2265:18:1;;18981:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18960:64;-1:-1:-1;19039:21:0;19063:24;19076:11;18960:64;19063:24;:::i;:::-;19107:43;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;19039:48:0;;-1:-1:-1;19107:43:0;;5832:18:1;19107:43:0;;;;;;;19172:13;18249:1140;-1:-1:-1;;;;;18249:1140:0:o;19397:1049::-;19502:23;;;:49;;-1:-1:-1;19529:22:0;;19502:49;19498:88;;;19397:1049;;:::o;19498:88::-;19648:10;;19676:16;;19641:72;;-1:-1:-1;;;19641:72:0;;-1:-1:-1;;;;;19648:10:0;;;;19641:26;;:72;;19676:16;;;19695:17;;19641:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19798:16:0;;19766:70;;19783:4;;-1:-1:-1;;;;;19798:16:0;19817:18;19766:8;:70::i;:::-;19853:16;;19925:10;;-1:-1:-1;;;;;19853:16:0;;;;:29;;19905:4;;19925:10;19950:18;19983:17;20059:3;20037:18;9196:2;20059:3;20037:18;:::i;:::-;20015:41;;:18;:41;:::i;:::-;:47;;;;:::i;:::-;20120:3;20098:18;9196:2;20120:3;20098:18;:::i;:::-;20077:40;;:17;:40;:::i;:::-;:46;;;;:::i;:::-;20146:4;20166:21;:15;20184:3;20166:21;:::i;:::-;19853:345;;;;;;-1:-1:-1;;;;;;19853:345:0;;;-1:-1:-1;;;;;21266:15:1;;;19853:345:0;;;21248:34:1;21318:15;;;21298:18;;;21291:43;21350:18;;;21343:34;;;;21393:18;;;21386:34;;;;21436:19;;;21429:35;;;;21480:19;;;21473:35;21545:15;;;21524:19;;;21517:44;21577:19;;;21570:35;;;;21182:19;;19853:345:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;19853:345:0;;;;;;;;-1:-1:-1;;19853:345:0;;;;;;;;;;;;:::i;:::-;;;19849:590;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20339:26;20358:6;20339:26;;;;;;:::i;:::-;;;;;;;;20285:92;21932:859:::1;21855:936:::0;:::o;19849:590::-;;;20404:23;;;;;;:::i;19849:590::-;-1:-1:-1;;20219:53:0;;;5859:25:1;;;5915:2;5900:18;;5893:34;;;20219:53:0;;-1:-1:-1;5832:18:1;20219:53:0;5685:248:1;20454:343:0;20532:16;;;:48;;-1:-1:-1;20552:14:0;;-1:-1:-1;;;;;20552:14:0;:28;20532:48;20528:61;;;20454:343;:::o;20528:61::-;20620:10;;20641:14;;20613:56;;-1:-1:-1;;;20613:56:0;;-1:-1:-1;;;;;20620:10:0;;;;20613:27;;:56;;20641:14;;;20657:11;;20613:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20613:56:0;;;;;;;;-1:-1:-1;;20613:56:0;;;;;;;;;;;;:::i;:::-;;;20609:181;;20758:20;;;;;21818:2:1;21800:21;;;21857:1;21837:18;;;21830:29;-1:-1:-1;;;21890:2:1;21875:18;;21868:33;21933:2;21918:18;;21616:326;20805:735:0;20874:16;;;:39;;-1:-1:-1;20894:7:0;:14;:19;20874:39;20870:78;;;20805:735;:::o;20870:78::-;20999:7;:14;20960:22;;20985:28;;:11;:28;:::i;:::-;20960:53;;21039:9;21034:499;21058:7;:14;21054:18;;21034:499;;;21120:1;-1:-1:-1;;;;;21098:24:0;:7;21106:1;21098:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21098:10:0;:24;;;;:55;;;21148:4;-1:-1:-1;;;;;21126:27:0;:7;21134:1;21126:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21126:10:0;:27;;21098:55;:86;;;;-1:-1:-1;21171:13:0;;21157:7;:10;;-1:-1:-1;;;;;21171:13:0;;;;21165:1;;21157:10;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21157:10:0;:27;;21098:86;21094:428;;;21216:10;;21237:7;:10;;-1:-1:-1;;;;;21216:10:0;;;;21209:27;;21237:7;21245:1;;21237:10;;;;;;:::i;:::-;;;;;;;;;;;21209:55;;-1:-1:-1;;;;;;21209:55:0;;;;;;;;;-1:-1:-1;;;;;21237:10:0;;21249:14;;21209:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21209:55:0;;;;;;;;-1:-1:-1;;21209:55:0;;;;;;;;;;;;:::i;:::-;;;21205:302;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21393:21;21407:6;21393:21;;;;;;:::i;:::-;;;;;;;;21331:103;21205:302;;;;;21469:18;;;;;;:::i;:::-;;;;;;;;21205:302;;;;;21074:3;;;;:::i;:::-;;;;21034:499;;2237:191;2330:6;;;-1:-1:-1;;;;;2347:17:0;;;-1:-1:-1;;;;;;2347:17:0;;;;;;;2380:40;;2330:6;;;2347:17;2330:6;;2380:40;;2311:16;;2380:40;2300:128;2237:191;:::o;4196:507::-;-1:-1:-1;;;;;4293:18:0;;;;;;:38;;-1:-1:-1;;;;;;4315:16:0;;;;4293:38;4285:53;;;;-1:-1:-1;;;4285:53:0;;22289:2:1;4285:53:0;;;22271:21:1;22328:1;22308:18;;;22301:29;-1:-1:-1;;;22346:18:1;;;22339:32;22388:18;;4285:53:0;22087:325:1;4285:53:0;4349:38;4370:4;4376:2;4380:6;4349:20;:38::i;:::-;-1:-1:-1;;;;;4420:15:0;;4398:19;4420:15;;;;;;;;;;;4454:21;;;;4446:36;;;;-1:-1:-1;;;4446:36:0;;22619:2:1;4446:36:0;;;22601:21:1;22658:1;22638:18;;;22631:29;-1:-1:-1;;;22676:18:1;;;22669:32;22718:18;;4446:36:0;22417:325:1;4446:36:0;-1:-1:-1;;;;;4518:15:0;;;:9;:15;;;;;;;;;;;4536:20;;;4518:38;;4571:13;;;;;;;;;;:23;;;;;;4621:26;;816:25:1;;;4571:13:0;;4621:26;;789:18:1;4621:26:0;;;;;;;4658:37;4678:4;4684:2;4688:6;4658:19;:37::i;14481:779::-;14576:13;;-1:-1:-1;;;;;14565:24:0;;;14576:13;;14565:24;;;;:52;;-1:-1:-1;;;;;;14593:24:0;;14612:4;14593:24;;14565:52;14561:692;;;14638:14;:36;;;;-1:-1:-1;;;;;;14657:17:0;;;;;;:8;:17;;;;;;;;14656:18;14638:36;14634:608;;;-1:-1:-1;;;;;;14695:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;14695:24:0;14715:4;14695:24;;;;;;14738:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;14738:21:0;;;;;;21855:936::o;14634:608::-;14786:14;14785:15;:36;;;;-1:-1:-1;;;;;;14804:17:0;;;;;;:8;:17;;;;;;;;14785:36;14781:461;;;-1:-1:-1;;;;;14842:17:0;;14862:5;14842:17;;;:8;:17;;;;;:25;;-1:-1:-1;;14842:25:0;;;14950:277;14974:7;:14;14970:18;;14950:277;;;15036:7;-1:-1:-1;;;;;15022:21:0;:7;15030:1;15022:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15022:10:0;:21;15018:190;;15085:7;15093:14;;:18;;15110:1;;15093:18;:::i;:::-;15085:27;;;;;;;;:::i;:::-;;;;;;;;;;;15072:7;:10;;-1:-1:-1;;;;;15085:27:0;;;;15080:1;;15072:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15072:40:0;;;;;-1:-1:-1;;;;;15072:40:0;;;;;;15139:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15139:13:0;;;;;-1:-1:-1;;;;;;15139:13:0;;;;;;15179:5;;15018:190;14990:3;;;;:::i;:::-;;;;14950:277;;14:250:1;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:1;1931:18;;;;1918:32;;1500:456::o;1961:180::-;2020:6;2073:2;2061:9;2052:7;2048:23;2044:32;2041:52;;;2089:1;2086;2079:12;2041:52;-1:-1:-1;2112:23:1;;1961:180;-1:-1:-1;1961:180:1:o;2543:461::-;2596:3;2634:5;2628:12;2661:6;2656:3;2649:19;2687:4;2716:2;2711:3;2707:12;2700:19;;2753:2;2746:5;2742:14;2774:1;2784:195;2798:6;2795:1;2792:13;2784:195;;;2863:13;;-1:-1:-1;;;;;2859:39:1;2847:52;;2919:12;;;;2954:15;;;;2895:1;2813:9;2784:195;;;-1:-1:-1;2995:3:1;;2543:461;-1:-1:-1;;;;;2543:461:1:o;3009:261::-;3188:2;3177:9;3170:21;3151:4;3208:56;3260:2;3249:9;3245:18;3237:6;3208:56;:::i;:::-;3200:64;3009:261;-1:-1:-1;;;3009:261:1:o;3508:247::-;3567:6;3620:2;3608:9;3599:7;3595:23;3591:32;3588:52;;;3636:1;3633;3626:12;3588:52;3675:9;3662:23;3694:31;3719:5;3694:31;:::i;3760:248::-;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:52;;;3905:1;3902;3895:12;3857:52;-1:-1:-1;;3928:23:1;;;3998:2;3983:18;;;3970:32;;-1:-1:-1;3760:248:1:o;4013:388::-;4081:6;4089;4142:2;4130:9;4121:7;4117:23;4113:32;4110:52;;;4158:1;4155;4148:12;4110:52;4197:9;4184:23;4216:31;4241:5;4216:31;:::i;:::-;4266:5;-1:-1:-1;4323:2:1;4308:18;;4295:32;4336:33;4295:32;4336:33;:::i;:::-;4388:7;4378:17;;;4013:388;;;;;:::o;4640:380::-;4719:1;4715:12;;;;4762;;;4783:61;;4837:4;4829:6;4825:17;4815:27;;4783:61;4890:2;4882:6;4879:14;4859:18;4856:38;4853:161;;4936:10;4931:3;4927:20;4924:1;4917:31;4971:4;4968:1;4961:15;4999:4;4996:1;4989:15;4853:161;;4640:380;;;:::o;6598:184::-;6668:6;6721:2;6709:9;6700:7;6696:23;6692:32;6689:52;;;6737:1;6734;6727:12;6689:52;-1:-1:-1;6760:16:1;;6598:184;-1:-1:-1;6598:184:1:o;7729:306::-;7817:6;7825;7833;7886:2;7874:9;7865:7;7861:23;7857:32;7854:52;;;7902:1;7899;7892:12;7854:52;7931:9;7925:16;7915:26;;7981:2;7970:9;7966:18;7960:25;7950:35;;8025:2;8014:9;8010:18;8004:25;7994:35;;7729:306;;;;;:::o;8700:274::-;-1:-1:-1;;;;;8892:32:1;;;;8874:51;;8956:2;8941:18;;8934:34;8862:2;8847:18;;8700:274::o;8979:277::-;9046:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:52;;;9115:1;9112;9105:12;9067:52;9147:9;9141:16;9200:5;9193:13;9186:21;9179:5;9176:32;9166:60;;9222:1;9219;9212:12;9921:127;9982:10;9977:3;9973:20;9970:1;9963:31;10013:4;10010:1;10003:15;10037:4;10034:1;10027:15;10053:125;10118:9;;;10139:10;;;10136:36;;;10152:18;;:::i;10183:375::-;-1:-1:-1;;;;;10441:15:1;;;10423:34;;10493:15;;;;10488:2;10473:18;;10466:43;10540:2;10525:18;;10518:34;;;;10373:2;10358:18;;10183:375::o;11225:168::-;11298:9;;;11329;;11346:15;;;11340:22;;11326:37;11316:71;;11367:18;;:::i;11398:217::-;11438:1;11464;11454:132;;11508:10;11503:3;11499:20;11496:1;11489:31;11543:4;11540:1;11533:15;11571:4;11568:1;11561:15;11454:132;-1:-1:-1;11600:9:1;;11398:217::o;11620:128::-;11687:9;;;11708:11;;;11705:37;;;11722:18;;:::i;12413:179::-;12448:3;12490:1;12472:16;12469:23;12466:120;;;12536:1;12533;12530;12515:23;-1:-1:-1;12573:1:1;12567:8;12562:3;12558:18;12466:120;12413:179;:::o;12729:346::-;12839:2;12820:13;;-1:-1:-1;;12816:27:1;12804:40;;12874:18;12859:34;;12895:22;;;12856:62;12853:185;;;12960:10;12955:3;12951:20;12948:1;12941:31;12995:4;12992:1;12985:15;13023:4;13020:1;13013:15;12853:185;13054:2;13047:22;-1:-1:-1;;12729:346:1:o;13080:671::-;13119:3;13161:4;13143:16;13140:26;13137:39;;;13080:671;:::o;13137:39::-;13203:2;13197:9;-1:-1:-1;;13268:16:1;13264:25;;13261:1;13197:9;13240:50;13319:4;13313:11;13343:16;13378:18;13449:2;13442:4;13434:6;13430:17;13427:25;13422:2;13414:6;13411:14;13408:45;13405:58;;;13456:5;;;;;13080:671;:::o;13405:58::-;13493:6;13487:4;13483:17;13472:28;;13529:3;13523:10;13556:2;13548:6;13545:14;13542:27;;;13562:5;;;;;;13080:671;:::o;13542:27::-;13646:2;13627:16;13621:4;13617:27;13613:36;13606:4;13597:6;13592:3;13588:16;13584:27;13581:69;13578:82;;;13653:5;;;;;;13080:671;:::o;13578:82::-;13669:57;13720:4;13711:6;13703;13699:19;13695:30;13689:4;13669:57;:::i;:::-;-1:-1:-1;13742:3:1;;13080:671;-1:-1:-1;;;;;13080:671:1:o;13756:434::-;-1:-1:-1;;;14013:3:1;14006:19;13988:3;14054:6;14048:13;14070:74;14137:6;14133:1;14128:3;14124:11;14117:4;14109:6;14105:17;14070:74;:::i;:::-;14164:16;;;;14182:1;14160:24;;13756:434;-1:-1:-1;;13756:434:1:o;15164:251::-;15234:6;15287:2;15275:9;15266:7;15262:23;15258:32;15255:52;;;15303:1;15300;15293:12;15255:52;15335:9;15329:16;15354:31;15379:5;15354:31;:::i;16080:325::-;16282:2;16264:21;;;16321:1;16301:18;;;16294:29;-1:-1:-1;;;16354:2:1;16339:18;;16332:32;16396:2;16381:18;;16080:325::o;17070:434::-;-1:-1:-1;;;17327:3:1;17320:19;17302:3;17368:6;17362:13;17384:74;17451:6;17447:1;17442:3;17438:11;17431:4;17423:6;17419:17;17384:74;:::i;19819:127::-;19880:10;19875:3;19871:20;19868:1;19861:31;19911:4;19908:1;19901:15;19935:4;19932:1;19925:15;19951:582;20250:6;20239:9;20232:25;20293:6;20288:2;20277:9;20273:18;20266:34;20336:3;20331:2;20320:9;20316:18;20309:31;20213:4;20357:57;20409:3;20398:9;20394:19;20386:6;20357:57;:::i;:::-;-1:-1:-1;;;;;20450:32:1;;;;20445:2;20430:18;;20423:60;-1:-1:-1;20514:3:1;20499:19;20492:35;20349:65;19951:582;-1:-1:-1;;;19951:582:1:o;20538:324::-;20740:2;20722:21;;;20779:1;20759:18;;;20752:29;-1:-1:-1;;;20812:2:1;20797:18;;20790:31;20853:2;20838:18;;20538:324::o;21947:135::-;21986:3;22007:17;;;22004:43;;22027:18;;:::i;:::-;-1:-1:-1;22074:1:1;22063:13;;21947:135::o;22747:127::-;22808:10;22803:3;22799:20;22796:1;22789:31;22839:4;22836:1;22829:15;22863:4;22860:1;22853:15

Swarm Source

ipfs://c1d8affd27ef60ef3f39b8411ac0d0c59d161493f1d475fc7a0dcef036f2136b
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.