S Price: $0.530274 (-11.17%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

4

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 FARM

Value
$0.00
0x4f01c326fdf6310891e6d4ead898c07d344fb2bc
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.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
// pragma solidity ^0.8.19 optimizer runs=200;

// 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.
 */
abstract 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), "E0");
        _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);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "E5");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function 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);

    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);
}

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;
    function sync() 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 MIN_HOLDER_AMOUNT = 100 * 10**18; // 100 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 1000 * 10**18; // 1000 tokens minimum for processing
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance
    uint256 private constant TREASURY_PERCENTAGE = 25; // 25% to treasury
    uint256 private constant HOLDERS_PERCENTAGE = 75; // 75% to holders

    // Metropolis DEX addresses - hardcoded
    IMetropolisRouter public constant metropolisRouter = IMetropolisRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3);
    IMetropolisFactory public constant metropolisFactory = IMetropolisFactory(0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0);
    address public constant sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
    address public liquidityPair;
    // Treasury wallet hardcoded
    address public constant treasuryWallet = 0xE68bD755C87749F6144f6762283698742E0daA0c;

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

    // Optimize events
    event AirdropDistributed(uint256 indexed amount, uint256 indexed holdersCount);
    event TreasuryTransferred(uint256 indexed amount, address indexed treasuryWallet);
    event SwapFailed(string indexed reason);
    event ProcessStarted(uint256 indexed tokensForAirdrop);
    event SwapSuccessful(uint256 indexed tokensSwapped, uint256 indexed wethReceived);
    event PairReservesUpdated(uint256 indexed farmReserve, uint256 indexed wethReserve);
    event ContractInitialized(address indexed router, address indexed factory, address indexed sonic);

    uint256 private _pendingAirdropTokens;
    bool private _initialized;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        // Toplam arzı mint et
        _mint(address(this), TOTAL_SUPPLY);
        
        // Kontrat başlangıç durumunu ayarla
        _initialized = false;
        _pendingAirdropTokens = 0;
        
        // Kontrat adreslerini kontrol et
        require(address(metropolisRouter) != address(0), "Invalid router address");
        require(address(metropolisFactory) != address(0), "Invalid factory address");
        require(sonicToken != address(0), "Invalid SONIC token address");
        require(treasuryWallet != address(0), "Invalid treasury wallet address");
    }

    function initialize() external onlyOwner {
        require(!_initialized, "E1");
        
        // 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), "E5");
        
        // Tüm onayları yenile
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        // SONIC token onayını kontrol et
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
        
        // Pair onaylarını kontrol et
        try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
        try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
        
        _initialized = true;
        emit ContractInitialized(address(metropolisRouter), address(metropolisFactory), sonicToken);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0) && to != address(0), "E0");
        
        // Skip tax for owner and contract transfers
        if (from == owner() || to == owner() || from == address(this) || to == address(this) || !_initialized) {
            super._transfer(from, to, amount);
            // Holder durumlarını güncelle
            _updateHolderStatus(from);
            _updateHolderStatus(to);
            return;
        }

        bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
        if (isSellOrBuy) {
            // Calculate tax amount (5%)
            uint256 totalTax = (amount * TAX_RATE) / 100;
            uint256 transferAmount = amount - totalTax;
            
            // First transfer main amount to recipient
            super._transfer(from, to, transferAmount);
            
            // Then transfer tax to contract
            super._transfer(from, address(this), totalTax);

            // Tüm tax'ı airdrop için ayır
            _pendingAirdropTokens += totalTax;

            // Try to process if we have enough tokens
            if (_pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS && holders.length > 0) {
                // Refresh all approvals first
                _approve(address(this), address(metropolisRouter), type(uint256).max);
                
                try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
                
                if (liquidityPair != address(0)) {
                    try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
                    try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
                }
                
                // Airdrop işlemini ayrı bir try-catch bloğunda çağır
                try this.processAirdrop() {} catch {}
            }
        } else {
            // Normal transfer without tax
            super._transfer(from, to, amount);
        }
        
        // Update holder status for both addresses
        _updateHolderStatus(from);
        _updateHolderStatus(to);
    }

    // _updateHolder fonksiyonu yerine yeni fonksiyon
    function _updateHolderStatus(address account) private {
        if (account != liquidityPair && account != address(this)) {
            uint256 balance = balanceOf(account);
            bool isCurrentlyHolder = isHolder[account];
            
            if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) {
                isHolder[account] = true;
                holders.push(account);
            } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) {
                isHolder[account] = false;
                _removeHolder(account);
            }
        }
    }

    function _removeHolder(address account) private {
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] == account) {
                holders[i] = holders[holders.length - 1];
                holders.pop();
                break;
            }
        }
    }

    function processAirdrop() external nonReentrant {
        require(_pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        require(_pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS, "E7");
        
        emit ProcessStarted(_pendingAirdropTokens);

        // Reset pending amounts
        uint256 tempAirdropTokens = _pendingAirdropTokens;
        _pendingAirdropTokens = 0;

        // Tüm tokenleri SONIC'e çevir
        uint256 sonicReceived = _swapTokensForSonic(tempAirdropTokens);
        
        // Airdrop dağıt
        if (sonicReceived > 0) {
            // Treasury için %25 ayır
            uint256 treasuryAmount = (sonicReceived * TREASURY_PERCENTAGE) / 100;
            uint256 holdersAmount = sonicReceived - treasuryAmount;
            
            // Treasury'ye gönder
            if (treasuryAmount > 0 && treasuryWallet != address(0)) {
                bool treasuryTransferSuccess = false;
                try IERC20(sonicToken).transfer(treasuryWallet, treasuryAmount) {
                    treasuryTransferSuccess = true;
                    emit TreasuryTransferred(treasuryAmount, treasuryWallet);
                } catch {
                    // Treasury transferi başarısız olursa, bu miktarı da holderlara dağıt
                    holdersAmount = sonicReceived;
                }
                
                if (!treasuryTransferSuccess) {
                    holdersAmount = sonicReceived;
                }
            } else {
                // Treasury wallet yoksa tüm miktarı holderlara dağıt
                holdersAmount = sonicReceived;
            }
            
            // Kalan %75'i holderlara dağıt
            if (holdersAmount > 0) {
                _processAirdrop(holdersAmount);
            }
        } else {
            // Swap başarısız olursa tokenleri geri ekle
            _pendingAirdropTokens = tempAirdropTokens;
        }
    }

    function _swapTokensForSonic(uint256 tokenAmount) private returns (uint256) {
        if (tokenAmount == 0) return 0;

        // Swap hesaplaması yapılıyor
        (bool success, uint256 expectedSonicOut, ) = _calculateSwapOutput(tokenAmount);
        if (!success || expectedSonicOut == 0) return 0;
        
        // Pair kontratına FARMER tokenları gönder
        super._transfer(address(this), liquidityPair, tokenAmount);
        
        // Pair'ı senkronize et
        try IMetropolisPair(liquidityPair).sync() {} catch {
            emit SwapFailed("PS");
            return 0;
        }
        
        // Router'a onayları yenile
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        // Router üzerinden swap yap
        uint256 minAmountOut = expectedSonicOut * (100 - MAX_SLIPPAGE) / 100; // %30 slippage toleransı ile
        
        // Swap için path oluştur: FARMER -> SONIC
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;
        
        uint256 initialSonicBalance = IERC20(sonicToken).balanceOf(address(this));
        
        try metropolisRouter.swapExactTokensForTokens(
            tokenAmount,
            minAmountOut,
            path,
            address(this), // Direkt kontrata gönder
            block.timestamp + 300
        ) {
            // Swap başarılı oldu, alınan SONIC miktarını hesapla
            uint256 finalSonicBalance = IERC20(sonicToken).balanceOf(address(this));
            uint256 received = finalSonicBalance - initialSonicBalance;
            
            if (received > 0) {
                emit SwapSuccessful(tokenAmount, received);
                return received;
            } else {
                emit SwapFailed("NS");
                return 0;
            }
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("UE");
            return 0;
        }
    }
    
    function _calculateSwapOutput(uint256 tokenAmount) private view returns (bool success, uint256 expectedOutput, bool isFarmerToken0) {
        if (tokenAmount == 0) return (false, 0, false);
        if (liquidityPair == address(0)) return (false, 0, false);
        
        try IMetropolisPair(liquidityPair).getReserves() returns (uint112 reserve0, uint112 reserve1, uint32) {
            // Token sıralamasını belirle
            try IMetropolisPair(liquidityPair).token0() returns (address token0) {
                isFarmerToken0 = token0 == address(this);
                
                // Farmer ve SONIC için rezervleri ayarla
                uint256 farmerReserve = isFarmerToken0 ? uint256(reserve0) : uint256(reserve1);
                uint256 sonicReserve = isFarmerToken0 ? uint256(reserve1) : uint256(reserve0);
                
                if (farmerReserve == 0 || sonicReserve == 0) {
                    return (false, 0, isFarmerToken0);
                }
                
                // Swap'tan beklenen çıktıyı hesapla (0.3% fee ile)
                uint256 amountInWithFee = tokenAmount * 997;
                uint256 numerator = amountInWithFee * sonicReserve;
                uint256 denominator = (farmerReserve * 1000) + amountInWithFee;
                expectedOutput = numerator / denominator;
                
                if (expectedOutput == 0) {
                    return (false, 0, isFarmerToken0);
                }
                
                return (true, expectedOutput, isFarmerToken0);
            } catch {
                return (false, 0, false);
            }
        } catch {
            return (false, 0, false);
        }
    }

    function _processAirdrop(uint256 sonicAmount) private {
        if (sonicAmount == 0 || holders.length == 0) return;
        
        // Geçerli holder sayısını hesapla
        uint256 validHolderCount = 0;
        for (uint256 i = 0; i < holders.length && i < 100; i++) {
            if (holders[i] != address(0) && holders[i] != liquidityPair && holders[i] != address(this)) {
                validHolderCount++;
            }
        }
        
        if (validHolderCount == 0) return;
        
        uint256 amountPerHolder = sonicAmount / validHolderCount;
        if (amountPerHolder == 0) return;

        uint256 successfulTransfers = 0;
        uint256 totalDistributed = 0;

        for (uint256 i = 0; i < holders.length && i < 100; i++) {
            address holderAddress = holders[i];
            if (holderAddress != address(0) && holderAddress != liquidityPair && holderAddress != address(this)) {
                try IERC20(sonicToken).transfer(holderAddress, amountPerHolder) {
                    successfulTransfers++;
                    totalDistributed += amountPerHolder;
                } catch {
                    // Transfer başarısız olursa bu holder'ı atla
                    continue;
                }
            }
        }
        
        emit AirdropDistributed(totalDistributed, successfulTransfers);
    }

    // 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(_initialized, "E1");
        require(msg.value > 0, "E8");
        require(tokenAmount > 0, "E9");
        require(liquidityPair != address(0), "E5");
        
        // Kontrat bakiyesini kontrol et
        uint256 contractBalance = IERC20(address(this)).balanceOf(address(this));
        require(contractBalance >= tokenAmount, "E2");

        // Router onaylarını yenile
        _approve(address(this), address(metropolisRouter), tokenAmount);
        
        // Likidite eklemeyi dene
        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0, // slippage koruması yok
            0, // slippage koruması yok
            msg.sender, // LP tokenları owner'a gönder
            block.timestamp + 300 // 5 dakika deadline
        ) returns (uint amountToken, uint amountETH, uint) {
            emit SwapSuccessful(amountToken, amountETH);
        } catch Error(string memory reason) {
            _approve(address(this), address(metropolisRouter), 0);
            revert(reason);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            revert("E4");
        }

        // Kalan ETH'yi geri gönder
        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            (bool success, ) = payable(msg.sender).call{value: remainingETH}("");
            require(success, "E3");
        }
        
        // Pair'ı senkronize et
        try IMetropolisPair(liquidityPair).sync() {} catch {}
    }

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

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        try this.processAirdrop() {} catch {}
    }

    function checkAndRefreshAllowances() external onlyOwner {
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
    }

    // Debug function
    function getSwapInfo() external view returns (uint256, uint256, bool, address) {
        return (
            balanceOf(address(this)),
            IERC20(sonicToken).allowance(address(this), address(metropolisRouter)),
            liquidityPair != address(0),
            liquidityPair
        );
    }

    function getPairReserves() public view returns (uint256 farmReserve, uint256 wethReserve) {
        if (liquidityPair == address(0)) return (0, 0);
        
        try IMetropolisPair(liquidityPair).getReserves() returns (uint112 reserve0, uint112 reserve1, uint32) {
            try IMetropolisPair(liquidityPair).token0() returns (address token0) {
                if (token0 == address(this)) {
                    return (uint256(reserve0), uint256(reserve1));
                } else {
                    return (uint256(reserve1), uint256(reserve0));
                }
            } catch {
                return (0, 0);
            }
        } catch {
            return (0, 0);
        }
    }

    function getMinimumOutputWithSlippage(uint256 amountIn) public view returns (uint256) {
        if (amountIn == 0) return 0;
        
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        // Swap'tan beklenen çıktıyı hesapla (0.3% fee ile)
        uint256 amountInWithFee = amountIn * 997; // 0.3% fee
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        uint256 amountOut = numerator / denominator;
        
        // Apply slippage tolerance (30%)
        return amountOut * (100 - MAX_SLIPPAGE) / 100;
    }

    // aprov all
    function refreshAllApprovals() external onlyOwner {
        // FARMER token onayları
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        // SONIC token onayları
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
        
        // Pair onayları
        if (liquidityPair != address(0)) {
            try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
            try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
            
            // Pair'ı senkronize etmeyi dene
            try IMetropolisPair(liquidityPair).sync() {} catch {}
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","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":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":true,"internalType":"address","name":"sonic","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":true,"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":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"TreasuryTransferred","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkAndRefreshAllowances","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getMinimumOutputWithSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairReserves","outputs":[{"internalType":"uint256","name":"farmReserve","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"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":[],"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":"processAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","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":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000845565b508060049081620000a2919062000845565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200098d565b60405180910390fd5b62000130816200038e60201b60201c565b506200014d3069d3c21bcecceda10000006200045460201b60201c565b6000600b60006101000a81548160ff0219169083151502179055506000600a81905550600073ffffffffffffffffffffffffffffffffffffffff167395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff1603620001f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ed90620009ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff16036200027c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002739062000a71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1673039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff160362000302576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f99062000ae3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1673e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff160362000388576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037f9062000b55565b60405180910390fd5b62000c81565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004bd9062000bc7565b60405180910390fd5b620004da60008383620005c160201b60201c565b8060026000828254620004ee919062000c18565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005a1919062000c64565b60405180910390a3620005bd60008383620005c660201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064d57607f821691505b60208210810362000663576200066262000605565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200068e565b620006d986836200068e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000726620007206200071a84620006f1565b620006fb565b620006f1565b9050919050565b6000819050919050565b620007428362000705565b6200075a62000751826200072d565b8484546200069b565b825550505050565b600090565b6200077162000762565b6200077e81848462000737565b505050565b5b81811015620007a6576200079a60008262000767565b60018101905062000784565b5050565b601f821115620007f557620007bf8162000669565b620007ca846200067e565b81016020851015620007da578190505b620007f2620007e9856200067e565b83018262000783565b50505b505050565b600082821c905092915050565b60006200081a60001984600802620007fa565b1980831691505092915050565b600062000835838362000807565b9150826002028217905092915050565b6200085082620005cb565b67ffffffffffffffff8111156200086c576200086b620005d6565b5b62000878825462000634565b62000885828285620007aa565b600060209050601f831160018114620008bd5760008415620008a8578287015190505b620008b4858262000827565b86555062000924565b601f198416620008cd8662000669565b60005b82811015620008f757848901518255600182019150602085019450602081019050620008d0565b8683101562000917578489015162000913601f89168262000807565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009756002836200092c565b915062000982826200093d565b602082019050919050565b60006020820190508181036000830152620009a88162000966565b9050919050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000620009e76016836200092c565b9150620009f482620009af565b602082019050919050565b6000602082019050818103600083015262000a1a81620009d8565b9050919050565b7f496e76616c696420666163746f72792061646472657373000000000000000000600082015250565b600062000a596017836200092c565b915062000a668262000a21565b602082019050919050565b6000602082019050818103600083015262000a8c8162000a4a565b9050919050565b7f496e76616c696420534f4e494320746f6b656e20616464726573730000000000600082015250565b600062000acb601b836200092c565b915062000ad88262000a93565b602082019050919050565b6000602082019050818103600083015262000afe8162000abc565b9050919050565b7f496e76616c69642074726561737572792077616c6c6574206164647265737300600082015250565b600062000b3d601f836200092c565b915062000b4a8262000b05565b602082019050919050565b6000602082019050818103600083015262000b708162000b2e565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000baf6002836200092c565b915062000bbc8262000b77565b602082019050919050565b6000602082019050818103600083015262000be28162000ba0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c2582620006f1565b915062000c3283620006f1565b925082820190508082111562000c4d5762000c4c62000be9565b5b92915050565b62000c5e81620006f1565b82525050565b600060208201905062000c7b600083018462000c53565b92915050565b6155c98062000c916000396000f3fe6080604052600436106101d15760003560e01c806370a08231116100f7578063a9059cbb11610095578063ed9cacfe11610064578063ed9cacfe1461065e578063f2fde38b14610675578063f4ea42de1461069e578063fd7c9fab146106db576101d8565b8063a9059cbb14610590578063c026d93a146105cd578063d4d7b19a146105e4578063dd62ed3e14610621576101d8565b80638129fc1c116100d15780638129fc1c146104f75780638da5cb5b1461050e57806395d89b41146105395780639df93f6c14610564576101d8565b806370a08231146104645780637136982b146104a1578063808a5457146104cc576101d8565b8063397883d21161016f578063560582611161013e57806356058261146103cc5780635d76b04c146103e35780635fe8e7cc1461040e57806362b6327a14610439576101d8565b8063397883d21461034357806341a22cc21461035a578063461a3a95146103765780634626402b146103a1576101d8565b80631b26c80d116101ab5780631b26c80d1461027057806323b872dd1461029e5780632a11ced0146102db578063313ce56714610318576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610706565b6040516101ff91906141c3565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061428d565b610798565b60405161023c91906142e8565b60405180910390f35b34801561025157600080fd5b5061025a6107b4565b6040516102679190614312565b60405180910390f35b34801561027c57600080fd5b506102856107be565b604051610295949392919061433c565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190614381565b6108f5565b6040516102d291906142e8565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd91906143d4565b61091d565b60405161030f9190614401565b60405180910390f35b34801561032457600080fd5b5061032d61095c565b60405161033a9190614438565b60405180910390f35b34801561034f57600080fd5b50610358610965565b005b610374600480360381019061036f91906143d4565b610a56565b005b34801561038257600080fd5b5061038b610f99565b6040516103989190614401565b60405180910390f35b3480156103ad57600080fd5b506103b6610fb1565b6040516103c39190614401565b60405180910390f35b3480156103d857600080fd5b506103e1610fc9565b005b3480156103ef57600080fd5b506103f8611314565b6040516104059190614312565b60405180910390f35b34801561041a57600080fd5b5061042361131e565b6040516104309190614511565b60405180910390f35b34801561044557600080fd5b5061044e6113ac565b60405161045b9190614592565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906145ad565b6113c4565b6040516104989190614312565b60405180910390f35b3480156104ad57600080fd5b506104b661140c565b6040516104c39190614312565b60405180910390f35b3480156104d857600080fd5b506104e1611419565b6040516104ee9190614401565b60405180910390f35b34801561050357600080fd5b5061050c61143f565b005b34801561051a57600080fd5b50610523611aac565b6040516105309190614401565b60405180910390f35b34801561054557600080fd5b5061054e611ad6565b60405161055b91906141c3565b60405180910390f35b34801561057057600080fd5b50610579611b68565b6040516105879291906145da565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b2919061428d565b611d95565b6040516105c491906142e8565b60405180910390f35b3480156105d957600080fd5b506105e2611db1565b005b3480156105f057600080fd5b5061060b600480360381019061060691906145ad565b611ec0565b60405161061891906142e8565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614603565b611ee0565b6040516106559190614312565b60405180910390f35b34801561066a57600080fd5b50610673611f67565b005b34801561068157600080fd5b5061069c600480360381019061069791906145ad565b6122dd565b005b3480156106aa57600080fd5b506106c560048036038101906106c091906143d4565b612360565b6040516106d29190614312565b60405180910390f35b3480156106e757600080fd5b506106f0612422565b6040516106fd9190614664565b60405180910390f35b606060038054610715906146ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906146ae565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000803390506107a981858561243a565b600191505092915050565b6000600254905090565b6000806000806107cd306113c4565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b81526004016108309291906146df565b602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610871919061471d565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109068582856125ce565b61091185858561265a565b60019150509392505050565b6009818154811061092d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61096d612ccc565b6000600a54116109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990614796565b60405180910390fd5b6000600980549050116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614802565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4257600080fd5b505af1925050508015610a53575060015b50565b610a5e612ccc565b600b60009054906101000a900460ff16610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa49061486e565b60405180910390fd5b60003411610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae7906148da565b60405180910390fd5b60008111610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614946565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90614796565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bff9190614401565b602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c40919061471d565b905081811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906149b2565b60405180910390fd5b610ca4307395a7e403d7cf20f675ff9273d66e94d35ba49fa38461243a565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff1663f305d7193430856000803361012c42610ce99190614a01565b6040518863ffffffff1660e01b8152600401610d0a96959493929190614a70565b60606040518083038185885af193505050508015610d4657506040513d601f19601f82011682018060405250810190610d439190614ad1565b60015b610e2b57610d52614b31565b806308c379a003610dce5750610d66614bb3565b80610d715750610dd0565b610d91307395a7e403d7cf20f675ff9273d66e94d35ba49fa3600061243a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc591906141c3565b60405180910390fd5b505b610df0307395a7e403d7cf20f675ff9273d66e94d35ba49fa3600061243a565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614c8f565b60405180910390fd5b81837fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a350505060004790506000811115610f185760003373ffffffffffffffffffffffffffffffffffffffff1682604051610e9090614ce0565b60006040518083038185875af1925050503d8060008114610ecd576040519150601f19603f3d011682016040523d82523d6000602084013e610ed2565b606091505b5050905080610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90614d41565b60405180910390fd5b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8257600080fd5b505af1925050508015610f93575060015b50505050565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b73e68bd755c87749f6144f6762283698742e0daa0c81565b60026005540361100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614dad565b60405180910390fd5b60026005819055506000600a541161105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290614796565b60405180910390fd5b6000600980549050116110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614802565b60405180910390fd5b683635c9adc5dea00000600a5410156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890614e19565b60405180910390fd5b600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a26000600a5490506000600a81905550600061113a82612d43565b9050600081111561130057600060646019836111569190614e39565b6111609190614eaa565b9050600081836111709190614edb565b90506000821180156111c35750600073ffffffffffffffffffffffffffffffffffffffff1673e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff1614155b156112e257600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73e68bd755c87749f6144f6762283698742e0daa0c856040518363ffffffff1660e01b815260040161122d929190614f0f565b6020604051808303816000875af192505050801561126957506040513d601f19601f820116820180604052508101906112669190614f64565b60015b611275578391506112d3565b506001905073e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff16837fa6eefe65b46990724d0b11ebce74cdd26bcaf5268a248780e65997b6c57323e860405160405180910390a35b806112dc578391505b506112e6565b8290505b60008111156112f9576112f88161331d565b5b5050611308565b81600a819055505b50506001600581905550565b6000600a54905090565b606060098054806020026020016040519081016040528092919081815260200182805480156113a257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611358575b5050505050905090565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600980549050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611447612ccc565b600b60009054906101000a900460ff1615611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061486e565b60405180910390fd5b731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016114fa9291906146df565b602060405180830381865afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614fa6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116b857731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663c9c653963073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016116349291906146df565b6020604051808303816000875af1158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190614fa6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090614796565b60405180910390fd5b611788307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161180b929190614f0f565b6020604051808303816000875af192505050801561184757506040513d601f19601f820116820180604052508101906118449190614f64565b60015b1561184e57505b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016118df929190614f0f565b6020604051808303816000875af192505050801561191b57506040513d601f19601f820116820180604052508101906119189190614f64565b60015b1561192257505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161199f929190614f0f565b6020604051808303816000875af19250505080156119db57506040513d601f19601f820116820180604052508101906119d89190614f64565b60015b156119e257505b6001600b60006101000a81548160ff02191690831515021790555073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff16731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff167395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611ae5906146ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611b11906146ae565b8015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b5050505050905090565b600080600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611bcd5760008091509150611d91565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015611c5757506040513d601f19601f82011682018060405250810190611c549190615055565b60015b611c675760008091509150611d91565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611cf157506040513d601f19601f82011682018060405250810190611cee9190614fa6565b60015b611d045760008094509450505050611d91565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d6657836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff169550955050505050611d91565b826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff1695509550505050505b9091565b600080339050611da681858561265a565b600191505092915050565b611db9612ccc565b611df8307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e7b929190614f0f565b6020604051808303816000875af1925050508015611eb757506040513d601f19601f82011682018060405250810190611eb49190614f64565b60015b15611ebe57505b565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6f612ccc565b611fae307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612031929190614f0f565b6020604051808303816000875af192505050801561206d57506040513d601f19601f8201168201806040525081019061206a9190614f64565b60015b1561207457505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122db5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161215b929190614f0f565b6020604051808303816000875af192505050801561219757506040513d601f19601f820116820180604052508101906121949190614f64565b60015b1561219e57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161221b929190614f0f565b6020604051808303816000875af192505050801561225757506040513d601f19601f820116820180604052508101906122549190614f64565b60015b1561225e57505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156122c857600080fd5b505af19250505080156122d9575060015b505b565b6122e5612ccc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b906150f4565b60405180910390fd5b61235d8161374d565b50565b6000808203612372576000905061241d565b60008061237d611b68565b9150915060008214806123905750600081145b156123a05760009250505061241d565b60006103e5856123b09190614e39565b9050600082826123c09190614e39565b90506000826103e8866123d39190614e39565b6123dd9190614a01565b9050600081836123ed9190614eaa565b90506064601e60646123ff9190614edb565b8261240a9190614e39565b6124149190614eaa565b96505050505050505b919050565b731570300e9cfec66c9fb0c8bc14366c86eb170ad081565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124a45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614c8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c19190614312565b60405180910390a3505050565b60006125da8484611ee0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126545781811015612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d90614796565b60405180910390fd5b612653848484840361243a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126c45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa90615160565b60405180910390fd5b61270b611aac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127765750612747611aac565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806127ac57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806127e257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806127fa5750600b60009054906101000a900460ff16155b156128215761280a838383613813565b61281383613a54565b61281c82613a54565b612cc7565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806128cc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612ca757600060646005846128e59190614e39565b6128ef9190614eaa565b9050600081846128ff9190614edb565b905061290c868683613813565b612917863084613813565b81600a60008282546129299190614a01565b92505081905550683635c9adc5dea00000600a541015801561295057506000600980549050115b15612ca057612994307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612a17929190614f0f565b6020604051808303816000875af1925050508015612a5357506040513d601f19601f82011682018060405250810190612a509190614f64565b60015b15612a5a57505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c455773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612b41929190614f0f565b6020604051808303816000875af1925050508015612b7d57506040513d601f19601f82011682018060405250810190612b7a9190614f64565b60015b15612b8457505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612c01929190614f0f565b6020604051808303816000875af1925050508015612c3d57506040513d601f19601f82011682018060405250810190612c3a9190614f64565b60015b15612c4457505b5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c8d57600080fd5b505af1925050508015612c9e575060015b505b5050612cb3565b612cb2848484613813565b5b612cbc84613a54565b612cc583613a54565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612ceb611aac565b73ffffffffffffffffffffffffffffffffffffffff1614612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d38906151cc565b60405180910390fd5b565b6000808203612d555760009050613318565b600080612d6184613ca0565b5091509150811580612d735750600081145b15612d8357600092505050613318565b612db030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613813565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e1a57600080fd5b505af1925050508015612e2b575060015b612e7a57604051612e3b90615243565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600092505050613318565b612eb9307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b60006064601e6064612ecb9190614edb565b83612ed69190614e39565b612ee09190614eaa565b90506000600267ffffffffffffffff811115612eff57612efe614b53565b5b604051908082528060200260200182016040528015612f2d5781602001602082028036833780820191505090505b5090503081600081518110612f4557612f44615258565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612fa857612fa7615258565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016130319190614401565b602060405180830381865afa15801561304e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613072919061471d565b90507395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff166338ed17398885853061012c426130b69190614a01565b6040518663ffffffff1660e01b81526004016130d6959493929190615287565b6000604051808303816000875af192505050801561311757506040513d6000823e3d601f19601f8201168201806040525081019061311491906153c9565b60015b6131e357613123614b31565b806308c379a0036131935750613137614bb3565b806131425750613195565b806040516131509190615443565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009650505050505050613318565b505b6040516131a1906154a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600095505050505050613318565b50600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132339190614401565b602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613274919061471d565b9050600082826132849190614edb565b905060008111156132cc5780897fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380975050505050505050613318565b6040516132d890615507565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009750505050505050505b919050565b600081148061333157506000600980549050145b61374a576000805b6009805490508110801561334d5750606481105b156134f657600073ffffffffffffffffffffffffffffffffffffffff166009828154811061337e5761337d615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156134595750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166009828154811061341557613414615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156134cf57503073ffffffffffffffffffffffffffffffffffffffff166009828154811061348b5761348a615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156134e35781806134df9061551c565b9250505b80806134ee9061551c565b915050613339565b5060008103613505575061374a565b600081836135139190614eaa565b90506000810361352457505061374a565b60008060005b6009805490508110801561353e5750606481105b156137165760006009828154811061355957613558615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156136115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561364957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156137015773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82876040518363ffffffff1660e01b815260040161369d929190614f0f565b6020604051808303816000875af19250505080156136d957506040513d601f19601f820116820180604052508101906136d69190614f64565b60015b6136e35750613703565b5083806136ef9061551c565b94505084836136fe9190614a01565b92505b505b808061370e9061551c565b91505061352a565b5081817f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505050505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561387d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6138bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b390615160565b60405180910390fd5b6138c7838383613f99565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561394d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613944906149b2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3b9190614312565b60405180910390a3613a4e848484613f9e565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613ade57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613c9d576000613aee826113c4565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905068056bc75e2d631000008210158015613b58575080155b15613c1d576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c9a565b68056bc75e2d6310000082108015613c325750805b15613c99576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613c9883613fa3565b5b5b50505b50565b6000806000808403613cbc576000806000925092509250613f92565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613d22576000806000925092509250613f92565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015613dac57506040513d601f19601f82011682018060405250810190613da99190615055565b60015b613dc0576000806000925092509250613f92565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e4a57506040513d601f19601f82011682018060405250810190613e479190614fa6565b60015b613e61576000806000955095509550505050613f92565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149450600085613eaf57836dffffffffffffffffffffffffffff16613ec1565b846dffffffffffffffffffffffffffff165b9050600086613ee057856dffffffffffffffffffffffffffff16613ef2565b846dffffffffffffffffffffffffffff165b90506000821480613f035750600081145b15613f1a5760008098509850505050505050613f92565b60006103e58b613f2a9190614e39565b905060008282613f3a9190614e39565b90506000826103e886613f4d9190614e39565b613f579190614a01565b90508082613f659190614eaa565b9a5060008b03613f84576000809b509b50505050505050505050613f92565b60019b505050505050505050505b9193909250565b505050565b505050565b60005b60098054905081101561412f578173ffffffffffffffffffffffffffffffffffffffff1660098281548110613fde57613fdd615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361411c57600960016009805490506140389190614edb565b8154811061404957614048615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009828154811061408857614087615258565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060098054806140e2576140e1615564565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561412f565b80806141279061551c565b915050613fa6565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416d578082015181840152602081019050614152565b60008484015250505050565b6000601f19601f8301169050919050565b600061419582614133565b61419f818561413e565b93506141af81856020860161414f565b6141b881614179565b840191505092915050565b600060208201905081810360008301526141dd818461418a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614224826141f9565b9050919050565b61423481614219565b811461423f57600080fd5b50565b6000813590506142518161422b565b92915050565b6000819050919050565b61426a81614257565b811461427557600080fd5b50565b60008135905061428781614261565b92915050565b600080604083850312156142a4576142a36141ef565b5b60006142b285828601614242565b92505060206142c385828601614278565b9150509250929050565b60008115159050919050565b6142e2816142cd565b82525050565b60006020820190506142fd60008301846142d9565b92915050565b61430c81614257565b82525050565b60006020820190506143276000830184614303565b92915050565b61433681614219565b82525050565b60006080820190506143516000830187614303565b61435e6020830186614303565b61436b60408301856142d9565b614378606083018461432d565b95945050505050565b60008060006060848603121561439a576143996141ef565b5b60006143a886828701614242565b93505060206143b986828701614242565b92505060406143ca86828701614278565b9150509250925092565b6000602082840312156143ea576143e96141ef565b5b60006143f884828501614278565b91505092915050565b6000602082019050614416600083018461432d565b92915050565b600060ff82169050919050565b6144328161441c565b82525050565b600060208201905061444d6000830184614429565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61448881614219565b82525050565b600061449a838361447f565b60208301905092915050565b6000602082019050919050565b60006144be82614453565b6144c8818561445e565b93506144d38361446f565b8060005b838110156145045781516144eb888261448e565b97506144f6836144a6565b9250506001810190506144d7565b5085935050505092915050565b6000602082019050818103600083015261452b81846144b3565b905092915050565b6000819050919050565b600061455861455361454e846141f9565b614533565b6141f9565b9050919050565b600061456a8261453d565b9050919050565b600061457c8261455f565b9050919050565b61458c81614571565b82525050565b60006020820190506145a76000830184614583565b92915050565b6000602082840312156145c3576145c26141ef565b5b60006145d184828501614242565b91505092915050565b60006040820190506145ef6000830185614303565b6145fc6020830184614303565b9392505050565b6000806040838503121561461a576146196141ef565b5b600061462885828601614242565b925050602061463985828601614242565b9150509250929050565b600061464e8261455f565b9050919050565b61465e81614643565b82525050565b60006020820190506146796000830184614655565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806146c657607f821691505b6020821081036146d9576146d861467f565b5b50919050565b60006040820190506146f4600083018561432d565b614701602083018461432d565b9392505050565b60008151905061471781614261565b92915050565b600060208284031215614733576147326141ef565b5b600061474184828501614708565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061478060028361413e565b915061478b8261474a565b602082019050919050565b600060208201905081810360008301526147af81614773565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006147ec60028361413e565b91506147f7826147b6565b602082019050919050565b6000602082019050818103600083015261481b816147df565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061485860028361413e565b915061486382614822565b602082019050919050565b600060208201905081810360008301526148878161484b565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b60006148c460028361413e565b91506148cf8261488e565b602082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b600061493060028361413e565b915061493b826148fa565b602082019050919050565b6000602082019050818103600083015261495f81614923565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061499c60028361413e565b91506149a782614966565b602082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a0c82614257565b9150614a1783614257565b9250828201905080821115614a2f57614a2e6149d2565b5b92915050565b6000819050919050565b6000614a5a614a55614a5084614a35565b614533565b614257565b9050919050565b614a6a81614a3f565b82525050565b600060c082019050614a85600083018961432d565b614a926020830188614303565b614a9f6040830187614a61565b614aac6060830186614a61565b614ab9608083018561432d565b614ac660a0830184614303565b979650505050505050565b600080600060608486031215614aea57614ae96141ef565b5b6000614af886828701614708565b9350506020614b0986828701614708565b9250506040614b1a86828701614708565b9150509250925092565b60008160e01c9050919050565b600060033d1115614b505760046000803e614b4d600051614b24565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b8b82614179565b810181811067ffffffffffffffff82111715614baa57614ba9614b53565b5b80604052505050565b600060443d10614c4057614bc56141e5565b60043d036004823e80513d602482011167ffffffffffffffff82111715614bed575050614c40565b808201805167ffffffffffffffff811115614c0b5750505050614c40565b80602083010160043d038501811115614c28575050505050614c40565b614c3782602001850186614b82565b82955050505050505b90565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c7960028361413e565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b600081905092915050565b50565b6000614cca600083614caf565b9150614cd582614cba565b600082019050919050565b6000614ceb82614cbd565b9150819050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d2b60028361413e565b9150614d3682614cf5565b602082019050919050565b60006020820190508181036000830152614d5a81614d1e565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d9760028361413e565b9150614da282614d61565b602082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e0360028361413e565b9150614e0e82614dcd565b602082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b6000614e4482614257565b9150614e4f83614257565b9250828202614e5d81614257565b91508282048414831517614e7457614e736149d2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614eb582614257565b9150614ec083614257565b925082614ed057614ecf614e7b565b5b828204905092915050565b6000614ee682614257565b9150614ef183614257565b9250828203905081811115614f0957614f086149d2565b5b92915050565b6000604082019050614f24600083018561432d565b614f316020830184614303565b9392505050565b614f41816142cd565b8114614f4c57600080fd5b50565b600081519050614f5e81614f38565b92915050565b600060208284031215614f7a57614f796141ef565b5b6000614f8884828501614f4f565b91505092915050565b600081519050614fa08161422b565b92915050565b600060208284031215614fbc57614fbb6141ef565b5b6000614fca84828501614f91565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614ff681614fd3565b811461500157600080fd5b50565b60008151905061501381614fed565b92915050565b600063ffffffff82169050919050565b61503281615019565b811461503d57600080fd5b50565b60008151905061504f81615029565b92915050565b60008060006060848603121561506e5761506d6141ef565b5b600061507c86828701615004565b935050602061508d86828701615004565b925050604061509e86828701615040565b9150509250925092565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006150de60028361413e565b91506150e9826150a8565b602082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b600061514a60028361413e565b915061515582615114565b602082019050919050565b600060208201905081810360008301526151798161513d565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006151b660028361413e565b91506151c182615180565b602082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b600081905092915050565b7f5053000000000000000000000000000000000000000000000000000000000000600082015250565b600061522d6002836151ec565b9150615238826151f7565b600282019050919050565b600061524e82615220565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a08201905061529c6000830188614303565b6152a96020830187614303565b81810360408301526152bb81866144b3565b90506152ca606083018561432d565b6152d76080830184614303565b9695505050505050565b600080fd5b60006152f06141e5565b90506152fc8282614b82565b919050565b600067ffffffffffffffff82111561531c5761531b614b53565b5b602082029050602081019050919050565b600080fd5b600061534561534084615301565b6152e6565b905080838252602082019050602084028301858111156153685761536761532d565b5b835b81811015615391578061537d8882614708565b84526020840193505060208101905061536a565b5050509392505050565b600082601f8301126153b0576153af6152e1565b5b81516153c0848260208601615332565b91505092915050565b6000602082840312156153df576153de6141ef565b5b600082015167ffffffffffffffff8111156153fd576153fc6141f4565b5b6154098482850161539b565b91505092915050565b600061541d82614133565b61542781856151ec565b935061543781856020860161414f565b80840191505092915050565b600061544f8284615412565b915081905092915050565b7f5545000000000000000000000000000000000000000000000000000000000000600082015250565b60006154906002836151ec565b915061549b8261545a565b600282019050919050565b60006154b182615483565b9150819050919050565b7f4e53000000000000000000000000000000000000000000000000000000000000600082015250565b60006154f16002836151ec565b91506154fc826154bb565b600282019050919050565b6000615512826154e4565b9150819050919050565b600061552782614257565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615559576155586149d2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220068e16c6689656ff5cfd2261e4fcd579208e824b98e2139487eac8c5505afa6d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806370a08231116100f7578063a9059cbb11610095578063ed9cacfe11610064578063ed9cacfe1461065e578063f2fde38b14610675578063f4ea42de1461069e578063fd7c9fab146106db576101d8565b8063a9059cbb14610590578063c026d93a146105cd578063d4d7b19a146105e4578063dd62ed3e14610621576101d8565b80638129fc1c116100d15780638129fc1c146104f75780638da5cb5b1461050e57806395d89b41146105395780639df93f6c14610564576101d8565b806370a08231146104645780637136982b146104a1578063808a5457146104cc576101d8565b8063397883d21161016f578063560582611161013e57806356058261146103cc5780635d76b04c146103e35780635fe8e7cc1461040e57806362b6327a14610439576101d8565b8063397883d21461034357806341a22cc21461035a578063461a3a95146103765780634626402b146103a1576101d8565b80631b26c80d116101ab5780631b26c80d1461027057806323b872dd1461029e5780632a11ced0146102db578063313ce56714610318576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610706565b6040516101ff91906141c3565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061428d565b610798565b60405161023c91906142e8565b60405180910390f35b34801561025157600080fd5b5061025a6107b4565b6040516102679190614312565b60405180910390f35b34801561027c57600080fd5b506102856107be565b604051610295949392919061433c565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190614381565b6108f5565b6040516102d291906142e8565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd91906143d4565b61091d565b60405161030f9190614401565b60405180910390f35b34801561032457600080fd5b5061032d61095c565b60405161033a9190614438565b60405180910390f35b34801561034f57600080fd5b50610358610965565b005b610374600480360381019061036f91906143d4565b610a56565b005b34801561038257600080fd5b5061038b610f99565b6040516103989190614401565b60405180910390f35b3480156103ad57600080fd5b506103b6610fb1565b6040516103c39190614401565b60405180910390f35b3480156103d857600080fd5b506103e1610fc9565b005b3480156103ef57600080fd5b506103f8611314565b6040516104059190614312565b60405180910390f35b34801561041a57600080fd5b5061042361131e565b6040516104309190614511565b60405180910390f35b34801561044557600080fd5b5061044e6113ac565b60405161045b9190614592565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906145ad565b6113c4565b6040516104989190614312565b60405180910390f35b3480156104ad57600080fd5b506104b661140c565b6040516104c39190614312565b60405180910390f35b3480156104d857600080fd5b506104e1611419565b6040516104ee9190614401565b60405180910390f35b34801561050357600080fd5b5061050c61143f565b005b34801561051a57600080fd5b50610523611aac565b6040516105309190614401565b60405180910390f35b34801561054557600080fd5b5061054e611ad6565b60405161055b91906141c3565b60405180910390f35b34801561057057600080fd5b50610579611b68565b6040516105879291906145da565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b2919061428d565b611d95565b6040516105c491906142e8565b60405180910390f35b3480156105d957600080fd5b506105e2611db1565b005b3480156105f057600080fd5b5061060b600480360381019061060691906145ad565b611ec0565b60405161061891906142e8565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614603565b611ee0565b6040516106559190614312565b60405180910390f35b34801561066a57600080fd5b50610673611f67565b005b34801561068157600080fd5b5061069c600480360381019061069791906145ad565b6122dd565b005b3480156106aa57600080fd5b506106c560048036038101906106c091906143d4565b612360565b6040516106d29190614312565b60405180910390f35b3480156106e757600080fd5b506106f0612422565b6040516106fd9190614664565b60405180910390f35b606060038054610715906146ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906146ae565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000803390506107a981858561243a565b600191505092915050565b6000600254905090565b6000806000806107cd306113c4565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b81526004016108309291906146df565b602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610871919061471d565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109068582856125ce565b61091185858561265a565b60019150509392505050565b6009818154811061092d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61096d612ccc565b6000600a54116109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990614796565b60405180910390fd5b6000600980549050116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614802565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4257600080fd5b505af1925050508015610a53575060015b50565b610a5e612ccc565b600b60009054906101000a900460ff16610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa49061486e565b60405180910390fd5b60003411610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae7906148da565b60405180910390fd5b60008111610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614946565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90614796565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610bff9190614401565b602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c40919061471d565b905081811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906149b2565b60405180910390fd5b610ca4307395a7e403d7cf20f675ff9273d66e94d35ba49fa38461243a565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff1663f305d7193430856000803361012c42610ce99190614a01565b6040518863ffffffff1660e01b8152600401610d0a96959493929190614a70565b60606040518083038185885af193505050508015610d4657506040513d601f19601f82011682018060405250810190610d439190614ad1565b60015b610e2b57610d52614b31565b806308c379a003610dce5750610d66614bb3565b80610d715750610dd0565b610d91307395a7e403d7cf20f675ff9273d66e94d35ba49fa3600061243a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc591906141c3565b60405180910390fd5b505b610df0307395a7e403d7cf20f675ff9273d66e94d35ba49fa3600061243a565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614c8f565b60405180910390fd5b81837fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a350505060004790506000811115610f185760003373ffffffffffffffffffffffffffffffffffffffff1682604051610e9090614ce0565b60006040518083038185875af1925050503d8060008114610ecd576040519150601f19603f3d011682016040523d82523d6000602084013e610ed2565b606091505b5050905080610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90614d41565b60405180910390fd5b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8257600080fd5b505af1925050508015610f93575060015b50505050565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b73e68bd755c87749f6144f6762283698742e0daa0c81565b60026005540361100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590614dad565b60405180910390fd5b60026005819055506000600a541161105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290614796565b60405180910390fd5b6000600980549050116110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614802565b60405180910390fd5b683635c9adc5dea00000600a5410156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890614e19565b60405180910390fd5b600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a26000600a5490506000600a81905550600061113a82612d43565b9050600081111561130057600060646019836111569190614e39565b6111609190614eaa565b9050600081836111709190614edb565b90506000821180156111c35750600073ffffffffffffffffffffffffffffffffffffffff1673e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff1614155b156112e257600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73e68bd755c87749f6144f6762283698742e0daa0c856040518363ffffffff1660e01b815260040161122d929190614f0f565b6020604051808303816000875af192505050801561126957506040513d601f19601f820116820180604052508101906112669190614f64565b60015b611275578391506112d3565b506001905073e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff16837fa6eefe65b46990724d0b11ebce74cdd26bcaf5268a248780e65997b6c57323e860405160405180910390a35b806112dc578391505b506112e6565b8290505b60008111156112f9576112f88161331d565b5b5050611308565b81600a819055505b50506001600581905550565b6000600a54905090565b606060098054806020026020016040519081016040528092919081815260200182805480156113a257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611358575b5050505050905090565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600980549050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611447612ccc565b600b60009054906101000a900460ff1615611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061486e565b60405180910390fd5b731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016114fa9291906146df565b602060405180830381865afa158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614fa6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116b857731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663c9c653963073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016116349291906146df565b6020604051808303816000875af1158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190614fa6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090614796565b60405180910390fd5b611788307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161180b929190614f0f565b6020604051808303816000875af192505050801561184757506040513d601f19601f820116820180604052508101906118449190614f64565b60015b1561184e57505b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016118df929190614f0f565b6020604051808303816000875af192505050801561191b57506040513d601f19601f820116820180604052508101906119189190614f64565b60015b1561192257505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161199f929190614f0f565b6020604051808303816000875af19250505080156119db57506040513d601f19601f820116820180604052508101906119d89190614f64565b60015b156119e257505b6001600b60006101000a81548160ff02191690831515021790555073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff16731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff167395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611ae5906146ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611b11906146ae565b8015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b5050505050905090565b600080600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611bcd5760008091509150611d91565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015611c5757506040513d601f19601f82011682018060405250810190611c549190615055565b60015b611c675760008091509150611d91565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611cf157506040513d601f19601f82011682018060405250810190611cee9190614fa6565b60015b611d045760008094509450505050611d91565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d6657836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff169550955050505050611d91565b826dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff1695509550505050505b9091565b600080339050611da681858561265a565b600191505092915050565b611db9612ccc565b611df8307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611e7b929190614f0f565b6020604051808303816000875af1925050508015611eb757506040513d601f19601f82011682018060405250810190611eb49190614f64565b60015b15611ebe57505b565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6f612ccc565b611fae307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612031929190614f0f565b6020604051808303816000875af192505050801561206d57506040513d601f19601f8201168201806040525081019061206a9190614f64565b60015b1561207457505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122db5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161215b929190614f0f565b6020604051808303816000875af192505050801561219757506040513d601f19601f820116820180604052508101906121949190614f64565b60015b1561219e57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161221b929190614f0f565b6020604051808303816000875af192505050801561225757506040513d601f19601f820116820180604052508101906122549190614f64565b60015b1561225e57505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156122c857600080fd5b505af19250505080156122d9575060015b505b565b6122e5612ccc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b906150f4565b60405180910390fd5b61235d8161374d565b50565b6000808203612372576000905061241d565b60008061237d611b68565b9150915060008214806123905750600081145b156123a05760009250505061241d565b60006103e5856123b09190614e39565b9050600082826123c09190614e39565b90506000826103e8866123d39190614e39565b6123dd9190614a01565b9050600081836123ed9190614eaa565b90506064601e60646123ff9190614edb565b8261240a9190614e39565b6124149190614eaa565b96505050505050505b919050565b731570300e9cfec66c9fb0c8bc14366c86eb170ad081565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124a45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614c8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c19190614312565b60405180910390a3505050565b60006125da8484611ee0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126545781811015612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d90614796565b60405180910390fd5b612653848484840361243a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126c45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa90615160565b60405180910390fd5b61270b611aac565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127765750612747611aac565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806127ac57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806127e257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806127fa5750600b60009054906101000a900460ff16155b156128215761280a838383613813565b61281383613a54565b61281c82613a54565b612cc7565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806128cc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612ca757600060646005846128e59190614e39565b6128ef9190614eaa565b9050600081846128ff9190614edb565b905061290c868683613813565b612917863084613813565b81600a60008282546129299190614a01565b92505081905550683635c9adc5dea00000600a541015801561295057506000600980549050115b15612ca057612994307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612a17929190614f0f565b6020604051808303816000875af1925050508015612a5357506040513d601f19601f82011682018060405250810190612a509190614f64565b60015b15612a5a57505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c455773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612b41929190614f0f565b6020604051808303816000875af1925050508015612b7d57506040513d601f19601f82011682018060405250810190612b7a9190614f64565b60015b15612b8457505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612c01929190614f0f565b6020604051808303816000875af1925050508015612c3d57506040513d601f19601f82011682018060405250810190612c3a9190614f64565b60015b15612c4457505b5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c8d57600080fd5b505af1925050508015612c9e575060015b505b5050612cb3565b612cb2848484613813565b5b612cbc84613a54565b612cc583613a54565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612ceb611aac565b73ffffffffffffffffffffffffffffffffffffffff1614612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d38906151cc565b60405180910390fd5b565b6000808203612d555760009050613318565b600080612d6184613ca0565b5091509150811580612d735750600081145b15612d8357600092505050613318565b612db030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613813565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e1a57600080fd5b505af1925050508015612e2b575060015b612e7a57604051612e3b90615243565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600092505050613318565b612eb9307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61243a565b60006064601e6064612ecb9190614edb565b83612ed69190614e39565b612ee09190614eaa565b90506000600267ffffffffffffffff811115612eff57612efe614b53565b5b604051908082528060200260200182016040528015612f2d5781602001602082028036833780820191505090505b5090503081600081518110612f4557612f44615258565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612fa857612fa7615258565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016130319190614401565b602060405180830381865afa15801561304e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613072919061471d565b90507395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff166338ed17398885853061012c426130b69190614a01565b6040518663ffffffff1660e01b81526004016130d6959493929190615287565b6000604051808303816000875af192505050801561311757506040513d6000823e3d601f19601f8201168201806040525081019061311491906153c9565b60015b6131e357613123614b31565b806308c379a0036131935750613137614bb3565b806131425750613195565b806040516131509190615443565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009650505050505050613318565b505b6040516131a1906154a6565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600095505050505050613318565b50600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132339190614401565b602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613274919061471d565b9050600082826132849190614edb565b905060008111156132cc5780897fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380975050505050505050613318565b6040516132d890615507565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009750505050505050505b919050565b600081148061333157506000600980549050145b61374a576000805b6009805490508110801561334d5750606481105b156134f657600073ffffffffffffffffffffffffffffffffffffffff166009828154811061337e5761337d615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156134595750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166009828154811061341557613414615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156134cf57503073ffffffffffffffffffffffffffffffffffffffff166009828154811061348b5761348a615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156134e35781806134df9061551c565b9250505b80806134ee9061551c565b915050613339565b5060008103613505575061374a565b600081836135139190614eaa565b90506000810361352457505061374a565b60008060005b6009805490508110801561353e5750606481105b156137165760006009828154811061355957613558615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156136115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561364957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156137015773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82876040518363ffffffff1660e01b815260040161369d929190614f0f565b6020604051808303816000875af19250505080156136d957506040513d601f19601f820116820180604052508101906136d69190614f64565b60015b6136e35750613703565b5083806136ef9061551c565b94505084836136fe9190614a01565b92505b505b808061370e9061551c565b91505061352a565b5081817f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505050505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561387d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6138bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b390615160565b60405180910390fd5b6138c7838383613f99565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561394d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613944906149b2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3b9190614312565b60405180910390a3613a4e848484613f9e565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613ade57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613c9d576000613aee826113c4565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905068056bc75e2d631000008210158015613b58575080155b15613c1d576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c9a565b68056bc75e2d6310000082108015613c325750805b15613c99576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613c9883613fa3565b5b5b50505b50565b6000806000808403613cbc576000806000925092509250613f92565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613d22576000806000925092509250613f92565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015613dac57506040513d601f19601f82011682018060405250810190613da99190615055565b60015b613dc0576000806000925092509250613f92565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613e4a57506040513d601f19601f82011682018060405250810190613e479190614fa6565b60015b613e61576000806000955095509550505050613f92565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149450600085613eaf57836dffffffffffffffffffffffffffff16613ec1565b846dffffffffffffffffffffffffffff165b9050600086613ee057856dffffffffffffffffffffffffffff16613ef2565b846dffffffffffffffffffffffffffff165b90506000821480613f035750600081145b15613f1a5760008098509850505050505050613f92565b60006103e58b613f2a9190614e39565b905060008282613f3a9190614e39565b90506000826103e886613f4d9190614e39565b613f579190614a01565b90508082613f659190614eaa565b9a5060008b03613f84576000809b509b50505050505050505050613f92565b60019b505050505050505050505b9193909250565b505050565b505050565b60005b60098054905081101561412f578173ffffffffffffffffffffffffffffffffffffffff1660098281548110613fde57613fdd615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361411c57600960016009805490506140389190614edb565b8154811061404957614048615258565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009828154811061408857614087615258565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060098054806140e2576140e1615564565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561412f565b80806141279061551c565b915050613fa6565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416d578082015181840152602081019050614152565b60008484015250505050565b6000601f19601f8301169050919050565b600061419582614133565b61419f818561413e565b93506141af81856020860161414f565b6141b881614179565b840191505092915050565b600060208201905081810360008301526141dd818461418a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614224826141f9565b9050919050565b61423481614219565b811461423f57600080fd5b50565b6000813590506142518161422b565b92915050565b6000819050919050565b61426a81614257565b811461427557600080fd5b50565b60008135905061428781614261565b92915050565b600080604083850312156142a4576142a36141ef565b5b60006142b285828601614242565b92505060206142c385828601614278565b9150509250929050565b60008115159050919050565b6142e2816142cd565b82525050565b60006020820190506142fd60008301846142d9565b92915050565b61430c81614257565b82525050565b60006020820190506143276000830184614303565b92915050565b61433681614219565b82525050565b60006080820190506143516000830187614303565b61435e6020830186614303565b61436b60408301856142d9565b614378606083018461432d565b95945050505050565b60008060006060848603121561439a576143996141ef565b5b60006143a886828701614242565b93505060206143b986828701614242565b92505060406143ca86828701614278565b9150509250925092565b6000602082840312156143ea576143e96141ef565b5b60006143f884828501614278565b91505092915050565b6000602082019050614416600083018461432d565b92915050565b600060ff82169050919050565b6144328161441c565b82525050565b600060208201905061444d6000830184614429565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61448881614219565b82525050565b600061449a838361447f565b60208301905092915050565b6000602082019050919050565b60006144be82614453565b6144c8818561445e565b93506144d38361446f565b8060005b838110156145045781516144eb888261448e565b97506144f6836144a6565b9250506001810190506144d7565b5085935050505092915050565b6000602082019050818103600083015261452b81846144b3565b905092915050565b6000819050919050565b600061455861455361454e846141f9565b614533565b6141f9565b9050919050565b600061456a8261453d565b9050919050565b600061457c8261455f565b9050919050565b61458c81614571565b82525050565b60006020820190506145a76000830184614583565b92915050565b6000602082840312156145c3576145c26141ef565b5b60006145d184828501614242565b91505092915050565b60006040820190506145ef6000830185614303565b6145fc6020830184614303565b9392505050565b6000806040838503121561461a576146196141ef565b5b600061462885828601614242565b925050602061463985828601614242565b9150509250929050565b600061464e8261455f565b9050919050565b61465e81614643565b82525050565b60006020820190506146796000830184614655565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806146c657607f821691505b6020821081036146d9576146d861467f565b5b50919050565b60006040820190506146f4600083018561432d565b614701602083018461432d565b9392505050565b60008151905061471781614261565b92915050565b600060208284031215614733576147326141ef565b5b600061474184828501614708565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061478060028361413e565b915061478b8261474a565b602082019050919050565b600060208201905081810360008301526147af81614773565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006147ec60028361413e565b91506147f7826147b6565b602082019050919050565b6000602082019050818103600083015261481b816147df565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061485860028361413e565b915061486382614822565b602082019050919050565b600060208201905081810360008301526148878161484b565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b60006148c460028361413e565b91506148cf8261488e565b602082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b600061493060028361413e565b915061493b826148fa565b602082019050919050565b6000602082019050818103600083015261495f81614923565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061499c60028361413e565b91506149a782614966565b602082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a0c82614257565b9150614a1783614257565b9250828201905080821115614a2f57614a2e6149d2565b5b92915050565b6000819050919050565b6000614a5a614a55614a5084614a35565b614533565b614257565b9050919050565b614a6a81614a3f565b82525050565b600060c082019050614a85600083018961432d565b614a926020830188614303565b614a9f6040830187614a61565b614aac6060830186614a61565b614ab9608083018561432d565b614ac660a0830184614303565b979650505050505050565b600080600060608486031215614aea57614ae96141ef565b5b6000614af886828701614708565b9350506020614b0986828701614708565b9250506040614b1a86828701614708565b9150509250925092565b60008160e01c9050919050565b600060033d1115614b505760046000803e614b4d600051614b24565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b8b82614179565b810181811067ffffffffffffffff82111715614baa57614ba9614b53565b5b80604052505050565b600060443d10614c4057614bc56141e5565b60043d036004823e80513d602482011167ffffffffffffffff82111715614bed575050614c40565b808201805167ffffffffffffffff811115614c0b5750505050614c40565b80602083010160043d038501811115614c28575050505050614c40565b614c3782602001850186614b82565b82955050505050505b90565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c7960028361413e565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b600081905092915050565b50565b6000614cca600083614caf565b9150614cd582614cba565b600082019050919050565b6000614ceb82614cbd565b9150819050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d2b60028361413e565b9150614d3682614cf5565b602082019050919050565b60006020820190508181036000830152614d5a81614d1e565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d9760028361413e565b9150614da282614d61565b602082019050919050565b60006020820190508181036000830152614dc681614d8a565b9050919050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e0360028361413e565b9150614e0e82614dcd565b602082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b6000614e4482614257565b9150614e4f83614257565b9250828202614e5d81614257565b91508282048414831517614e7457614e736149d2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614eb582614257565b9150614ec083614257565b925082614ed057614ecf614e7b565b5b828204905092915050565b6000614ee682614257565b9150614ef183614257565b9250828203905081811115614f0957614f086149d2565b5b92915050565b6000604082019050614f24600083018561432d565b614f316020830184614303565b9392505050565b614f41816142cd565b8114614f4c57600080fd5b50565b600081519050614f5e81614f38565b92915050565b600060208284031215614f7a57614f796141ef565b5b6000614f8884828501614f4f565b91505092915050565b600081519050614fa08161422b565b92915050565b600060208284031215614fbc57614fbb6141ef565b5b6000614fca84828501614f91565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614ff681614fd3565b811461500157600080fd5b50565b60008151905061501381614fed565b92915050565b600063ffffffff82169050919050565b61503281615019565b811461503d57600080fd5b50565b60008151905061504f81615029565b92915050565b60008060006060848603121561506e5761506d6141ef565b5b600061507c86828701615004565b935050602061508d86828701615004565b925050604061509e86828701615040565b9150509250925092565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006150de60028361413e565b91506150e9826150a8565b602082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b600061514a60028361413e565b915061515582615114565b602082019050919050565b600060208201905081810360008301526151798161513d565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006151b660028361413e565b91506151c182615180565b602082019050919050565b600060208201905081810360008301526151e5816151a9565b9050919050565b600081905092915050565b7f5053000000000000000000000000000000000000000000000000000000000000600082015250565b600061522d6002836151ec565b9150615238826151f7565b600282019050919050565b600061524e82615220565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a08201905061529c6000830188614303565b6152a96020830187614303565b81810360408301526152bb81866144b3565b90506152ca606083018561432d565b6152d76080830184614303565b9695505050505050565b600080fd5b60006152f06141e5565b90506152fc8282614b82565b919050565b600067ffffffffffffffff82111561531c5761531b614b53565b5b602082029050602081019050919050565b600080fd5b600061534561534084615301565b6152e6565b905080838252602082019050602084028301858111156153685761536761532d565b5b835b81811015615391578061537d8882614708565b84526020840193505060208101905061536a565b5050509392505050565b600082601f8301126153b0576153af6152e1565b5b81516153c0848260208601615332565b91505092915050565b6000602082840312156153df576153de6141ef565b5b600082015167ffffffffffffffff8111156153fd576153fc6141f4565b5b6154098482850161539b565b91505092915050565b600061541d82614133565b61542781856151ec565b935061543781856020860161414f565b80840191505092915050565b600061544f8284615412565b915081905092915050565b7f5545000000000000000000000000000000000000000000000000000000000000600082015250565b60006154906002836151ec565b915061549b8261545a565b600282019050919050565b60006154b182615483565b9150819050919050565b7f4e53000000000000000000000000000000000000000000000000000000000000600082015250565b60006154f16002836151ec565b91506154fc826154bb565b600282019050919050565b6000615512826154e4565b9150819050919050565b600061552782614257565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615559576155586149d2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220068e16c6689656ff5cfd2261e4fcd579208e824b98e2139487eac8c5505afa6d64736f6c63430008130033

Deployed Bytecode Sourcemap

8472:19480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3797:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3224:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25415:310;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3995:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9708:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3132:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24936:198;;;;;;;;;;;;;:::i;:::-;;23033:1679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9390:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9545:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15465:1995;;;;;;;;;;;;;:::i;:::-;;24763:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22859:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9145:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3331:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22749:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9476:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11068:1124;;;;;;;;;;;;;:::i;:::-;;1909:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3029:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25733:719;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3457:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25142:242;;;;;;;;;;;;;:::i;:::-;;9661:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3647:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27194:718;;;;;;;;;;;;;:::i;:::-;;2112:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26460:708;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9266:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2930:91;2975:13;3008:5;3001:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:91;:::o;3797:190::-;3871:4;3888:13;3904:10;3888:26;;3925:32;3934:5;3941:7;3950:6;3925:8;:32::i;:::-;3975:4;3968:11;;;3797:190;;;;:::o;3224:99::-;3276:7;3303:12;;3296:19;;3224:99;:::o;25415:310::-;25461:7;25470;25479:4;25485:7;25527:24;25545:4;25527:9;:24::i;:::-;9427:42;25566:28;;;25603:4;9216:42;25566:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25676:1;25651:27;;:13;;;;;;;;;;;:27;;;;25693:13;;;;;;;;;;;25505:212;;;;;;;;25415:310;;;;:::o;3995:250::-;4083:4;4100:15;4118:10;4100:28;;4139:38;4155:4;4161:7;4170:6;4139:15;:38::i;:::-;4188:27;4198:4;4204:2;4208:6;4188:9;:27::i;:::-;4233:4;4226:11;;;3995:250;;;;;:::o;9708:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3132:84::-;3181:5;3206:2;3199:9;;3132:84;:::o;24936:198::-;1868:13;:11;:13::i;:::-;25027:1:::1;25003:21;;:25;24995:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25071:1;25054:7;:14;;;;:18;25046:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;25094:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25090:37:::0;24936:198::o;23033:1679::-;1868:13;:11;:13::i;:::-;23129:12:::1;;;;;;;;;;;23121:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:1;23167:9;:13;23159:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:1;23206:11;:15;23198:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;23272:1;23247:27;;:13;;;;;;;;;;;:27;;::::0;23239:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23344:23;23385:4;23370:31;;;23410:4;23370:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23344:72;;23454:11;23435:15;:30;;23427:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23524:63;23541:4;9216:42;23575:11;23524:8;:63::i;:::-;9216:42;23647:32;;;23687:9;23720:4;23740:11;23766:1;23808::::0;23850:10:::1;23926:3;23908:15;:21;;;;:::i;:::-;23647:314;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23643:696;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;24131:53;24148:4;9216:42;24182:1;24131:8;:53::i;:::-;24206:6;24199:14;;;;;;;;;;;:::i;:::-;;;;;;;;23643:696;;;24247:53;24264:4;9216:42;24298:1;24247:8;:53::i;:::-;24315:12;;;;;;;;;;:::i;:::-;;;;;;;;23643:696;24059:9;24046:11;24031:38;;;;;;;;;;23962:119;;;24389:20;24412:21;24389:44;;24463:1;24448:12;:16;24444:154;;;24482:12;24508:10;24500:24;;24532:12;24500:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24481:68;;;24572:7;24564:22;;;;;;;;;;;;:::i;:::-;;;;;;;;;24466:132;24444:154;24672:13;;;;;;;;;;;24656:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24652:53:::0;23110:1602:::1;;23033:1679:::0;:::o;9390:79::-;9427:42;9390:79;:::o;9545:83::-;9586:42;9545:83;:::o;15465:1995::-;1162:1;1308:7;;:19;1300:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1162:1;1345:7;:18;;;;15556:1:::1;15532:21;;:25;15524:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;15600:1;15583:7;:14;;;;:18;15575:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;8817:13;15627:21;;:47;;15619:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15722:21;;15707:37;;;;;;;;;;15791:25;15819:21;;15791:49;;15875:1;15851:21;:25;;;;15931:21;15955:38;15975:17;15955:19;:38::i;:::-;15931:62;;16062:1;16046:13;:17;16042:1411;;;16121:22;16186:3;8997:2;16147:13;:35;;;;:::i;:::-;16146:43;;;;:::i;:::-;16121:68;;16204:21;16244:14;16228:13;:30;;;;:::i;:::-;16204:54;;16344:1;16327:14;:18;:50;;;;;16375:1;16349:28;;9586:42;16349:28;;;;16327:50;16323:821;;;16398:28;9427:42;16457:27;;;9586:42;16501:14;16457:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16453:393;;16813:13;16797:29;;16453:393;;;;16566:4;16540:30;;9586:42;16598:51;;16618:14;16598:51;;;;;;;;;;16453:393;16887:23;16882:102;;16951:13;16935:29;;16882:102;16379:620;16323:821;;;17115:13;17099:29;;16323:821;17239:1;17223:13;:17;17219:88;;;17261:30;17277:13;17261:15;:30::i;:::-;17219:88;16065:1253;;16042:1411;;;17424:17;17400:21;:41;;;;16042:1411;15513:1947;;1118:1:::0;1386:7;:22;;;;15465:1995::o;24763:114::-;24821:7;24848:21;;24841:28;;24763:114;:::o;22859:96::-;22904:16;22940:7;22933:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22859:96;:::o;9145:114::-;9216:42;9145:114;:::o;3331:118::-;3396:7;3423:9;:18;3433:7;3423:18;;;;;;;;;;;;;;;;3416:25;;3331:118;;;:::o;22749:98::-;22798:7;22825;:14;;;;22818:21;;22749:98;:::o;9476:28::-;;;;;;;;;;;;;:::o;11068:1124::-;1868:13;:11;:13::i;:::-;11129:12:::1;;;;;;;;;;;11128:13;11120:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;9340:42;11228:25;;;11262:4;9427:42;11228:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11212:13;;:68;;;;;;;;;;;;;;;;;;11375:1;11350:27;;:13;;;;;;;;;;;:27;;::::0;11346:131:::1;;9340:42;11410:28;;;11447:4;9427:42;11410:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11394:13;;:71;;;;;;;;;;;;;;;;;;11346:131;11530:1;11505:27;;:13;;;;;;;;;;;:27;;::::0;11497:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11594:69;11611:4;9216:42;11645:17;11594:8;:69::i;:::-;9427:42;11733:26;;;9216:42;11787:17;11733:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11729:88:::0;::::1;;;;9427:42;11882:26;;;11909:13;;;;;;;;;;;11924:17;11882:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11878:76:::0;::::1;;;;11983:4;11968:29;;;11998:13;;;;;;;;;;;12013:17;11968:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11964:79:::0;::::1;;;;12078:4;12063:12;;:19;;;;;;;;;;;;;;;;;;9427:42;12098:86;;9340:42;12098:86;;9216:42;12098:86;;;;;;;;;;;;11068:1124::o:0;1909:87::-;1955:7;1982:6;;;;;;;;;;;1975:13;;1909:87;:::o;3029:95::-;3076:13;3109:7;3102:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:95;:::o;25733:719::-;25781:19;25802;25863:1;25838:27;;:13;;;;;;;;;;;:27;;;25834:46;;25875:1;25878;25867:13;;;;;;25834:46;25921:13;;;;;;;;;;;25905:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25901:544;;26428:1;26431;26420:13;;;;;;25901:544;26038:13;;;;;;;;;;;26022:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26018:369;;26366:1;26369;26358:13;;;;;;;;;26018:369;26128:4;26110:23;;:6;:23;;;26106:211;;26174:8;26166:17;;26193:8;26185:17;;26158:45;;;;;;;;;;26106:211;26268:8;26260:17;;26287:8;26279:17;;26252:45;;;;;;;;25733:719;;;:::o;3457:182::-;3527:4;3544:13;3560:10;3544:26;;3581:28;3591:5;3598:2;3602:6;3581:9;:28::i;:::-;3627:4;3620:11;;;3457:182;;;;:::o;25142:242::-;1868:13;:11;:13::i;:::-;25209:69:::1;25226:4;9216:42;25260:17;25209:8;:69::i;:::-;9427:42;25293:26;;;9216:42;25347:17;25293:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25289:88:::0;::::1;;;;25142:242::o:0;9661:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3647:142::-;3727:7;3754:11;:18;3766:5;3754:18;;;;;;;;;;;;;;;:27;3773:7;3754:27;;;;;;;;;;;;;;;;3747:34;;3647:142;;;;:::o;27194:718::-;1868:13;:11;:13::i;:::-;27290:69:::1;27307:4;9216:42;27341:17;27290:8;:69::i;:::-;9427:42;27418:26;;;9216:42;27472:17;27418:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27414:88:::0;::::1;;;;27578:1;27553:27;;:13;;;;;;;;;;;:27;;;27549:356;;9427:42;27601:26;;;27628:13;;;;;;;;;;;27643:17;27601:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27597:76:::0;::::1;;;;27706:4;27691:29;;;27721:13;;;;;;;;;;;27736:17;27691:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27687:79:::0;::::1;;;;27861:13;;;;;;;;;;;27845:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27841:53:::0;27549:356:::1;27194:718::o:0;2112:165::-;1868:13;:11;:13::i;:::-;2221:1:::1;2201:22;;:8;:22;;::::0;2193:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2241:28;2260:8;2241:18;:28::i;:::-;2112:165:::0;:::o;26460:708::-;26537:7;26573:1;26561:8;:13;26557:27;;26583:1;26576:8;;;;26557:27;26606:19;26627;26650:17;:15;:17::i;:::-;26605:62;;;;26697:1;26682:11;:16;:36;;;;26717:1;26702:11;:16;26682:36;26678:50;;;26727:1;26720:8;;;;;;26678:50;26814:23;26851:3;26840:8;:14;;;;:::i;:::-;26814:40;;26877:17;26915:11;26897:15;:29;;;;:::i;:::-;26877:49;;26937:19;26982:15;26974:4;26960:11;:18;;;;:::i;:::-;26959:38;;;;:::i;:::-;26937:60;;27008:17;27040:11;27028:9;:23;;;;:::i;:::-;27008:43;;27157:3;8915:2;27135:3;:18;;;;:::i;:::-;27122:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;27115:45;;;;;;;;26460:708;;;;:::o;9266:117::-;9340:42;9266:117;:::o;5176:256::-;5295:1;5278:19;;:5;:19;;;;:44;;;;;5320:1;5301:21;;:7;:21;;;;5278:44;5270:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5370:6;5340:11;:18;5352:5;5340:18;;;;;;;;;;;;;;;:27;5359:7;5340:27;;;;;;;;;;;;;;;:36;;;;5408:7;5392:32;;5401:5;5392:32;;;5417:6;5392:32;;;;;;:::i;:::-;;;;;;;;5176:256;;;:::o;5440:392::-;5541:24;5568:25;5578:5;5585:7;5568:9;:25::i;:::-;5541:52;;5628:17;5608:16;:37;5604:221;;5690:6;5670:16;:26;;5662:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5747:51;5756:5;5763:7;5791:6;5772:16;:25;5747:8;:51::i;:::-;5604:221;5530:302;5440:392;;;:::o;12200:2297::-;12356:1;12340:18;;:4;:18;;;;:38;;;;;12376:1;12362:16;;:2;:16;;;;12340:38;12332:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12472:7;:5;:7::i;:::-;12464:15;;:4;:15;;;:32;;;;12489:7;:5;:7::i;:::-;12483:13;;:2;:13;;;12464:32;:57;;;;12516:4;12500:21;;:4;:21;;;12464:57;:80;;;;12539:4;12525:19;;:2;:19;;;12464:80;:97;;;;12549:12;;;;;;;;;;;12548:13;12464:97;12460:309;;;12578:33;12594:4;12600:2;12604:6;12578:15;:33::i;:::-;12673:25;12693:4;12673:19;:25::i;:::-;12713:23;12733:2;12713:19;:23::i;:::-;12751:7;;12460:309;12781:16;12806:13;;;;;;;;;;;12800:19;;:2;:19;;;:44;;;;12831:13;;;;;;;;;;;12823:21;;:4;:21;;;12800:44;12781:63;;12859:11;12855:1503;;;12929:16;12970:3;8649:1;12949:6;:17;;;;:::i;:::-;12948:25;;;;:::i;:::-;12929:44;;12988:22;13022:8;13013:6;:17;;;;:::i;:::-;12988:42;;13115:41;13131:4;13137:2;13141:14;13115:15;:41::i;:::-;13231:46;13247:4;13261;13268:8;13231:15;:46::i;:::-;13367:8;13342:21;;:33;;;;;;;:::i;:::-;;;;;;;;8817:13;13452:21;;:47;;:69;;;;;13520:1;13503:7;:14;;;;:18;13452:69;13448:789;;;13590:69;13607:4;9216:42;13641:17;13590:8;:69::i;:::-;9427:42;13700:26;;;9216:42;13754:17;13700:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13696:88;;;;;13849:1;13824:27;;:13;;;;;;;;;;;:27;;;13820:252;;9427:42;13880:26;;;13907:13;;;;;;;;;;;13922:17;13880:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13876:76;;;;;13993:4;13978:29;;;14008:13;;;;;;;;;;;14023:17;13978:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13974:79;;;;;13820:252;14189:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14185:37;13448:789;12872:1376;;12855:1503;;;14313:33;14329:4;14335:2;14339:6;14313:15;:33::i;:::-;12855:1503;14430:25;14450:4;14430:19;:25::i;:::-;14466:23;14486:2;14466:19;:23::i;:::-;12321:2176;12200:2297;;;;:::o;2004:100::-;2079:10;2068:21;;:7;:5;:7::i;:::-;:21;;;2060:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;2004:100::o;17468:2103::-;17535:7;17574:1;17559:11;:16;17555:30;;17584:1;17577:8;;;;17555:30;17641:12;17655:24;17685:33;17706:11;17685:20;:33::i;:::-;17640:78;;;;;17734:7;17733:8;:33;;;;17765:1;17745:16;:21;17733:33;17729:47;;;17775:1;17768:8;;;;;;17729:47;17852:58;17876:4;17883:13;;;;;;;;;;;17898:11;17852:15;:58::i;:::-;17985:13;;;;;;;;;;;17969:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17965:122;;18036:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18074:1;18067:8;;;;;;17965:122;18145:69;18162:4;9216:42;18196:17;18145:8;:69::i;:::-;18274:20;18339:3;8915:2;18317:3;:18;;;;:::i;:::-;18297:16;:39;;;;:::i;:::-;:45;;;;:::i;:::-;18274:68;;18448:21;18486:1;18472:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:40;;18517:4;18499;18504:1;18499:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;9427:42;18533:4;18538:1;18533:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;18574:27;9427:42;18604:28;;;18641:4;18604:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18574:73;;9216:42;18672:41;;;18728:11;18754:12;18781:4;18808;18873:3;18855:15;:21;;;;:::i;:::-;18672:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18668:896;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19444:6;19433:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19473:1;19466:8;;;;;;;;;;18668:896;;;19513:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19551:1;19544:8;;;;;;;;;18668:896;;18976:25;9427:42;19004:28;;;19041:4;19004:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18976:71;;19062:16;19101:19;19081:17;:39;;;;:::i;:::-;19062:58;;19164:1;19153:8;:12;19149:218;;;19219:8;19206:11;19191:37;;;;;;;;;;19254:8;19247:15;;;;;;;;;;;19149:218;19308:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19350:1;19343:8;;;;;;;;;17468:2103;;;;:::o;21327:1391::-;21411:1;21396:11;:16;:39;;;;21434:1;21416:7;:14;;;;:19;21396:39;21437:7;21392:52;21512:24;21556:9;21551:227;21575:7;:14;;;;21571:1;:18;:29;;;;;21597:3;21593:1;:7;21571:29;21551:227;;;21648:1;21626:24;;:7;21634:1;21626:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;;:55;;;;;21668:13;;;;;;;;;;;21654:27;;:7;21662:1;21654:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;;21626:55;:86;;;;;21707:4;21685:27;;:7;21693:1;21685:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;;21626:86;21622:145;;;21733:18;;;;;:::i;:::-;;;;21622:145;21602:3;;;;;:::i;:::-;;;;21551:227;;;;21822:1;21802:16;:21;21798:34;;21825:7;;;21798:34;21852:23;21892:16;21878:11;:30;;;;:::i;:::-;21852:56;;21942:1;21923:15;:20;21919:33;;21945:7;;;;21919:33;21964:27;22006:24;22052:9;22047:581;22071:7;:14;;;;22067:1;:18;:29;;;;;22093:3;22089:1;:7;22067:29;22047:581;;;22118:21;22142:7;22150:1;22142:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22118:34;;22196:1;22171:27;;:13;:27;;;;:61;;;;;22219:13;;;;;;;;;;;22202:30;;:13;:30;;;;22171:61;:95;;;;;22261:4;22236:30;;:13;:30;;;;22171:95;22167:450;;;9427:42;22291:27;;;22319:13;22334:15;22291:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22287:315;;22574:8;;;22287:315;;22374:21;;;;;:::i;:::-;;;;22438:15;22418:35;;;;;:::i;:::-;;;22167:450;22103:525;22047:581;22098:3;;;;;:::i;:::-;;;;22047:581;;;;22690:19;22672:16;22653:57;;;;;;;;;;21381:1337;;;;21327:1391;;:::o;2285:191::-;2359:16;2378:6;;;;;;;;;;;2359:25;;2404:8;2395:6;;:17;;;;;;;;;;;;;;;;;;2459:8;2428:40;;2449:8;2428:40;;;;;;;;;;;;2348:128;2285:191;:::o;4253:507::-;4366:1;4350:18;;:4;:18;;;;:38;;;;;4386:1;4372:16;;:2;:16;;;;4350:38;4342:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:38;4427:4;4433:2;4437:6;4406:20;:38::i;:::-;4455:19;4477:9;:15;4487:4;4477:15;;;;;;;;;;;;;;;;4455:37;;4526:6;4511:11;:21;;4503:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4607:6;4593:11;:20;4575:9;:15;4585:4;4575:15;;;;;;;;;;;;;;;:38;;;;4645:6;4628:9;:13;4638:2;4628:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4693:2;4678:26;;4687:4;4678:26;;;4697:6;4678:26;;;;;;:::i;:::-;;;;;;;;4715:37;4735:4;4741:2;4745:6;4715:19;:37::i;:::-;4331:429;4253:507;;;:::o;14560:594::-;14640:13;;;;;;;;;;;14629:24;;:7;:24;;;;:52;;;;;14676:4;14657:24;;:7;:24;;;;14629:52;14625:522;;;14698:15;14716:18;14726:7;14716:9;:18::i;:::-;14698:36;;14749:22;14774:8;:17;14783:7;14774:17;;;;;;;;;;;;;;;;;;;;;;;;;14749:42;;8708:12;14824:7;:28;;:50;;;;;14857:17;14856:18;14824:50;14820:316;;;14915:4;14895:8;:17;14904:7;14895:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;14938:7;14951;14938:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14820:316;;;8708:12;14985:7;:27;:48;;;;;15016:17;14985:48;14981:155;;;15074:5;15054:8;:17;15063:7;15054:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15098:22;15112:7;15098:13;:22::i;:::-;14981:155;14820:316;14683:464;;14625:522;14560:594;:::o;19583:1736::-;19656:12;19670:22;19694:19;19745:1;19730:11;:16;19726:46;;19756:5;19763:1;19766:5;19748:24;;;;;;;;19726:46;19812:1;19787:27;;:13;;;;;;;;;;;:27;;;19783:57;;19824:5;19831:1;19834:5;19816:24;;;;;;;;19783:57;19881:13;;;;;;;;;;;19865:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19861:1451;;21284:5;21291:1;21294:5;21276:24;;;;;;;;19861:1451;20044:13;;;;;;;;;;;20028:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20024:1219;;21211:5;21218:1;21221:5;21203:24;;;;;;;;;;;20024:1219;20147:4;20129:23;;:6;:23;;;20112:40;;20249:21;20273:14;:54;;20318:8;20310:17;;20273:54;;;20298:8;20290:17;;20273:54;20249:78;;20346:20;20369:14;:54;;20414:8;20406:17;;20369:54;;;20394:8;20386:17;;20369:54;20346:77;;20481:1;20464:13;:18;:39;;;;20502:1;20486:12;:17;20464:39;20460:121;;;20536:5;20543:1;20528:33;;;;;;;;;;;;20460:121;20690:23;20730:3;20716:11;:17;;;;:::i;:::-;20690:43;;20752:17;20790:12;20772:15;:30;;;;:::i;:::-;20752:50;;20821:19;20868:15;20860:4;20844:13;:20;;;;:::i;:::-;20843:40;;;;:::i;:::-;20821:62;;20931:11;20919:9;:23;;;;:::i;:::-;20902:40;;21001:1;20983:14;:19;20979:101;;21035:5;21042:1;21027:33;;;;;;;;;;;;;;;20979:101;21124:4;21116:45;;;;;;;;;;;19583:1736;;;;;;:::o;5840:125::-;;;;:::o;5973:124::-;;;;:::o;15162:295::-;15226:9;15221:229;15245:7;:14;;;;15241:1;:18;15221:229;;;15299:7;15285:21;;:7;15293:1;15285:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15281:158;;15340:7;15365:1;15348:7;:14;;;;:18;;;;:::i;:::-;15340:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15327:7;15335:1;15327:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15386:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15418:5;;15281:158;15261:3;;;;;:::i;:::-;;;;15221:229;;;;15162:295;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:541::-;4093:4;4131:3;4120:9;4116:19;4108:27;;4145:71;4213:1;4202:9;4198:17;4189:6;4145:71;:::i;:::-;4226:72;4294:2;4283:9;4279:18;4270:6;4226:72;:::i;:::-;4308:66;4370:2;4359:9;4355:18;4346:6;4308:66;:::i;:::-;4384:72;4452:2;4441:9;4437:18;4428:6;4384:72;:::i;:::-;3922:541;;;;;;;:::o;4469:619::-;4546:6;4554;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4992:2;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4963:118;4469:619;;;;;:::o;5094:329::-;5153:6;5202:2;5190:9;5181:7;5177:23;5173:32;5170:119;;;5208:79;;:::i;:::-;5170:119;5328:1;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;:::i;:::-;5343:63;;5299:117;5094:329;;;;:::o;5429:222::-;5522:4;5560:2;5549:9;5545:18;5537:26;;5573:71;5641:1;5630:9;5626:17;5617:6;5573:71;:::i;:::-;5429:222;;;;:::o;5657:86::-;5692:7;5732:4;5725:5;5721:16;5710:27;;5657:86;;;:::o;5749:112::-;5832:22;5848:5;5832:22;:::i;:::-;5827:3;5820:35;5749:112;;:::o;5867:214::-;5956:4;5994:2;5983:9;5979:18;5971:26;;6007:67;6071:1;6060:9;6056:17;6047:6;6007:67;:::i;:::-;5867:214;;;;:::o;6087:114::-;6154:6;6188:5;6182:12;6172:22;;6087:114;;;:::o;6207:184::-;6306:11;6340:6;6335:3;6328:19;6380:4;6375:3;6371:14;6356:29;;6207:184;;;;:::o;6397:132::-;6464:4;6487:3;6479:11;;6517:4;6512:3;6508:14;6500:22;;6397:132;;;:::o;6535:108::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6535:108;;:::o;6649:179::-;6718:10;6739:46;6781:3;6773:6;6739:46;:::i;:::-;6817:4;6812:3;6808:14;6794:28;;6649:179;;;;:::o;6834:113::-;6904:4;6936;6931:3;6927:14;6919:22;;6834:113;;;:::o;6983:732::-;7102:3;7131:54;7179:5;7131:54;:::i;:::-;7201:86;7280:6;7275:3;7201:86;:::i;:::-;7194:93;;7311:56;7361:5;7311:56;:::i;:::-;7390:7;7421:1;7406:284;7431:6;7428:1;7425:13;7406:284;;;7507:6;7501:13;7534:63;7593:3;7578:13;7534:63;:::i;:::-;7527:70;;7620:60;7673:6;7620:60;:::i;:::-;7610:70;;7466:224;7453:1;7450;7446:9;7441:14;;7406:284;;;7410:14;7706:3;7699:10;;7107:608;;;6983:732;;;;:::o;7721:373::-;7864:4;7902:2;7891:9;7887:18;7879:26;;7951:9;7945:4;7941:20;7937:1;7926:9;7922:17;7915:47;7979:108;8082:4;8073:6;7979:108;:::i;:::-;7971:116;;7721:373;;;;:::o;8100:60::-;8128:3;8149:5;8142:12;;8100:60;;;:::o;8166:142::-;8216:9;8249:53;8267:34;8276:24;8294:5;8276:24;:::i;:::-;8267:34;:::i;:::-;8249:53;:::i;:::-;8236:66;;8166:142;;;:::o;8314:126::-;8364:9;8397:37;8428:5;8397:37;:::i;:::-;8384:50;;8314:126;;;:::o;8446:151::-;8521:9;8554:37;8585:5;8554:37;:::i;:::-;8541:50;;8446:151;;;:::o;8603:181::-;8715:62;8771:5;8715:62;:::i;:::-;8710:3;8703:75;8603:181;;:::o;8790:272::-;8908:4;8946:2;8935:9;8931:18;8923:26;;8959:96;9052:1;9041:9;9037:17;9028:6;8959:96;:::i;:::-;8790:272;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:332::-;9524:4;9562:2;9551:9;9547:18;9539:26;;9575:71;9643:1;9632:9;9628:17;9619:6;9575:71;:::i;:::-;9656:72;9724:2;9713:9;9709:18;9700:6;9656:72;:::i;:::-;9403:332;;;;;:::o;9741:474::-;9809:6;9817;9866:2;9854:9;9845:7;9841:23;9837:32;9834:119;;;9872:79;;:::i;:::-;9834:119;9992:1;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9963:117;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;9741:474;;;;;:::o;10221:152::-;10297:9;10330:37;10361:5;10330:37;:::i;:::-;10317:50;;10221:152;;;:::o;10379:183::-;10492:63;10549:5;10492:63;:::i;:::-;10487:3;10480:76;10379:183;;:::o;10568:274::-;10687:4;10725:2;10714:9;10710:18;10702:26;;10738:97;10832:1;10821:9;10817:17;10808:6;10738:97;:::i;:::-;10568:274;;;;:::o;10848:180::-;10896:77;10893:1;10886:88;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11034:320;11078:6;11115:1;11109:4;11105:12;11095:22;;11162:1;11156:4;11152:12;11183:18;11173:81;;11239:4;11231:6;11227:17;11217:27;;11173:81;11301:2;11293:6;11290:14;11270:18;11267:38;11264:84;;11320:18;;:::i;:::-;11264:84;11085:269;11034:320;;;:::o;11360:332::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11532:71;11600:1;11589:9;11585:17;11576:6;11532:71;:::i;:::-;11613:72;11681:2;11670:9;11666:18;11657:6;11613:72;:::i;:::-;11360:332;;;;;:::o;11698:143::-;11755:5;11786:6;11780:13;11771:22;;11802:33;11829:5;11802:33;:::i;:::-;11698:143;;;;:::o;11847:351::-;11917:6;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:64;12173:7;12164:6;12153:9;12149:22;12117:64;:::i;:::-;12107:74;;12063:128;11847:351;;;;:::o;12204:152::-;12344:4;12340:1;12332:6;12328:14;12321:28;12204:152;:::o;12362:365::-;12504:3;12525:66;12589:1;12584:3;12525:66;:::i;:::-;12518:73;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12362:365;;;:::o;12733:419::-;12899:4;12937:2;12926:9;12922:18;12914:26;;12986:9;12980:4;12976:20;12972:1;12961:9;12957:17;12950:47;13014:131;13140:4;13014:131;:::i;:::-;13006:139;;12733:419;;;:::o;13158:152::-;13298:4;13294:1;13286:6;13282:14;13275:28;13158:152;:::o;13316:365::-;13458:3;13479:66;13543:1;13538:3;13479:66;:::i;:::-;13472:73;;13554:93;13643:3;13554:93;:::i;:::-;13672:2;13667:3;13663:12;13656:19;;13316:365;;;:::o;13687:419::-;13853:4;13891:2;13880:9;13876:18;13868:26;;13940:9;13934:4;13930:20;13926:1;13915:9;13911:17;13904:47;13968:131;14094:4;13968:131;:::i;:::-;13960:139;;13687:419;;;:::o;14112:152::-;14252:4;14248:1;14240:6;14236:14;14229:28;14112:152;:::o;14270:365::-;14412:3;14433:66;14497:1;14492:3;14433:66;:::i;:::-;14426:73;;14508:93;14597:3;14508:93;:::i;:::-;14626:2;14621:3;14617:12;14610:19;;14270:365;;;:::o;14641:419::-;14807:4;14845:2;14834:9;14830:18;14822:26;;14894:9;14888:4;14884:20;14880:1;14869:9;14865:17;14858:47;14922:131;15048:4;14922:131;:::i;:::-;14914:139;;14641:419;;;:::o;15066:152::-;15206:4;15202:1;15194:6;15190:14;15183:28;15066:152;:::o;15224:365::-;15366:3;15387:66;15451:1;15446:3;15387:66;:::i;:::-;15380:73;;15462:93;15551:3;15462:93;:::i;:::-;15580:2;15575:3;15571:12;15564:19;;15224:365;;;:::o;15595:419::-;15761:4;15799:2;15788:9;15784:18;15776:26;;15848:9;15842:4;15838:20;15834:1;15823:9;15819:17;15812:47;15876:131;16002:4;15876:131;:::i;:::-;15868:139;;15595:419;;;:::o;16020:152::-;16160:4;16156:1;16148:6;16144:14;16137:28;16020:152;:::o;16178:365::-;16320:3;16341:66;16405:1;16400:3;16341:66;:::i;:::-;16334:73;;16416:93;16505:3;16416:93;:::i;:::-;16534:2;16529:3;16525:12;16518:19;;16178:365;;;:::o;16549:419::-;16715:4;16753:2;16742:9;16738:18;16730:26;;16802:9;16796:4;16792:20;16788:1;16777:9;16773:17;16766:47;16830:131;16956:4;16830:131;:::i;:::-;16822:139;;16549:419;;;:::o;16974:152::-;17114:4;17110:1;17102:6;17098:14;17091:28;16974:152;:::o;17132:365::-;17274:3;17295:66;17359:1;17354:3;17295:66;:::i;:::-;17288:73;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17132:365;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:180::-;17976:77;17973:1;17966:88;18073:4;18070:1;18063:15;18097:4;18094:1;18087:15;18114:191;18154:3;18173:20;18191:1;18173:20;:::i;:::-;18168:25;;18207:20;18225:1;18207:20;:::i;:::-;18202:25;;18250:1;18247;18243:9;18236:16;;18271:3;18268:1;18265:10;18262:36;;;18278:18;;:::i;:::-;18262:36;18114:191;;;;:::o;18311:85::-;18356:7;18385:5;18374:16;;18311:85;;;:::o;18402:158::-;18460:9;18493:61;18511:42;18520:32;18546:5;18520:32;:::i;:::-;18511:42;:::i;:::-;18493:61;:::i;:::-;18480:74;;18402:158;;;:::o;18566:147::-;18661:45;18700:5;18661:45;:::i;:::-;18656:3;18649:58;18566:147;;:::o;18719:807::-;18968:4;19006:3;18995:9;18991:19;18983:27;;19020:71;19088:1;19077:9;19073:17;19064:6;19020:71;:::i;:::-;19101:72;19169:2;19158:9;19154:18;19145:6;19101:72;:::i;:::-;19183:80;19259:2;19248:9;19244:18;19235:6;19183:80;:::i;:::-;19273;19349:2;19338:9;19334:18;19325:6;19273:80;:::i;:::-;19363:73;19431:3;19420:9;19416:19;19407:6;19363:73;:::i;:::-;19446;19514:3;19503:9;19499:19;19490:6;19446:73;:::i;:::-;18719:807;;;;;;;;;:::o;19532:663::-;19620:6;19628;19636;19685:2;19673:9;19664:7;19660:23;19656:32;19653:119;;;19691:79;;:::i;:::-;19653:119;19811:1;19836:64;19892:7;19883:6;19872:9;19868:22;19836:64;:::i;:::-;19826:74;;19782:128;19949:2;19975:64;20031:7;20022:6;20011:9;20007:22;19975:64;:::i;:::-;19965:74;;19920:129;20088:2;20114:64;20170:7;20161:6;20150:9;20146:22;20114:64;:::i;:::-;20104:74;;20059:129;19532:663;;;;;:::o;20201:106::-;20245:8;20294:5;20289:3;20285:15;20264:36;;20201:106;;;:::o;20313:183::-;20348:3;20386:1;20368:16;20365:23;20362:128;;;20424:1;20421;20418;20403:23;20446:34;20477:1;20471:8;20446:34;:::i;:::-;20439:41;;20362:128;20313:183;:::o;20502:180::-;20550:77;20547:1;20540:88;20647:4;20644:1;20637:15;20671:4;20668:1;20661:15;20688:281;20771:27;20793:4;20771:27;:::i;:::-;20763:6;20759:40;20901:6;20889:10;20886:22;20865:18;20853:10;20850:34;20847:62;20844:88;;;20912:18;;:::i;:::-;20844:88;20952:10;20948:2;20941:22;20731:238;20688:281;;:::o;20975:711::-;21014:3;21052:4;21034:16;21031:26;21060:5;21028:39;21089:20;;:::i;:::-;21164:1;21146:16;21142:24;21139:1;21133:4;21118:49;21197:4;21191:11;21296:16;21289:4;21281:6;21277:17;21274:39;21241:18;21233:6;21230:30;21214:113;21211:146;;;21342:5;;;;21211:146;21388:6;21382:4;21378:17;21424:3;21418:10;21451:18;21443:6;21440:30;21437:43;;;21473:5;;;;;;21437:43;21521:6;21514:4;21509:3;21505:14;21501:27;21580:1;21562:16;21558:24;21552:4;21548:35;21543:3;21540:44;21537:57;;;21587:5;;;;;;;21537:57;21604;21652:6;21646:4;21642:17;21634:6;21630:30;21624:4;21604:57;:::i;:::-;21677:3;21670:10;;21018:668;;;;;20975:711;;:::o;21692:152::-;21832:4;21828:1;21820:6;21816:14;21809:28;21692:152;:::o;21850:365::-;21992:3;22013:66;22077:1;22072:3;22013:66;:::i;:::-;22006:73;;22088:93;22177:3;22088:93;:::i;:::-;22206:2;22201:3;22197:12;22190:19;;21850:365;;;:::o;22221:419::-;22387:4;22425:2;22414:9;22410:18;22402:26;;22474:9;22468:4;22464:20;22460:1;22449:9;22445:17;22438:47;22502:131;22628:4;22502:131;:::i;:::-;22494:139;;22221:419;;;:::o;22646:147::-;22747:11;22784:3;22769:18;;22646:147;;;;:::o;22799:114::-;;:::o;22919:398::-;23078:3;23099:83;23180:1;23175:3;23099:83;:::i;:::-;23092:90;;23191:93;23280:3;23191:93;:::i;:::-;23309:1;23304:3;23300:11;23293:18;;22919:398;;;:::o;23323:379::-;23507:3;23529:147;23672:3;23529:147;:::i;:::-;23522:154;;23693:3;23686:10;;23323:379;;;:::o;23708:152::-;23848:4;23844:1;23836:6;23832:14;23825:28;23708:152;:::o;23866:365::-;24008:3;24029:66;24093:1;24088:3;24029:66;:::i;:::-;24022:73;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23866:365;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:152::-;24802:4;24798:1;24790:6;24786:14;24779:28;24662:152;:::o;24820:365::-;24962:3;24983:66;25047:1;25042:3;24983:66;:::i;:::-;24976:73;;25058:93;25147:3;25058:93;:::i;:::-;25176:2;25171:3;25167:12;25160:19;;24820:365;;;:::o;25191:419::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:152::-;25756:4;25752:1;25744:6;25740:14;25733:28;25616:152;:::o;25774:365::-;25916:3;25937:66;26001:1;25996:3;25937:66;:::i;:::-;25930:73;;26012:93;26101:3;26012:93;:::i;:::-;26130:2;26125:3;26121:12;26114:19;;25774:365;;;:::o;26145:419::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:410::-;26610:7;26633:20;26651:1;26633:20;:::i;:::-;26628:25;;26667:20;26685:1;26667:20;:::i;:::-;26662:25;;26722:1;26719;26715:9;26744:30;26762:11;26744:30;:::i;:::-;26733:41;;26923:1;26914:7;26910:15;26907:1;26904:22;26884:1;26877:9;26857:83;26834:139;;26953:18;;:::i;:::-;26834:139;26618:362;26570:410;;;;:::o;26986:180::-;27034:77;27031:1;27024:88;27131:4;27128:1;27121:15;27155:4;27152:1;27145:15;27172:185;27212:1;27229:20;27247:1;27229:20;:::i;:::-;27224:25;;27263:20;27281:1;27263:20;:::i;:::-;27258:25;;27302:1;27292:35;;27307:18;;:::i;:::-;27292:35;27349:1;27346;27342:9;27337:14;;27172:185;;;;:::o;27363:194::-;27403:4;27423:20;27441:1;27423:20;:::i;:::-;27418:25;;27457:20;27475:1;27457:20;:::i;:::-;27452:25;;27501:1;27498;27494:9;27486:17;;27525:1;27519:4;27516:11;27513:37;;;27530:18;;:::i;:::-;27513:37;27363:194;;;;:::o;27563:332::-;27684:4;27722:2;27711:9;27707:18;27699:26;;27735:71;27803:1;27792:9;27788:17;27779:6;27735:71;:::i;:::-;27816:72;27884:2;27873:9;27869:18;27860:6;27816:72;:::i;:::-;27563:332;;;;;:::o;27901:116::-;27971:21;27986:5;27971:21;:::i;:::-;27964:5;27961:32;27951:60;;28007:1;28004;27997:12;27951:60;27901:116;:::o;28023:137::-;28077:5;28108:6;28102:13;28093:22;;28124:30;28148:5;28124:30;:::i;:::-;28023:137;;;;:::o;28166:345::-;28233:6;28282:2;28270:9;28261:7;28257:23;28253:32;28250:119;;;28288:79;;:::i;:::-;28250:119;28408:1;28433:61;28486:7;28477:6;28466:9;28462:22;28433:61;:::i;:::-;28423:71;;28379:125;28166:345;;;;:::o;28517:143::-;28574:5;28605:6;28599:13;28590:22;;28621:33;28648:5;28621:33;:::i;:::-;28517:143;;;;:::o;28666:351::-;28736:6;28785:2;28773:9;28764:7;28760:23;28756:32;28753:119;;;28791:79;;:::i;:::-;28753:119;28911:1;28936:64;28992:7;28983:6;28972:9;28968:22;28936:64;:::i;:::-;28926:74;;28882:128;28666:351;;;;:::o;29023:114::-;29060:7;29100:30;29093:5;29089:42;29078:53;;29023:114;;;:::o;29143:122::-;29216:24;29234:5;29216:24;:::i;:::-;29209:5;29206:35;29196:63;;29255:1;29252;29245:12;29196:63;29143:122;:::o;29271:143::-;29328:5;29359:6;29353:13;29344:22;;29375:33;29402:5;29375:33;:::i;:::-;29271:143;;;;:::o;29420:93::-;29456:7;29496:10;29489:5;29485:22;29474:33;;29420:93;;;:::o;29519:120::-;29591:23;29608:5;29591:23;:::i;:::-;29584:5;29581:34;29571:62;;29629:1;29626;29619:12;29571:62;29519:120;:::o;29645:141::-;29701:5;29732:6;29726:13;29717:22;;29748:32;29774:5;29748:32;:::i;:::-;29645:141;;;;:::o;29792:661::-;29879:6;29887;29895;29944:2;29932:9;29923:7;29919:23;29915:32;29912:119;;;29950:79;;:::i;:::-;29912:119;30070:1;30095:64;30151:7;30142:6;30131:9;30127:22;30095:64;:::i;:::-;30085:74;;30041:128;30208:2;30234:64;30290:7;30281:6;30270:9;30266:22;30234:64;:::i;:::-;30224:74;;30179:129;30347:2;30373:63;30428:7;30419:6;30408:9;30404:22;30373:63;:::i;:::-;30363:73;;30318:128;29792:661;;;;;:::o;30459:152::-;30599:4;30595:1;30587:6;30583:14;30576:28;30459:152;:::o;30617:365::-;30759:3;30780:66;30844:1;30839:3;30780:66;:::i;:::-;30773:73;;30855:93;30944:3;30855:93;:::i;:::-;30973:2;30968:3;30964:12;30957:19;;30617:365;;;:::o;30988:419::-;31154:4;31192:2;31181:9;31177:18;31169:26;;31241:9;31235:4;31231:20;31227:1;31216:9;31212:17;31205:47;31269:131;31395:4;31269:131;:::i;:::-;31261:139;;30988:419;;;:::o;31413:152::-;31553:4;31549:1;31541:6;31537:14;31530:28;31413:152;:::o;31571:365::-;31713:3;31734:66;31798:1;31793:3;31734:66;:::i;:::-;31727:73;;31809:93;31898:3;31809:93;:::i;:::-;31927:2;31922:3;31918:12;31911:19;;31571:365;;;:::o;31942:419::-;32108:4;32146:2;32135:9;32131:18;32123:26;;32195:9;32189:4;32185:20;32181:1;32170:9;32166:17;32159:47;32223:131;32349:4;32223:131;:::i;:::-;32215:139;;31942:419;;;:::o;32367:152::-;32507:4;32503:1;32495:6;32491:14;32484:28;32367:152;:::o;32525:365::-;32667:3;32688:66;32752:1;32747:3;32688:66;:::i;:::-;32681:73;;32763:93;32852:3;32763:93;:::i;:::-;32881:2;32876:3;32872:12;32865:19;;32525:365;;;:::o;32896:419::-;33062:4;33100:2;33089:9;33085:18;33077:26;;33149:9;33143:4;33139:20;33135:1;33124:9;33120:17;33113:47;33177:131;33303:4;33177:131;:::i;:::-;33169:139;;32896:419;;;:::o;33321:148::-;33423:11;33460:3;33445:18;;33321:148;;;;:::o;33475:152::-;33615:4;33611:1;33603:6;33599:14;33592:28;33475:152;:::o;33633:400::-;33793:3;33814:84;33896:1;33891:3;33814:84;:::i;:::-;33807:91;;33907:93;33996:3;33907:93;:::i;:::-;34025:1;34020:3;34016:11;34009:18;;33633:400;;;:::o;34039:381::-;34224:3;34246:148;34390:3;34246:148;:::i;:::-;34239:155;;34411:3;34404:10;;34039:381;;;:::o;34426:180::-;34474:77;34471:1;34464:88;34571:4;34568:1;34561:15;34595:4;34592:1;34585:15;34612:815;34867:4;34905:3;34894:9;34890:19;34882:27;;34919:71;34987:1;34976:9;34972:17;34963:6;34919:71;:::i;:::-;35000:72;35068:2;35057:9;35053:18;35044:6;35000:72;:::i;:::-;35119:9;35113:4;35109:20;35104:2;35093:9;35089:18;35082:48;35147:108;35250:4;35241:6;35147:108;:::i;:::-;35139:116;;35265:72;35333:2;35322:9;35318:18;35309:6;35265:72;:::i;:::-;35347:73;35415:3;35404:9;35400:19;35391:6;35347:73;:::i;:::-;34612:815;;;;;;;;:::o;35433:117::-;35542:1;35539;35532:12;35556:129;35590:6;35617:20;;:::i;:::-;35607:30;;35646:33;35674:4;35666:6;35646:33;:::i;:::-;35556:129;;;:::o;35691:311::-;35768:4;35858:18;35850:6;35847:30;35844:56;;;35880:18;;:::i;:::-;35844:56;35930:4;35922:6;35918:17;35910:25;;35990:4;35984;35980:15;35972:23;;35691:311;;;:::o;36008:117::-;36117:1;36114;36107:12;36148:732;36255:5;36280:81;36296:64;36353:6;36296:64;:::i;:::-;36280:81;:::i;:::-;36271:90;;36381:5;36410:6;36403:5;36396:21;36444:4;36437:5;36433:16;36426:23;;36497:4;36489:6;36485:17;36477:6;36473:30;36526:3;36518:6;36515:15;36512:122;;;36545:79;;:::i;:::-;36512:122;36660:6;36643:231;36677:6;36672:3;36669:15;36643:231;;;36752:3;36781:48;36825:3;36813:10;36781:48;:::i;:::-;36776:3;36769:61;36859:4;36854:3;36850:14;36843:21;;36719:155;36703:4;36698:3;36694:14;36687:21;;36643:231;;;36647:21;36261:619;;36148:732;;;;;:::o;36903:385::-;36985:5;37034:3;37027:4;37019:6;37015:17;37011:27;37001:122;;37042:79;;:::i;:::-;37001:122;37152:6;37146:13;37177:105;37278:3;37270:6;37263:4;37255:6;37251:17;37177:105;:::i;:::-;37168:114;;36991:297;36903:385;;;;:::o;37294:554::-;37389:6;37438:2;37426:9;37417:7;37413:23;37409:32;37406:119;;;37444:79;;:::i;:::-;37406:119;37585:1;37574:9;37570:17;37564:24;37615:18;37607:6;37604:30;37601:117;;;37637:79;;:::i;:::-;37601:117;37742:89;37823:7;37814:6;37803:9;37799:22;37742:89;:::i;:::-;37732:99;;37535:306;37294:554;;;;:::o;37854:390::-;37960:3;37988:39;38021:5;37988:39;:::i;:::-;38043:89;38125:6;38120:3;38043:89;:::i;:::-;38036:96;;38141:65;38199:6;38194:3;38187:4;38180:5;38176:16;38141:65;:::i;:::-;38231:6;38226:3;38222:16;38215:23;;37964:280;37854:390;;;;:::o;38250:275::-;38382:3;38404:95;38495:3;38486:6;38404:95;:::i;:::-;38397:102;;38516:3;38509:10;;38250:275;;;;:::o;38531:152::-;38671:4;38667:1;38659:6;38655:14;38648:28;38531:152;:::o;38689:400::-;38849:3;38870:84;38952:1;38947:3;38870:84;:::i;:::-;38863:91;;38963:93;39052:3;38963:93;:::i;:::-;39081:1;39076:3;39072:11;39065:18;;38689:400;;;:::o;39095:381::-;39280:3;39302:148;39446:3;39302:148;:::i;:::-;39295:155;;39467:3;39460:10;;39095:381;;;:::o;39482:152::-;39622:4;39618:1;39610:6;39606:14;39599:28;39482:152;:::o;39640:400::-;39800:3;39821:84;39903:1;39898:3;39821:84;:::i;:::-;39814:91;;39914:93;40003:3;39914:93;:::i;:::-;40032:1;40027:3;40023:11;40016:18;;39640:400;;;:::o;40046:381::-;40231:3;40253:148;40397:3;40253:148;:::i;:::-;40246:155;;40418:3;40411:10;;40046:381;;;:::o;40433:233::-;40472:3;40495:24;40513:5;40495:24;:::i;:::-;40486:33;;40541:66;40534:5;40531:77;40528:103;;40611:18;;:::i;:::-;40528:103;40658:1;40651:5;40647:13;40640:20;;40433:233;;;:::o;40672:180::-;40720:77;40717:1;40710:88;40817:4;40814:1;40807:15;40841:4;40838:1;40831:15

Swarm Source

ipfs://068e16c6689656ff5cfd2261e4fcd579208e824b98e2139487eac8c5505afa6d
[ 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.