S Price: $0.569651 (-4.57%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

6

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,245.792113174818314025 FARM

Value
$0.00
0xde6664fc6eb43d64fc3e888a93a1f3e19f877a6e
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.20+commit.a1b79de6

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
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

// 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, "ReentrancyGuard: reentrant call");
        _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("Ownable: new owner is the zero address");
        }
        _transferOwnership(initialOwner);
    }

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

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _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), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        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), "ERC20: mint to the zero address");
        _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), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _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, "ERC20: insufficient allowance");
            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);
}

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

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 public constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 public constant TAX_RATE = 5; // 5%
    uint256 public constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 public constant AIRDROP_TAX = 25; // 2.5%
    uint256 public constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens
    uint256 public constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 token minimum for both operations

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public immutable metropolisFactory;
    address public immutable sonicToken;
    address public liquidityPair;

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

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        metropolisRouter = IMetropolisRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3);
        metropolisFactory = IMetropolisFactory(0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0);
        sonicToken = metropolisRouter.WETH();

        // Mint all tokens to contract first
        _mint(address(this), TOTAL_SUPPLY);
        
        // Create pair
        liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        
        // Approve router for full supply
        _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._afterTokenTransfer(from, to, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        if (from == owner() || to == owner() || from == address(this) || to == address(this)) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
        } else {
            bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
            
            if (isSellOrBuy) {
                uint256 totalTax = (amount * TAX_RATE) / 100;  // %5
                uint256 liquidityTax = (amount * LIQUIDITY_TAX) / 1000;  // %2.5 (25/1000)
                uint256 airdropTax = (amount * AIRDROP_TAX) / 1000;     // %2.5 (25/1000)
                uint256 transferAmount = amount - totalTax;
                
                // Transfer the tax to contract
                super._transfer(from, address(this), totalTax);
                // Transfer the remaining amount
                super._transfer(from, to, transferAmount);

                // Accumulate tokens for liquidity and airdrop
                _pendingLiquidityTokens += liquidityTax;
                _pendingAirdropTokens += airdropTax;

                // Process when either liquidity or airdrop tokens reach minimum
                if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && 
                    holders.length > 0) {
                    _processLiquidityAndAirdrop();
                }
            } else {
                super._transfer(from, to, amount);
            }
            
            _updateHolder(from);
            _updateHolder(to);
        }
    }

    function _updateHolder(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 _processLiquidityAndAirdrop() private {
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;

        uint256 totalTokens = tokensForLiquidity + tokensForAirdrop;
        
        // Convert all tokens to WETH first
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = metropolisRouter.WETH();
        
        // Check if we need to approve more tokens
        uint256 currentAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (currentAllowance < totalTokens) {
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }
        
        try metropolisRouter.swapExactTokensForTokens(
            totalTokens,
            0, // minimum output amount
            path,
            address(this),
            block.timestamp
        ) {
            uint256 wethBalance = IERC20(metropolisRouter.WETH()).balanceOf(address(this));
            if (wethBalance > 0) {
                // Calculate proportions
                uint256 wethForLiquidity = (wethBalance * tokensForLiquidity) / totalTokens;
                uint256 wethForAirdrop = wethBalance - wethForLiquidity;

                // Process liquidity first
                if (wethForLiquidity > 0) {
                    // Check WETH approval
                    uint256 wethAllowance = IERC20(metropolisRouter.WETH()).allowance(address(this), address(metropolisRouter));
                    if (wethAllowance < wethForLiquidity) {
                        IERC20(metropolisRouter.WETH()).approve(address(metropolisRouter), type(uint256).max);
                    }
                    
                    try metropolisRouter.addLiquidity(
                        address(this),
                        metropolisRouter.WETH(),
                        tokensForLiquidity / 2,
                        wethForLiquidity,
                        0,
                        0,
                        address(this),
                        block.timestamp
                    ) {
                        emit LiquidityAdded(tokensForLiquidity / 2, wethForLiquidity);
                    } catch {
                        // If liquidity add fails, just continue with airdrop
                        _pendingLiquidityTokens = tokensForLiquidity;
                    }
                }

                // Then process airdrop
                if (wethForAirdrop > 0 && holders.length > 0) {
                    uint256 amountPerHolder = wethForAirdrop / holders.length;
                    
                    if (amountPerHolder > 0) {
                        for (uint256 i = 0; i < holders.length && i < 100; i++) {
                            try IERC20(metropolisRouter.WETH()).transfer(holders[i], amountPerHolder) {
                                // Transfer successful
                            } catch {
                                continue;
                            }
                        }
                        
                        emit AirdropDistributed(wethForAirdrop, holders.length);
                    }
                }
            }
        } catch {
            // If the swap fails, restore both pending amounts
            _pendingLiquidityTokens = tokensForLiquidity;
            _pendingAirdropTokens = tokensForAirdrop;
        }
    }

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

    // Initial liquidity function (must be called by owner with ETH)
    function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner {
        require(msg.value > 0, "Must provide ETH for initial liquidity");
        require(tokenAmount > 0, "Must provide token amount for initial liquidity");
        
        // Check contract balance
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "Insufficient token balance in contract"
        );

        // Approve router to spend tokens directly from contract
        _approve(address(this), address(metropolisRouter), tokenAmount);

        // Add liquidity with minimal checks
        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,              // No minimum token amount
            0,              // No minimum ETH amount
            msg.sender,     // LP tokens will go to owner directly
            block.timestamp // Immediate execution
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            // If failed, revert the approval
            _approve(address(this), address(metropolisRouter), 0);
            revert("Failed to add liquidity");
        }

        // Return any unused ETH
        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            payable(msg.sender).transfer(remainingETH);
        }
    }

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

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

    // Transfer tokens to owner
    function withdrawTokensToOwner(uint256 amount) external onlyOwner {
        require(
            IERC20(address(this)).balanceOf(address(this)) >= amount,
            "Insufficient balance"
        );
        _transfer(address(this), msg.sender, amount);
    }

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

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

    // Process liquidity and airdrop manually if needed
    function processLiquidityAndAirdrop() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "No pending tokens");
        require(holders.length > 0, "No holders");
        _processLiquidityAndAirdrop();
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"inputs":[],"name":"AIRDROP_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_HOLDER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TOKENS_FOR_PROCESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801562000010575f80fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d0000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000a43565b508060049081620000a1919062000a43565b50505060016005819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001149062000bab565b60405180910390fd5b6200012e81620003b260201b60201c565b507395a7e403d7cf20f675ff9273d66e94d35ba49fa360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000236573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025c919062000c30565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002ab3069d3c21bcecceda10000006200047560201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a0516040518363ffffffff1660e01b8152600401620002ec92919062000c71565b6020604051808303815f875af115801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c30565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ac3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000620005da60201b60201c565b62000ec5565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000cea565b60405180910390fd5b620004f95f8383620007a560201b60201c565b8060025f8282546200050c919062000d37565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005bb919062000d82565b60405180910390a3620005d65f8383620007bd60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006429062000e11565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b39062000ea5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000798919062000d82565b60405180910390a3505050565b620007b8838383620007d560201b60201c565b505050565b620007d0838383620007da60201b60201c565b505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200085b57607f821691505b60208210810362000871576200087062000816565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000898565b620008e1868362000898565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200092b620009256200091f84620008f9565b62000902565b620008f9565b9050919050565b5f819050919050565b62000946836200090b565b6200095e620009558262000932565b848454620008a4565b825550505050565b5f90565b6200097462000966565b620009818184846200093b565b505050565b5b81811015620009a8576200099c5f826200096a565b60018101905062000987565b5050565b601f821115620009f757620009c18162000877565b620009cc8462000889565b81016020851015620009dc578190505b620009f4620009eb8562000889565b83018262000986565b50505b505050565b5f82821c905092915050565b5f62000a195f1984600802620009fc565b1980831691505092915050565b5f62000a33838362000a08565b9150826002028217905092915050565b62000a4e82620007df565b67ffffffffffffffff81111562000a6a5762000a69620007e9565b5b62000a76825462000843565b62000a83828285620009ac565b5f60209050601f83116001811462000ab9575f841562000aa4578287015190505b62000ab0858262000a26565b86555062000b1f565b601f19841662000ac98662000877565b5f5b8281101562000af25784890151825560018201915060208501945060208101905062000acb565b8683101562000b12578489015162000b0e601f89168262000a08565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62000b9360268362000b27565b915062000ba08262000b37565b604082019050919050565b5f6020820190508181035f83015262000bc48162000b85565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bfa8262000bcf565b9050919050565b62000c0c8162000bee565b811462000c17575f80fd5b50565b5f8151905062000c2a8162000c01565b92915050565b5f6020828403121562000c485762000c4762000bcb565b5b5f62000c578482850162000c1a565b91505092915050565b62000c6b8162000bee565b82525050565b5f60408201905062000c865f83018562000c60565b62000c95602083018462000c60565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000cd2601f8362000b27565b915062000cdf8262000c9c565b602082019050919050565b5f6020820190508181035f83015262000d038162000cc4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d4382620008f9565b915062000d5083620008f9565b925082820190508082111562000d6b5762000d6a62000d0a565b5b92915050565b62000d7c81620008f9565b82525050565b5f60208201905062000d975f83018462000d71565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000df960248362000b27565b915062000e068262000d9d565b604082019050919050565b5f6020820190508181035f83015262000e2a8162000deb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000e8d60228362000b27565b915062000e9a8262000e31565b604082019050919050565b5f6020820190508181035f83015262000ebe8162000e7f565b9050919050565b60805160a051613d8b62000ee75f395f610bbd01525f6112690152613d8b5ff3fe6080604052600436106101e6575f3560e01c80637ac84fc111610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106cd578063dd62ed3e146106f7578063f2fde38b14610733578063fd7c9fab1461075b576101ed565b8063a9059cbb14610603578063bc531dae1461063f578063c0d7865514610669578063d4d7b19a14610691576101ed565b80638da5cb5b116100d05780638da5cb5b1461055b578063902d55a51461058557806395a6e254146105af57806395d89b41146105d9576101ed565b80637ac84fc1146104c7578063808a5457146104dd57806381f0549f1461050757806383f170be14610531576101ed565b8063461a3a951161017957806362b6327a1161014857806362b6327a1461040f57806370a08231146104395780637136982b1461047557806379304bec1461049f576101ed565b8063461a3a951461036957806357376198146103935780635d76b04c146103bb5780635fe8e7cc146103e5576101ed565b806323b872dd116101b557806323b872dd146102ab5780632a11ced0146102e7578063313ce5671461032357806341a22cc21461034d576101ed565b806306fdde03146101f157806308dee2b41461021b578063095ea7b31461024557806318160ddd14610281576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b50610205610785565b6040516102129190612a42565b60405180910390f35b348015610226575f80fd5b5061022f610815565b60405161023c9190612a7a565b60405180910390f35b348015610250575f80fd5b5061026b60048036038101906102669190612b28565b61081e565b6040516102789190612b80565b60405180910390f35b34801561028c575f80fd5b50610295610839565b6040516102a29190612a7a565b60405180910390f35b3480156102b6575f80fd5b506102d160048036038101906102cc9190612b99565b610842565b6040516102de9190612b80565b60405180910390f35b3480156102f2575f80fd5b5061030d60048036038101906103089190612be9565b610869565b60405161031a9190612c23565b60405180910390f35b34801561032e575f80fd5b506103376108a4565b6040516103449190612c57565b60405180910390f35b61036760048036038101906103629190612be9565b6108ac565b005b348015610374575f80fd5b5061037d610bbb565b60405161038a9190612c23565b60405180910390f35b34801561039e575f80fd5b506103b960048036038101906103b49190612b28565b610bdf565b005b3480156103c6575f80fd5b506103cf610cdc565b6040516103dc9190612a7a565b60405180910390f35b3480156103f0575f80fd5b506103f9610ce5565b6040516104069190612d27565b60405180910390f35b34801561041a575f80fd5b50610423610d70565b6040516104309190612da2565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190612dbb565b610d95565b60405161046c9190612a7a565b60405180910390f35b348015610480575f80fd5b50610489610dda565b6040516104969190612a7a565b60405180910390f35b3480156104aa575f80fd5b506104c560048036038101906104c09190612be9565b610de6565b005b3480156104d2575f80fd5b506104db610eb6565b005b3480156104e8575f80fd5b506104f1610f5f565b6040516104fe9190612c23565b60405180910390f35b348015610512575f80fd5b5061051b610f84565b6040516105289190612a7a565b60405180910390f35b34801561053c575f80fd5b50610545610f89565b6040516105529190612a7a565b60405180910390f35b348015610566575f80fd5b5061056f610f8e565b60405161057c9190612c23565b60405180910390f35b348015610590575f80fd5b50610599610fb6565b6040516105a69190612a7a565b60405180910390f35b3480156105ba575f80fd5b506105c3610fc4565b6040516105d09190612a7a565b60405180910390f35b3480156105e4575f80fd5b506105ed610fd1565b6040516105fa9190612a42565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190612b28565b611061565b6040516106369190612b80565b60405180910390f35b34801561064a575f80fd5b5061065361107c565b6040516106609190612a7a565b60405180910390f35b348015610674575f80fd5b5061068f600480360381019061068a9190612dbb565b611081565b005b34801561069c575f80fd5b506106b760048036038101906106b29190612dbb565b61113a565b6040516106c49190612b80565b60405180910390f35b3480156106d8575f80fd5b506106e1611157565b6040516106ee9190612a7a565b60405180910390f35b348015610702575f80fd5b5061071d60048036038101906107189190612de6565b611163565b60405161072a9190612a7a565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190612dbb565b6111e5565b005b348015610766575f80fd5b5061076f611267565b60405161077c9190612e44565b60405180910390f35b60606003805461079490612e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090612e8a565b801561080b5780601f106107e25761010080835404028352916020019161080b565b820191905f5260205f20905b8154815290600101906020018083116107ee57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061082e81858561128b565b600191505092915050565b5f600254905090565b5f8033905061085285828561144e565b61085d8585856114d9565b60019150509392505050565b600a8181548110610878575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6108b46117ab565b5f34116108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed90612f2a565b60405180910390fd5b5f8111610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90612fb8565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109729190612c23565b602060405180830381865afa15801561098d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b19190612fea565b10156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990613085565b60405180910390fd5b610a1e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361128b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a83969594939291906130dc565b60606040518083038185885af193505050508015610abf57506040513d601f19601f82011682018060405250810190610abc919061313b565b60015b610b2a57610aef3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f61128b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906131d5565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b5e9291906131f3565b60405180910390a15f4790505f811115610bb7573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610bb5573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610be76117ab565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90613264565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c79610f8e565b836040518363ffffffff1660e01b8152600401610c97929190613282565b6020604051808303815f875af1158015610cb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd791906132d3565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d6657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d1d575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610dee6117ab565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e289190612c23565b602060405180830381865afa158015610e43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e679190612fea565b1015610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613348565b60405180910390fd5b610eb33033836114d9565b50565b610ebe6117ab565b5f600b541180610ecf57505f600c54115b610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f05906133b0565b60405180910390fd5b5f600a8054905011610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613418565b60405180910390fd5b610f5d611822565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b68056bc75e2d6310000081565b606060048054610fe090612e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461100c90612e8a565b80156110575780601f1061102e57610100808354040283529160200191611057565b820191905f5260205f20905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b5f803390506110718185856114d9565b600191505092915050565b601981565b6110896117ab565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613480565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111ed6117ab565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061350e565b60405180910390fd5b611264816122a2565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f09061359c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061362a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114419190612a7a565b60405180910390a3505050565b5f6114598484611163565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114d357818110156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613692565b60405180910390fd5b6114d2848484840361128b565b5b50505050565b6114e1610f8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061154c575061151d610f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061158257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115b857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156115df576115c8838383612365565b6115d1836125d1565b6115da826125d1565b6117a6565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611687575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015611786575f606460058461169f91906136dd565b6116a9919061374b565b90505f6103e86019856116bc91906136dd565b6116c6919061374b565b90505f6103e86019866116d991906136dd565b6116e3919061374b565b90505f83866116f2919061377b565b90506116ff883086612365565b61170a888883612365565b82600b5f82825461171b91906137ae565b9250508190555081600c5f82825461173391906137ae565b9250508190555068056bc75e2d63100000600b5410158061175f575068056bc75e2d63100000600c5410155b801561176f57505f600a80549050115b1561177d5761177c611822565b5b50505050611792565b611791848484612365565b5b61179b846125d1565b6117a4836125d1565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166117ca610f8e565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061382b565b60405180910390fd5b565b5f600b5490505f600c5490505f600b819055505f600c819055505f818361184991906137ae565b90505f600267ffffffffffffffff81111561186757611866613849565b5b6040519080825280602002602001820160405280156118955781602001602082028036833780820191505090505b50905030815f815181106118ac576118ab613876565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197491906138b7565b8160018151811061198857611987613876565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f3073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611a1f9291906138e2565b602060405180830381865afa158015611a3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5e9190612fea565b905082811015611a9f57611a9e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda100000061128b565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739845f8530426040518663ffffffff1660e01b8152600401611b01959493929190613909565b5f604051808303815f875af1925050508015611b3f57506040513d5f823e3d601f19601f82011682018060405250810190611b3c9190613a74565b60015b611b565784600b8190555083600c8190555061229b565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be691906138b7565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c1e9190612c23565b602060405180830381865afa158015611c39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5d9190612fea565b90505f811115612299575f848783611c7591906136dd565b611c7f919061374b565b90505f8183611c8e919061377b565b90505f8211156120ad575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2791906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611d829291906138e2565b602060405180830381865afa158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc19190612fea565b905082811015611f165760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5991906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ed4929190613282565b6020604051808303815f875af1158015611ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1491906132d3565b505b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe291906138b7565b60028d611fef919061374b565b875f8030426040518963ffffffff1660e01b8152600401612017989796959493929190613abb565b6060604051808303815f875af192505050801561205257506040513d601f19601f8201168201806040525081019061204f919061313b565b60015b6120625788600b819055506120ab565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60028a612093919061374b565b846040516120a29291906131f3565b60405180910390a15b505b5f811180156120c057505f600a80549050115b15612296575f600a80549050826120d7919061374b565b90505f811115612294575f5b600a80549050811080156120f75750606481105b156122545760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a83815481106121b9576121b8613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121ff929190613282565b6020604051808303815f875af192505050801561223a57506040513d601f19601f8201168201806040525081019061223791906132d3565b60015b1561224157505b808061224c90613b37565b9150506120e3565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a8054905060405161228b9291906131f3565b60405180910390a15b505b50505b505b5050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613bee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613c7c565b60405180910390fd5b61244c83838361280b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690613d0a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125b89190612a7a565b60405180910390a36125cb84848461281b565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561265a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612808575f61266982610d95565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e8000082101580156126ce575080155b1561278d57600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612805565b678ac7230489e80000821080156127a15750805b15612804575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506128038361282b565b5b5b50505b50565b6128168383836129ae565b505050565b6128268383836129b3565b505050565b5f5b600a805490508110156129aa578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061286557612864613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361299757600a6001600a805490506128bc919061377b565b815481106128cd576128cc613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061290957612908613876565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a8054806129605761295f613d28565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556129aa565b80806129a290613b37565b91505061282d565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129ef5780820151818401526020810190506129d4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a14826129b8565b612a1e81856129c2565b9350612a2e8185602086016129d2565b612a37816129fa565b840191505092915050565b5f6020820190508181035f830152612a5a8184612a0a565b905092915050565b5f819050919050565b612a7481612a62565b82525050565b5f602082019050612a8d5f830184612a6b565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612acd82612aa4565b9050919050565b612add81612ac3565b8114612ae7575f80fd5b50565b5f81359050612af881612ad4565b92915050565b612b0781612a62565b8114612b11575f80fd5b50565b5f81359050612b2281612afe565b92915050565b5f8060408385031215612b3e57612b3d612a9c565b5b5f612b4b85828601612aea565b9250506020612b5c85828601612b14565b9150509250929050565b5f8115159050919050565b612b7a81612b66565b82525050565b5f602082019050612b935f830184612b71565b92915050565b5f805f60608486031215612bb057612baf612a9c565b5b5f612bbd86828701612aea565b9350506020612bce86828701612aea565b9250506040612bdf86828701612b14565b9150509250925092565b5f60208284031215612bfe57612bfd612a9c565b5b5f612c0b84828501612b14565b91505092915050565b612c1d81612ac3565b82525050565b5f602082019050612c365f830184612c14565b92915050565b5f60ff82169050919050565b612c5181612c3c565b82525050565b5f602082019050612c6a5f830184612c48565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ca281612ac3565b82525050565b5f612cb38383612c99565b60208301905092915050565b5f602082019050919050565b5f612cd582612c70565b612cdf8185612c7a565b9350612cea83612c8a565b805f5b83811015612d1a578151612d018882612ca8565b9750612d0c83612cbf565b925050600181019050612ced565b5085935050505092915050565b5f6020820190508181035f830152612d3f8184612ccb565b905092915050565b5f819050919050565b5f612d6a612d65612d6084612aa4565b612d47565b612aa4565b9050919050565b5f612d7b82612d50565b9050919050565b5f612d8c82612d71565b9050919050565b612d9c81612d82565b82525050565b5f602082019050612db55f830184612d93565b92915050565b5f60208284031215612dd057612dcf612a9c565b5b5f612ddd84828501612aea565b91505092915050565b5f8060408385031215612dfc57612dfb612a9c565b5b5f612e0985828601612aea565b9250506020612e1a85828601612aea565b9150509250929050565b5f612e2e82612d71565b9050919050565b612e3e81612e24565b82525050565b5f602082019050612e575f830184612e35565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ea157607f821691505b602082108103612eb457612eb3612e5d565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612f146026836129c2565b9150612f1f82612eba565b604082019050919050565b5f6020820190508181035f830152612f4181612f08565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612fa2602f836129c2565b9150612fad82612f48565b604082019050919050565b5f6020820190508181035f830152612fcf81612f96565b9050919050565b5f81519050612fe481612afe565b92915050565b5f60208284031215612fff57612ffe612a9c565b5b5f61300c84828501612fd6565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f61306f6026836129c2565b915061307a82613015565b604082019050919050565b5f6020820190508181035f83015261309c81613063565b9050919050565b5f819050919050565b5f6130c66130c16130bc846130a3565b612d47565b612a62565b9050919050565b6130d6816130ac565b82525050565b5f60c0820190506130ef5f830189612c14565b6130fc6020830188612a6b565b61310960408301876130cd565b61311660608301866130cd565b6131236080830185612c14565b61313060a0830184612a6b565b979650505050505050565b5f805f6060848603121561315257613151612a9c565b5b5f61315f86828701612fd6565b935050602061317086828701612fd6565b925050604061318186828701612fd6565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f6131bf6017836129c2565b91506131ca8261318b565b602082019050919050565b5f6020820190508181035f8301526131ec816131b3565b9050919050565b5f6040820190506132065f830185612a6b565b6132136020830184612a6b565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f61324e601b836129c2565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f6040820190506132955f830185612c14565b6132a26020830184612a6b565b9392505050565b6132b281612b66565b81146132bc575f80fd5b50565b5f815190506132cd816132a9565b92915050565b5f602082840312156132e8576132e7612a9c565b5b5f6132f5848285016132bf565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6133326014836129c2565b915061333d826132fe565b602082019050919050565b5f6020820190508181035f83015261335f81613326565b9050919050565b7f4e6f2070656e64696e6720746f6b656e730000000000000000000000000000005f82015250565b5f61339a6011836129c2565b91506133a582613366565b602082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b7f4e6f20686f6c64657273000000000000000000000000000000000000000000005f82015250565b5f613402600a836129c2565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f61346a6016836129c2565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134f86026836129c2565b91506135038261349e565b604082019050919050565b5f6020820190508181035f830152613525816134ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135866024836129c2565b91506135918261352c565b604082019050919050565b5f6020820190508181035f8301526135b38161357a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6136146022836129c2565b915061361f826135ba565b604082019050919050565b5f6020820190508181035f83015261364181613608565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61367c601d836129c2565b915061368782613648565b602082019050919050565b5f6020820190508181035f8301526136a981613670565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136e782612a62565b91506136f283612a62565b925082820261370081612a62565b91508282048414831517613717576137166136b0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61375582612a62565b915061376083612a62565b9250826137705761376f61371e565b5b828204905092915050565b5f61378582612a62565b915061379083612a62565b92508282039050818111156137a8576137a76136b0565b5b92915050565b5f6137b882612a62565b91506137c383612a62565b92508282019050808211156137db576137da6136b0565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6138156020836129c2565b9150613820826137e1565b602082019050919050565b5f6020820190508181035f83015261384281613809565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506138b181612ad4565b92915050565b5f602082840312156138cc576138cb612a9c565b5b5f6138d9848285016138a3565b91505092915050565b5f6040820190506138f55f830185612c14565b6139026020830184612c14565b9392505050565b5f60a08201905061391c5f830188612a6b565b61392960208301876130cd565b818103604083015261393b8186612ccb565b905061394a6060830185612c14565b6139576080830184612a6b565b9695505050505050565b5f80fd5b61396e826129fa565b810181811067ffffffffffffffff8211171561398d5761398c613849565b5b80604052505050565b5f61399f612a93565b90506139ab8282613965565b919050565b5f67ffffffffffffffff8211156139ca576139c9613849565b5b602082029050602081019050919050565b5f80fd5b5f6139f16139ec846139b0565b613996565b90508083825260208201905060208402830185811115613a1457613a136139db565b5b835b81811015613a3d5780613a298882612fd6565b845260208401935050602081019050613a16565b5050509392505050565b5f82601f830112613a5b57613a5a613961565b5b8151613a6b8482602086016139df565b91505092915050565b5f60208284031215613a8957613a88612a9c565b5b5f82015167ffffffffffffffff811115613aa657613aa5612aa0565b5b613ab284828501613a47565b91505092915050565b5f61010082019050613acf5f83018b612c14565b613adc602083018a612c14565b613ae96040830189612a6b565b613af66060830188612a6b565b613b0360808301876130cd565b613b1060a08301866130cd565b613b1d60c0830185612c14565b613b2a60e0830184612a6b565b9998505050505050505050565b5f613b4182612a62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7357613b726136b0565b5b600182019050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bd86025836129c2565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c666023836129c2565b9150613c7182613c0c565b604082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613cf46026836129c2565b9150613cff82613c9a565b604082019050919050565b5f6020820190508181035f830152613d2181613ce8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122055b0476cc135461ece77fe649a98ad95105a67c2fe2e4745e34b919e269a143e64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101e6575f3560e01c80637ac84fc111610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106cd578063dd62ed3e146106f7578063f2fde38b14610733578063fd7c9fab1461075b576101ed565b8063a9059cbb14610603578063bc531dae1461063f578063c0d7865514610669578063d4d7b19a14610691576101ed565b80638da5cb5b116100d05780638da5cb5b1461055b578063902d55a51461058557806395a6e254146105af57806395d89b41146105d9576101ed565b80637ac84fc1146104c7578063808a5457146104dd57806381f0549f1461050757806383f170be14610531576101ed565b8063461a3a951161017957806362b6327a1161014857806362b6327a1461040f57806370a08231146104395780637136982b1461047557806379304bec1461049f576101ed565b8063461a3a951461036957806357376198146103935780635d76b04c146103bb5780635fe8e7cc146103e5576101ed565b806323b872dd116101b557806323b872dd146102ab5780632a11ced0146102e7578063313ce5671461032357806341a22cc21461034d576101ed565b806306fdde03146101f157806308dee2b41461021b578063095ea7b31461024557806318160ddd14610281576101ed565b366101ed57005b5f80fd5b3480156101fc575f80fd5b50610205610785565b6040516102129190612a42565b60405180910390f35b348015610226575f80fd5b5061022f610815565b60405161023c9190612a7a565b60405180910390f35b348015610250575f80fd5b5061026b60048036038101906102669190612b28565b61081e565b6040516102789190612b80565b60405180910390f35b34801561028c575f80fd5b50610295610839565b6040516102a29190612a7a565b60405180910390f35b3480156102b6575f80fd5b506102d160048036038101906102cc9190612b99565b610842565b6040516102de9190612b80565b60405180910390f35b3480156102f2575f80fd5b5061030d60048036038101906103089190612be9565b610869565b60405161031a9190612c23565b60405180910390f35b34801561032e575f80fd5b506103376108a4565b6040516103449190612c57565b60405180910390f35b61036760048036038101906103629190612be9565b6108ac565b005b348015610374575f80fd5b5061037d610bbb565b60405161038a9190612c23565b60405180910390f35b34801561039e575f80fd5b506103b960048036038101906103b49190612b28565b610bdf565b005b3480156103c6575f80fd5b506103cf610cdc565b6040516103dc9190612a7a565b60405180910390f35b3480156103f0575f80fd5b506103f9610ce5565b6040516104069190612d27565b60405180910390f35b34801561041a575f80fd5b50610423610d70565b6040516104309190612da2565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190612dbb565b610d95565b60405161046c9190612a7a565b60405180910390f35b348015610480575f80fd5b50610489610dda565b6040516104969190612a7a565b60405180910390f35b3480156104aa575f80fd5b506104c560048036038101906104c09190612be9565b610de6565b005b3480156104d2575f80fd5b506104db610eb6565b005b3480156104e8575f80fd5b506104f1610f5f565b6040516104fe9190612c23565b60405180910390f35b348015610512575f80fd5b5061051b610f84565b6040516105289190612a7a565b60405180910390f35b34801561053c575f80fd5b50610545610f89565b6040516105529190612a7a565b60405180910390f35b348015610566575f80fd5b5061056f610f8e565b60405161057c9190612c23565b60405180910390f35b348015610590575f80fd5b50610599610fb6565b6040516105a69190612a7a565b60405180910390f35b3480156105ba575f80fd5b506105c3610fc4565b6040516105d09190612a7a565b60405180910390f35b3480156105e4575f80fd5b506105ed610fd1565b6040516105fa9190612a42565b60405180910390f35b34801561060e575f80fd5b5061062960048036038101906106249190612b28565b611061565b6040516106369190612b80565b60405180910390f35b34801561064a575f80fd5b5061065361107c565b6040516106609190612a7a565b60405180910390f35b348015610674575f80fd5b5061068f600480360381019061068a9190612dbb565b611081565b005b34801561069c575f80fd5b506106b760048036038101906106b29190612dbb565b61113a565b6040516106c49190612b80565b60405180910390f35b3480156106d8575f80fd5b506106e1611157565b6040516106ee9190612a7a565b60405180910390f35b348015610702575f80fd5b5061071d60048036038101906107189190612de6565b611163565b60405161072a9190612a7a565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190612dbb565b6111e5565b005b348015610766575f80fd5b5061076f611267565b60405161077c9190612e44565b60405180910390f35b60606003805461079490612e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546107c090612e8a565b801561080b5780601f106107e25761010080835404028352916020019161080b565b820191905f5260205f20905b8154815290600101906020018083116107ee57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061082e81858561128b565b600191505092915050565b5f600254905090565b5f8033905061085285828561144e565b61085d8585856114d9565b60019150509392505050565b600a8181548110610878575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6108b46117ab565b5f34116108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed90612f2a565b60405180910390fd5b5f8111610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90612fb8565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109729190612c23565b602060405180830381865afa15801561098d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b19190612fea565b10156109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990613085565b60405180910390fd5b610a1e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361128b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a83969594939291906130dc565b60606040518083038185885af193505050508015610abf57506040513d601f19601f82011682018060405250810190610abc919061313b565b60015b610b2a57610aef3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f61128b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906131d5565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b5e9291906131f3565b60405180910390a15f4790505f811115610bb7573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610bb5573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b610be76117ab565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c90613264565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c79610f8e565b836040518363ffffffff1660e01b8152600401610c97929190613282565b6020604051808303815f875af1158015610cb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd791906132d3565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d6657602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610d1d575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610dee6117ab565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e289190612c23565b602060405180830381865afa158015610e43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e679190612fea565b1015610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90613348565b60405180910390fd5b610eb33033836114d9565b50565b610ebe6117ab565b5f600b541180610ecf57505f600c54115b610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f05906133b0565b60405180910390fd5b5f600a8054905011610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c90613418565b60405180910390fd5b610f5d611822565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b68056bc75e2d6310000081565b606060048054610fe090612e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461100c90612e8a565b80156110575780601f1061102e57610100808354040283529160200191611057565b820191905f5260205f20905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b5f803390506110718185856114d9565b600191505092915050565b601981565b6110896117ab565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613480565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111ed6117ab565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061350e565b60405180910390fd5b611264816122a2565b50565b7f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f09061359c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e9061362a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114419190612a7a565b60405180910390a3505050565b5f6114598484611163565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114d357818110156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613692565b60405180910390fd5b6114d2848484840361128b565b5b50505050565b6114e1610f8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061154c575061151d610f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061158257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115b857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156115df576115c8838383612365565b6115d1836125d1565b6115da826125d1565b6117a6565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611687575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015611786575f606460058461169f91906136dd565b6116a9919061374b565b90505f6103e86019856116bc91906136dd565b6116c6919061374b565b90505f6103e86019866116d991906136dd565b6116e3919061374b565b90505f83866116f2919061377b565b90506116ff883086612365565b61170a888883612365565b82600b5f82825461171b91906137ae565b9250508190555081600c5f82825461173391906137ae565b9250508190555068056bc75e2d63100000600b5410158061175f575068056bc75e2d63100000600c5410155b801561176f57505f600a80549050115b1561177d5761177c611822565b5b50505050611792565b611791848484612365565b5b61179b846125d1565b6117a4836125d1565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166117ca610f8e565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061382b565b60405180910390fd5b565b5f600b5490505f600c5490505f600b819055505f600c819055505f818361184991906137ae565b90505f600267ffffffffffffffff81111561186757611866613849565b5b6040519080825280602002602001820160405280156118955781602001602082028036833780820191505090505b50905030815f815181106118ac576118ab613876565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197491906138b7565b8160018151811061198857611987613876565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f3073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611a1f9291906138e2565b602060405180830381865afa158015611a3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5e9190612fea565b905082811015611a9f57611a9e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda100000061128b565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739845f8530426040518663ffffffff1660e01b8152600401611b01959493929190613909565b5f604051808303815f875af1925050508015611b3f57506040513d5f823e3d601f19601f82011682018060405250810190611b3c9190613a74565b60015b611b565784600b8190555083600c8190555061229b565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be691906138b7565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c1e9190612c23565b602060405180830381865afa158015611c39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5d9190612fea565b90505f811115612299575f848783611c7591906136dd565b611c7f919061374b565b90505f8183611c8e919061377b565b90505f8211156120ad575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d2791906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611d829291906138e2565b602060405180830381865afa158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc19190612fea565b905082811015611f165760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5991906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ed4929190613282565b6020604051808303815f875af1158015611ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1491906132d3565b505b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe291906138b7565b60028d611fef919061374b565b875f8030426040518963ffffffff1660e01b8152600401612017989796959493929190613abb565b6060604051808303815f875af192505050801561205257506040513d601f19601f8201168201806040525081019061204f919061313b565b60015b6120625788600b819055506120ab565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60028a612093919061374b565b846040516120a29291906131f3565b60405180910390a15b505b5f811180156120c057505f600a80549050115b15612296575f600a80549050826120d7919061374b565b90505f811115612294575f5b600a80549050811080156120f75750606481105b156122545760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218a91906138b7565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a83815481106121b9576121b8613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016121ff929190613282565b6020604051808303815f875af192505050801561223a57506040513d601f19601f8201168201806040525081019061223791906132d3565b60015b1561224157505b808061224c90613b37565b9150506120e3565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a8054905060405161228b9291906131f3565b60405180910390a15b505b50505b505b5050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90613bee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613c7c565b60405180910390fd5b61244c83838361280b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690613d0a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125b89190612a7a565b60405180910390a36125cb84848461281b565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561265a57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612808575f61266982610d95565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e8000082101580156126ce575080155b1561278d57600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612805565b678ac7230489e80000821080156127a15750805b15612804575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506128038361282b565b5b5b50505b50565b6128168383836129ae565b505050565b6128268383836129b3565b505050565b5f5b600a805490508110156129aa578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061286557612864613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361299757600a6001600a805490506128bc919061377b565b815481106128cd576128cc613876565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061290957612908613876565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a8054806129605761295f613d28565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556129aa565b80806129a290613b37565b91505061282d565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129ef5780820151818401526020810190506129d4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a14826129b8565b612a1e81856129c2565b9350612a2e8185602086016129d2565b612a37816129fa565b840191505092915050565b5f6020820190508181035f830152612a5a8184612a0a565b905092915050565b5f819050919050565b612a7481612a62565b82525050565b5f602082019050612a8d5f830184612a6b565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612acd82612aa4565b9050919050565b612add81612ac3565b8114612ae7575f80fd5b50565b5f81359050612af881612ad4565b92915050565b612b0781612a62565b8114612b11575f80fd5b50565b5f81359050612b2281612afe565b92915050565b5f8060408385031215612b3e57612b3d612a9c565b5b5f612b4b85828601612aea565b9250506020612b5c85828601612b14565b9150509250929050565b5f8115159050919050565b612b7a81612b66565b82525050565b5f602082019050612b935f830184612b71565b92915050565b5f805f60608486031215612bb057612baf612a9c565b5b5f612bbd86828701612aea565b9350506020612bce86828701612aea565b9250506040612bdf86828701612b14565b9150509250925092565b5f60208284031215612bfe57612bfd612a9c565b5b5f612c0b84828501612b14565b91505092915050565b612c1d81612ac3565b82525050565b5f602082019050612c365f830184612c14565b92915050565b5f60ff82169050919050565b612c5181612c3c565b82525050565b5f602082019050612c6a5f830184612c48565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ca281612ac3565b82525050565b5f612cb38383612c99565b60208301905092915050565b5f602082019050919050565b5f612cd582612c70565b612cdf8185612c7a565b9350612cea83612c8a565b805f5b83811015612d1a578151612d018882612ca8565b9750612d0c83612cbf565b925050600181019050612ced565b5085935050505092915050565b5f6020820190508181035f830152612d3f8184612ccb565b905092915050565b5f819050919050565b5f612d6a612d65612d6084612aa4565b612d47565b612aa4565b9050919050565b5f612d7b82612d50565b9050919050565b5f612d8c82612d71565b9050919050565b612d9c81612d82565b82525050565b5f602082019050612db55f830184612d93565b92915050565b5f60208284031215612dd057612dcf612a9c565b5b5f612ddd84828501612aea565b91505092915050565b5f8060408385031215612dfc57612dfb612a9c565b5b5f612e0985828601612aea565b9250506020612e1a85828601612aea565b9150509250929050565b5f612e2e82612d71565b9050919050565b612e3e81612e24565b82525050565b5f602082019050612e575f830184612e35565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612ea157607f821691505b602082108103612eb457612eb3612e5d565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612f146026836129c2565b9150612f1f82612eba565b604082019050919050565b5f6020820190508181035f830152612f4181612f08565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612fa2602f836129c2565b9150612fad82612f48565b604082019050919050565b5f6020820190508181035f830152612fcf81612f96565b9050919050565b5f81519050612fe481612afe565b92915050565b5f60208284031215612fff57612ffe612a9c565b5b5f61300c84828501612fd6565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f61306f6026836129c2565b915061307a82613015565b604082019050919050565b5f6020820190508181035f83015261309c81613063565b9050919050565b5f819050919050565b5f6130c66130c16130bc846130a3565b612d47565b612a62565b9050919050565b6130d6816130ac565b82525050565b5f60c0820190506130ef5f830189612c14565b6130fc6020830188612a6b565b61310960408301876130cd565b61311660608301866130cd565b6131236080830185612c14565b61313060a0830184612a6b565b979650505050505050565b5f805f6060848603121561315257613151612a9c565b5b5f61315f86828701612fd6565b935050602061317086828701612fd6565b925050604061318186828701612fd6565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f6131bf6017836129c2565b91506131ca8261318b565b602082019050919050565b5f6020820190508181035f8301526131ec816131b3565b9050919050565b5f6040820190506132065f830185612a6b565b6132136020830184612a6b565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f61324e601b836129c2565b91506132598261321a565b602082019050919050565b5f6020820190508181035f83015261327b81613242565b9050919050565b5f6040820190506132955f830185612c14565b6132a26020830184612a6b565b9392505050565b6132b281612b66565b81146132bc575f80fd5b50565b5f815190506132cd816132a9565b92915050565b5f602082840312156132e8576132e7612a9c565b5b5f6132f5848285016132bf565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6133326014836129c2565b915061333d826132fe565b602082019050919050565b5f6020820190508181035f83015261335f81613326565b9050919050565b7f4e6f2070656e64696e6720746f6b656e730000000000000000000000000000005f82015250565b5f61339a6011836129c2565b91506133a582613366565b602082019050919050565b5f6020820190508181035f8301526133c78161338e565b9050919050565b7f4e6f20686f6c64657273000000000000000000000000000000000000000000005f82015250565b5f613402600a836129c2565b915061340d826133ce565b602082019050919050565b5f6020820190508181035f83015261342f816133f6565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f61346a6016836129c2565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134f86026836129c2565b91506135038261349e565b604082019050919050565b5f6020820190508181035f830152613525816134ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135866024836129c2565b91506135918261352c565b604082019050919050565b5f6020820190508181035f8301526135b38161357a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6136146022836129c2565b915061361f826135ba565b604082019050919050565b5f6020820190508181035f83015261364181613608565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61367c601d836129c2565b915061368782613648565b602082019050919050565b5f6020820190508181035f8301526136a981613670565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136e782612a62565b91506136f283612a62565b925082820261370081612a62565b91508282048414831517613717576137166136b0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61375582612a62565b915061376083612a62565b9250826137705761376f61371e565b5b828204905092915050565b5f61378582612a62565b915061379083612a62565b92508282039050818111156137a8576137a76136b0565b5b92915050565b5f6137b882612a62565b91506137c383612a62565b92508282019050808211156137db576137da6136b0565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6138156020836129c2565b9150613820826137e1565b602082019050919050565b5f6020820190508181035f83015261384281613809565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506138b181612ad4565b92915050565b5f602082840312156138cc576138cb612a9c565b5b5f6138d9848285016138a3565b91505092915050565b5f6040820190506138f55f830185612c14565b6139026020830184612c14565b9392505050565b5f60a08201905061391c5f830188612a6b565b61392960208301876130cd565b818103604083015261393b8186612ccb565b905061394a6060830185612c14565b6139576080830184612a6b565b9695505050505050565b5f80fd5b61396e826129fa565b810181811067ffffffffffffffff8211171561398d5761398c613849565b5b80604052505050565b5f61399f612a93565b90506139ab8282613965565b919050565b5f67ffffffffffffffff8211156139ca576139c9613849565b5b602082029050602081019050919050565b5f80fd5b5f6139f16139ec846139b0565b613996565b90508083825260208201905060208402830185811115613a1457613a136139db565b5b835b81811015613a3d5780613a298882612fd6565b845260208401935050602081019050613a16565b5050509392505050565b5f82601f830112613a5b57613a5a613961565b5b8151613a6b8482602086016139df565b91505092915050565b5f60208284031215613a8957613a88612a9c565b5b5f82015167ffffffffffffffff811115613aa657613aa5612aa0565b5b613ab284828501613a47565b91505092915050565b5f61010082019050613acf5f83018b612c14565b613adc602083018a612c14565b613ae96040830189612a6b565b613af66060830188612a6b565b613b0360808301876130cd565b613b1060a08301866130cd565b613b1d60c0830185612c14565b613b2a60e0830184612a6b565b9998505050505050505050565b5f613b4182612a62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7357613b726136b0565b5b600182019050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613bd86025836129c2565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c666023836129c2565b9150613c7182613c0c565b604082019050919050565b5f6020820190508181035f830152613c9381613c5a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613cf46026836129c2565b9150613cff82613c9a565b604082019050919050565b5f6020820190508181035f830152613d2181613ce8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122055b0476cc135461ece77fe649a98ad95105a67c2fe2e4745e34b919e269a143e64736f6c63430008140033

Deployed Bytecode Sourcemap

7514:11448:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18363:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3807:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3234:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4005:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8292:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16149:1446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8142:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17797:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18489:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15975:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8034:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15865:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18668:254;;;;;;;;;;;;;:::i;:::-;;8184:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7703:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7654:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7890:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3039:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3467:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7760:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17603:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8245:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7815:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3657:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2086:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8082:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2940:91;2985:13;3018:5;3011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;:::o;18363:118::-;18423:7;18450:23;;18443:30;;18363:118;:::o;3807:190::-;3881:4;3898:13;3914:10;3898:26;;3935:32;3944:5;3951:7;3960:6;3935:8;:32::i;:::-;3985:4;3978:11;;;3807:190;;;;:::o;3234:99::-;3286:7;3313:12;;3306:19;;3234:99;:::o;4005:250::-;4093:4;4110:15;4128:10;4110:28;;4149:38;4165:4;4171:7;4180:6;4149:15;:38::i;:::-;4198:27;4208:4;4214:2;4218:6;4198:9;:27::i;:::-;4243:4;4236:11;;;4005:250;;;;;:::o;8292:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3142:84::-;3191:5;3216:2;3209:9;;3142:84;:::o;16149:1446::-;1812:13;:11;:13::i;:::-;16257:1:::1;16245:9;:13;16237:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16334:1;16320:11;:15;16312:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16515:11;16480:4;16465:31;;;16505:4;16465:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;16443:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;16671:63;16688:4;16703:16;;;;;;;;;;;16722:11;16671:8;:63::i;:::-;16797:16;;;;;;;;;;;:32;;;16837:9;16870:4;16890:11;16916:1;16972::::0;17026:10:::1;17094:15;16797:346;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16793:603;;17283:53;17300:4;17315:16;;;;;;;;;;;17334:1;17283:8;:53::i;:::-;17351:33;;;;;;;;;;:::i;:::-;;;;;;;;16793:603;;;;17164:38;17179:11;17192:9;17164:38;;;;;;;:::i;:::-;;;;;;;;17442:20;17465:21;17442:44;;17516:1;17501:12;:16;17497:91;;;17542:10;17534:28;;:42;17563:12;17534:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17497:91;16226:1369;16149:1446:::0;:::o;8142:35::-;;;:::o;17797:208::-;1812:13;:11;:13::i;:::-;17908:4:::1;17890:23;;:6;:23;;::::0;17882:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17963:6;17956:23;;;17980:7;:5;:7::i;:::-;17989;17956:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17797:208:::0;;:::o;18489:114::-;18547:7;18574:21;;18567:28;;18489:114;:::o;15975:96::-;16020:16;16056:7;16049:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15975:96;:::o;8034:41::-;;;;;;;;;;;;;:::o;3341:118::-;3406:7;3433:9;:18;3443:7;3433:18;;;;;;;;;;;;;;;;3426:25;;3341:118;;;:::o;15865:98::-;15914:7;15941;:14;;;;15934:21;;15865:98;:::o;18046:266::-;1812:13;:11;:13::i;:::-;18195:6:::1;18160:4;18145:31;;;18185:4;18145:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;18123:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;18260:44;18278:4;18285:10;18297:6;18260:9;:44::i;:::-;18046:266:::0;:::o;18668:254::-;1812:13;:11;:13::i;:::-;18770:1:::1;18744:23;;:27;:56;;;;18799:1;18775:21;;:25;18744:56;18736:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;18858:1;18841:7;:14;;;;:18;18833:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18885:29;:27;:29::i;:::-;18668:254::o:0;8184:28::-;;;;;;;;;;;;;:::o;7703:42::-;7743:2;7703:42;:::o;7654:36::-;7689:1;7654:36;:::o;1853:87::-;1899:7;1926:6;;;;;;;;;;;1919:13;;1853:87;:::o;7590:57::-;7629:18;7590:57;:::o;7890:61::-;7939:12;7890:61;:::o;3039:95::-;3086:13;3119:7;3112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:95;:::o;3467:182::-;3537:4;3554:13;3570:10;3554:26;;3591:28;3601:5;3608:2;3612:6;3591:9;:28::i;:::-;3637:4;3630:11;;;3467:182;;;;:::o;7760:40::-;7798:2;7760:40;:::o;17603:186::-;1812:13;:11;:13::i;:::-;17696:1:::1;17677:21;;:7;:21;;::::0;17669:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17773:7;17736:16;;:45;;;;;;;;;;;;;;;;;;17603:186:::0;:::o;8245:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;7815:55::-;7859:11;7815:55;:::o;3657:142::-;3737:7;3764:11;:18;3776:5;3764:18;;;;;;;;;;;;;;;:27;3783:7;3764:27;;;;;;;;;;;;;;;;3757:34;;3657:142;;;;:::o;2086:201::-;1812:13;:11;:13::i;:::-;2195:1:::1;2175:22;;:8;:22;;::::0;2167:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2251:28;2270:8;2251:18;:28::i;:::-;2086:201:::0;:::o;8082:53::-;;;:::o;5341:344::-;5460:1;5443:19;;:5;:19;;;5435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5541:1;5522:21;;:7;:21;;;5514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5623:6;5593:11;:18;5605:5;5593:18;;;;;;;;;;;;;;;:27;5612:7;5593:27;;;;;;;;;;;;;;;:36;;;;5661:7;5645:32;;5654:5;5645:32;;;5670:6;5645:32;;;;;;:::i;:::-;;;;;;;;5341:344;;;:::o;5693:419::-;5794:24;5821:25;5831:5;5838:7;5821:9;:25::i;:::-;5794:52;;5881:17;5861:16;:37;5857:248;;5943:6;5923:16;:26;;5915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6027:51;6036:5;6043:7;6071:6;6052:16;:25;6027:8;:51::i;:::-;5857:248;5783:329;5693:419;;;:::o;9618:1722::-;9762:7;:5;:7::i;:::-;9754:15;;:4;:15;;;:32;;;;9779:7;:5;:7::i;:::-;9773:13;;:2;:13;;;9754:32;:57;;;;9806:4;9790:21;;:4;:21;;;9754:57;:80;;;;9829:4;9815:19;;:2;:19;;;9754:80;9750:1583;;;9851:33;9867:4;9873:2;9877:6;9851:15;:33::i;:::-;9899:19;9913:4;9899:13;:19::i;:::-;9933:17;9947:2;9933:13;:17::i;:::-;9750:1583;;;9983:16;10008:13;;;;;;;;;;;10002:19;;:2;:19;;;:44;;;;10033:13;;;;;;;;;;;10025:21;;:4;:21;;;10002:44;9983:63;;10079:11;10075:1167;;;10111:16;10152:3;7689:1;10131:6;:17;;;;:::i;:::-;10130:25;;;;:::i;:::-;10111:44;;10181:20;10231:4;7743:2;10205:6;:22;;;;:::i;:::-;10204:31;;;;:::i;:::-;10181:54;;10273:18;10319:4;7798:2;10295:6;:20;;;;:::i;:::-;10294:29;;;;:::i;:::-;10273:50;;10364:22;10398:8;10389:6;:17;;;;:::i;:::-;10364:42;;10492:46;10508:4;10522;10529:8;10492:15;:46::i;:::-;10607:41;10623:4;10629:2;10633:14;10607:15;:41::i;:::-;10760:12;10733:23;;:39;;;;;;;:::i;:::-;;;;;;;;10816:10;10791:21;;:35;;;;;;;:::i;:::-;;;;;;;;7939:12;10934:23;;:49;;:100;;;;7939:12;10987:21;;:47;;10934:100;10933:146;;;;;11078:1;11061:7;:14;;;;:18;10933:146;10929:224;;;11104:29;:27;:29::i;:::-;10929:224;10092:1076;;;;10075:1167;;;11193:33;11209:4;11215:2;11219:6;11193:15;:33::i;:::-;10075:1167;11270:19;11284:4;11270:13;:19::i;:::-;11304:17;11318:2;11304:13;:17::i;:::-;9968:1365;9750:1583;9618:1722;;;:::o;1948:130::-;2023:10;2012:21;;:7;:5;:7::i;:::-;:21;;;2004:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:130::o;12247:3587::-;12305:26;12334:23;;12305:52;;12368:24;12395:21;;12368:48;;12453:1;12427:23;:27;;;;12489:1;12465:21;:25;;;;12503:19;12546:16;12525:18;:37;;;;:::i;:::-;12503:59;;12628:21;12666:1;12652:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12628:40;;12697:4;12679;12684:1;12679:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12723:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12713:4;12718:1;12713:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;12819:24;12861:4;12846:31;;;12886:4;12901:16;;;;;;;;;;;12846:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12819:100;;12953:11;12934:16;:30;12930:127;;;12981:64;12998:4;13013:16;;;;;;;;;;;7629:18;12981:8;:64::i;:::-;12930:127;13081:16;;;;;;;;;;;:41;;;13137:11;13163:1;13204:4;13231;13251:15;13081:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13077:2750;;15742:18;15716:23;:44;;;;15799:16;15775:21;:40;;;;13077:2750;;;;13293:19;13322:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13315:41;;;13365:4;13315:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13293:78;;13404:1;13390:11;:15;13386:2233;;;13468:24;13532:11;13510:18;13496:11;:32;;;;:::i;:::-;13495:48;;;;:::i;:::-;13468:75;;13562:22;13601:16;13587:11;:30;;;;:::i;:::-;13562:55;;13705:1;13686:16;:20;13682:1130;;;13775:21;13806:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13799:41;;;13849:4;13864:16;;;;;;;;;;;13799:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13775:107;;13925:16;13909:13;:32;13905:174;;;13977:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13970:39;;;14018:16;;;;;;;;;;;14037:17;13970:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13905:174;14127:16;;;;;;;;;;;:29;;;14191:4;14223:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14294:1;14273:18;:22;;;;:::i;:::-;14322:16;14365:1;14393;14429:4;14461:15;14127:372;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14123:670;;14751:18;14725:23;:44;;;;14123:670;;;;;;14532:56;14568:1;14547:18;:22;;;;:::i;:::-;14571:16;14532:56;;;;;;;:::i;:::-;;;;;;;;14123:670;13708:1104;13682:1130;14894:1;14877:14;:18;:40;;;;;14916:1;14899:7;:14;;;;:18;14877:40;14873:731;;;14942:23;14985:7;:14;;;;14968;:31;;;;:::i;:::-;14942:57;;15066:1;15048:15;:19;15044:541;;;15101:9;15096:358;15120:7;:14;;;;15116:1;:18;:29;;;;;15142:3;15138:1;:7;15116:29;15096:358;;;15194:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15187:40;;;15228:7;15236:1;15228:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15240:15;15187:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15183:244;15387:8;15183:244;;15096:358;15147:3;;;;;:::i;:::-;;;;15096:358;;;;15511:50;15530:14;15546:7;:14;;;;15511:50;;;;;;;:::i;:::-;;;;;;;;15044:541;14919:685;14873:731;13407:2212;;13386:2233;13278:2352;13077:2750;12294:3540;;;;;12247:3587::o;2295:191::-;2369:16;2388:6;;;;;;;;;;;2369:25;;2414:8;2405:6;;:17;;;;;;;;;;;;;;;;;;2469:8;2438:40;;2459:8;2438:40;;;;;;;;;;;;2358:128;2295:191;:::o;4263:633::-;4376:1;4360:18;;:4;:18;;;4352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4453:1;4439:16;;:2;:16;;;4431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4506:38;4527:4;4533:2;4537:6;4506:20;:38::i;:::-;4555:19;4577:9;:15;4587:4;4577:15;;;;;;;;;;;;;;;;4555:37;;4626:6;4611:11;:21;;4603:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4743:6;4729:11;:20;4711:9;:15;4721:4;4711:15;;;;;;;;;;;;;;;:38;;;;4781:6;4764:9;:13;4774:2;4764:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4829:2;4814:26;;4823:4;4814:26;;;4833:6;4814:26;;;;;;:::i;:::-;;;;;;;;4851:37;4871:4;4877:2;4881:6;4851:19;:37::i;:::-;4341:555;4263:633;;;:::o;11348:588::-;11422:13;;;;;;;;;;;11411:24;;:7;:24;;;;:52;;;;;11458:4;11439:24;;:7;:24;;;;11411:52;11407:522;;;11480:15;11498:18;11508:7;11498:9;:18::i;:::-;11480:36;;11531:22;11556:8;:17;11565:7;11556:17;;;;;;;;;;;;;;;;;;;;;;;;;11531:42;;7859:11;11606:7;:28;;:50;;;;;11639:17;11638:18;11606:50;11602:316;;;11697:4;11677:8;:17;11686:7;11677:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11720:7;11733;11720:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11602:316;;;7859:11;11767:7;:27;:48;;;;;11798:17;11767:48;11763:155;;;11856:5;11836:8;:17;11845:7;11836:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;11880:22;11894:7;11880:13;:22::i;:::-;11763:155;11602:316;11465:464;;11407:522;11348:588;:::o;9214:195::-;9357:44;9384:4;9390:2;9394:6;9357:26;:44::i;:::-;9214:195;;;:::o;9417:193::-;9559:43;9585:4;9591:2;9595:6;9559:25;:43::i;:::-;9417:193;;;:::o;11944:295::-;12008:9;12003:229;12027:7;:14;;;;12023:1;:18;12003:229;;;12081:7;12067:21;;:7;12075:1;12067:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;12063:158;;12122:7;12147:1;12130:7;:14;;;;:18;;;;:::i;:::-;12122:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12109:7;12117:1;12109:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;12168:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;12200:5;;12063:158;12043:3;;;;;:::i;:::-;;;;12003:229;;;;11944:295;:::o;6120:91::-;;;;:::o;6219:90::-;;;;:::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:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:114::-;5607:6;5641:5;5635:12;5625:22;;5540:114;;;:::o;5660:184::-;5759:11;5793:6;5788:3;5781:19;5833:4;5828:3;5824:14;5809:29;;5660:184;;;;:::o;5850:132::-;5917:4;5940:3;5932:11;;5970:4;5965:3;5961:14;5953:22;;5850:132;;;:::o;5988:108::-;6065:24;6083:5;6065:24;:::i;:::-;6060:3;6053:37;5988:108;;:::o;6102:179::-;6171:10;6192:46;6234:3;6226:6;6192:46;:::i;:::-;6270:4;6265:3;6261:14;6247:28;;6102:179;;;;:::o;6287:113::-;6357:4;6389;6384:3;6380:14;6372:22;;6287:113;;;:::o;6436:732::-;6555:3;6584:54;6632:5;6584:54;:::i;:::-;6654:86;6733:6;6728:3;6654:86;:::i;:::-;6647:93;;6764:56;6814:5;6764:56;:::i;:::-;6843:7;6874:1;6859:284;6884:6;6881:1;6878:13;6859:284;;;6960:6;6954:13;6987:63;7046:3;7031:13;6987:63;:::i;:::-;6980:70;;7073:60;7126:6;7073:60;:::i;:::-;7063:70;;6919:224;6906:1;6903;6899:9;6894:14;;6859:284;;;6863:14;7159:3;7152:10;;6560:608;;;6436:732;;;;:::o;7174:373::-;7317:4;7355:2;7344:9;7340:18;7332:26;;7404:9;7398:4;7394:20;7390:1;7379:9;7375:17;7368:47;7432:108;7535:4;7526:6;7432:108;:::i;:::-;7424:116;;7174:373;;;;:::o;7553:60::-;7581:3;7602:5;7595:12;;7553:60;;;:::o;7619:142::-;7669:9;7702:53;7720:34;7729:24;7747:5;7729:24;:::i;:::-;7720:34;:::i;:::-;7702:53;:::i;:::-;7689:66;;7619:142;;;:::o;7767:126::-;7817:9;7850:37;7881:5;7850:37;:::i;:::-;7837:50;;7767:126;;;:::o;7899:151::-;7974:9;8007:37;8038:5;8007:37;:::i;:::-;7994:50;;7899:151;;;:::o;8056:181::-;8168:62;8224:5;8168:62;:::i;:::-;8163:3;8156:75;8056:181;;:::o;8243:272::-;8361:4;8399:2;8388:9;8384:18;8376:26;;8412:96;8505:1;8494:9;8490:17;8481:6;8412:96;:::i;:::-;8243:272;;;;:::o;8521:329::-;8580:6;8629:2;8617:9;8608:7;8604:23;8600:32;8597:119;;;8635:79;;:::i;:::-;8597:119;8755:1;8780:53;8825:7;8816:6;8805:9;8801:22;8780:53;:::i;:::-;8770:63;;8726:117;8521:329;;;;:::o;8856:474::-;8924:6;8932;8981:2;8969:9;8960:7;8956:23;8952:32;8949:119;;;8987:79;;:::i;:::-;8949:119;9107:1;9132:53;9177:7;9168:6;9157:9;9153:22;9132:53;:::i;:::-;9122:63;;9078:117;9234:2;9260:53;9305:7;9296:6;9285:9;9281:22;9260:53;:::i;:::-;9250:63;;9205:118;8856:474;;;;;:::o;9336:152::-;9412:9;9445:37;9476:5;9445:37;:::i;:::-;9432:50;;9336:152;;;:::o;9494:183::-;9607:63;9664:5;9607:63;:::i;:::-;9602:3;9595:76;9494:183;;:::o;9683:274::-;9802:4;9840:2;9829:9;9825:18;9817:26;;9853:97;9947:1;9936:9;9932:17;9923:6;9853:97;:::i;:::-;9683:274;;;;:::o;9963:180::-;10011:77;10008:1;10001:88;10108:4;10105:1;10098:15;10132:4;10129:1;10122:15;10149:320;10193:6;10230:1;10224:4;10220:12;10210:22;;10277:1;10271:4;10267:12;10298:18;10288:81;;10354:4;10346:6;10342:17;10332:27;;10288:81;10416:2;10408:6;10405:14;10385:18;10382:38;10379:84;;10435:18;;:::i;:::-;10379:84;10200:269;10149:320;;;:::o;10475:225::-;10615:34;10611:1;10603:6;10599:14;10592:58;10684:8;10679:2;10671:6;10667:15;10660:33;10475:225;:::o;10706:366::-;10848:3;10869:67;10933:2;10928:3;10869:67;:::i;:::-;10862:74;;10945:93;11034:3;10945:93;:::i;:::-;11063:2;11058:3;11054:12;11047:19;;10706:366;;;:::o;11078:419::-;11244:4;11282:2;11271:9;11267:18;11259:26;;11331:9;11325:4;11321:20;11317:1;11306:9;11302:17;11295:47;11359:131;11485:4;11359:131;:::i;:::-;11351:139;;11078:419;;;:::o;11503:234::-;11643:34;11639:1;11631:6;11627:14;11620:58;11712:17;11707:2;11699:6;11695:15;11688:42;11503:234;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:419::-;12281:4;12319:2;12308:9;12304:18;12296:26;;12368:9;12362:4;12358:20;12354:1;12343:9;12339:17;12332:47;12396:131;12522:4;12396:131;:::i;:::-;12388:139;;12115:419;;;:::o;12540:143::-;12597:5;12628:6;12622:13;12613:22;;12644:33;12671:5;12644:33;:::i;:::-;12540:143;;;;:::o;12689:351::-;12759:6;12808:2;12796:9;12787:7;12783:23;12779:32;12776:119;;;12814:79;;:::i;:::-;12776:119;12934:1;12959:64;13015:7;13006:6;12995:9;12991:22;12959:64;:::i;:::-;12949:74;;12905:128;12689:351;;;;:::o;13046:225::-;13186:34;13182:1;13174:6;13170:14;13163:58;13255:8;13250:2;13242:6;13238:15;13231:33;13046:225;:::o;13277:366::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:419::-;13815:4;13853:2;13842:9;13838:18;13830:26;;13902:9;13896:4;13892:20;13888:1;13877:9;13873:17;13866:47;13930:131;14056:4;13930:131;:::i;:::-;13922:139;;13649:419;;;:::o;14074:85::-;14119:7;14148:5;14137:16;;14074:85;;;:::o;14165:158::-;14223:9;14256:61;14274:42;14283:32;14309:5;14283:32;:::i;:::-;14274:42;:::i;:::-;14256:61;:::i;:::-;14243:74;;14165:158;;;:::o;14329:147::-;14424:45;14463:5;14424:45;:::i;:::-;14419:3;14412:58;14329:147;;:::o;14482:807::-;14731:4;14769:3;14758:9;14754:19;14746:27;;14783:71;14851:1;14840:9;14836:17;14827:6;14783:71;:::i;:::-;14864:72;14932:2;14921:9;14917:18;14908:6;14864:72;:::i;:::-;14946:80;15022:2;15011:9;15007:18;14998:6;14946:80;:::i;:::-;15036;15112:2;15101:9;15097:18;15088:6;15036:80;:::i;:::-;15126:73;15194:3;15183:9;15179:19;15170:6;15126:73;:::i;:::-;15209;15277:3;15266:9;15262:19;15253:6;15209:73;:::i;:::-;14482:807;;;;;;;;;:::o;15295:663::-;15383:6;15391;15399;15448:2;15436:9;15427:7;15423:23;15419:32;15416:119;;;15454:79;;:::i;:::-;15416:119;15574:1;15599:64;15655:7;15646:6;15635:9;15631:22;15599:64;:::i;:::-;15589:74;;15545:128;15712:2;15738:64;15794:7;15785:6;15774:9;15770:22;15738:64;:::i;:::-;15728:74;;15683:129;15851:2;15877:64;15933:7;15924:6;15913:9;15909:22;15877:64;:::i;:::-;15867:74;;15822:129;15295:663;;;;;:::o;15964:173::-;16104:25;16100:1;16092:6;16088:14;16081:49;15964:173;:::o;16143:366::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:419::-;16681:4;16719:2;16708:9;16704:18;16696:26;;16768:9;16762:4;16758:20;16754:1;16743:9;16739:17;16732:47;16796:131;16922:4;16796:131;:::i;:::-;16788:139;;16515:419;;;:::o;16940:332::-;17061:4;17099:2;17088:9;17084:18;17076:26;;17112:71;17180:1;17169:9;17165:17;17156:6;17112:71;:::i;:::-;17193:72;17261:2;17250:9;17246:18;17237:6;17193:72;:::i;:::-;16940:332;;;;;:::o;17278:177::-;17418:29;17414:1;17406:6;17402:14;17395:53;17278:177;:::o;17461:366::-;17603:3;17624:67;17688:2;17683:3;17624:67;:::i;:::-;17617:74;;17700:93;17789:3;17700:93;:::i;:::-;17818:2;17813:3;17809:12;17802:19;;17461:366;;;:::o;17833:419::-;17999:4;18037:2;18026:9;18022:18;18014:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18114:131;18240:4;18114:131;:::i;:::-;18106:139;;17833:419;;;:::o;18258:332::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18430:71;18498:1;18487:9;18483:17;18474:6;18430:71;:::i;:::-;18511:72;18579:2;18568:9;18564:18;18555:6;18511:72;:::i;:::-;18258:332;;;;;:::o;18596:116::-;18666:21;18681:5;18666:21;:::i;:::-;18659:5;18656:32;18646:60;;18702:1;18699;18692:12;18646:60;18596:116;:::o;18718:137::-;18772:5;18803:6;18797:13;18788:22;;18819:30;18843:5;18819:30;:::i;:::-;18718:137;;;;:::o;18861:345::-;18928:6;18977:2;18965:9;18956:7;18952:23;18948:32;18945:119;;;18983:79;;:::i;:::-;18945:119;19103:1;19128:61;19181:7;19172:6;19161:9;19157:22;19128:61;:::i;:::-;19118:71;;19074:125;18861:345;;;;:::o;19212:170::-;19352:22;19348:1;19340:6;19336:14;19329:46;19212:170;:::o;19388:366::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:419::-;19926:4;19964:2;19953:9;19949:18;19941:26;;20013:9;20007:4;20003:20;19999:1;19988:9;19984:17;19977:47;20041:131;20167:4;20041:131;:::i;:::-;20033:139;;19760:419;;;:::o;20185:167::-;20325:19;20321:1;20313:6;20309:14;20302:43;20185:167;:::o;20358:366::-;20500:3;20521:67;20585:2;20580:3;20521:67;:::i;:::-;20514:74;;20597:93;20686:3;20597:93;:::i;:::-;20715:2;20710:3;20706:12;20699:19;;20358:366;;;:::o;20730:419::-;20896:4;20934:2;20923:9;20919:18;20911:26;;20983:9;20977:4;20973:20;20969:1;20958:9;20954:17;20947:47;21011:131;21137:4;21011:131;:::i;:::-;21003:139;;20730:419;;;:::o;21155:160::-;21295:12;21291:1;21283:6;21279:14;21272:36;21155:160;:::o;21321:366::-;21463:3;21484:67;21548:2;21543:3;21484:67;:::i;:::-;21477:74;;21560:93;21649:3;21560:93;:::i;:::-;21678:2;21673:3;21669:12;21662:19;;21321:366;;;:::o;21693:419::-;21859:4;21897:2;21886:9;21882:18;21874:26;;21946:9;21940:4;21936:20;21932:1;21921:9;21917:17;21910:47;21974:131;22100:4;21974:131;:::i;:::-;21966:139;;21693:419;;;:::o;22118:172::-;22258:24;22254:1;22246:6;22242:14;22235:48;22118:172;:::o;22296:366::-;22438:3;22459:67;22523:2;22518:3;22459:67;:::i;:::-;22452:74;;22535:93;22624:3;22535:93;:::i;:::-;22653:2;22648:3;22644:12;22637:19;;22296:366;;;:::o;22668:419::-;22834:4;22872:2;22861:9;22857:18;22849:26;;22921:9;22915:4;22911:20;22907:1;22896:9;22892:17;22885:47;22949:131;23075:4;22949:131;:::i;:::-;22941:139;;22668:419;;;:::o;23093:225::-;23233:34;23229:1;23221:6;23217:14;23210:58;23302:8;23297:2;23289:6;23285:15;23278:33;23093:225;:::o;23324:366::-;23466:3;23487:67;23551:2;23546:3;23487:67;:::i;:::-;23480:74;;23563:93;23652:3;23563:93;:::i;:::-;23681:2;23676:3;23672:12;23665:19;;23324:366;;;:::o;23696:419::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:131;24103:4;23977:131;:::i;:::-;23969:139;;23696:419;;;:::o;24121:223::-;24261:34;24257:1;24249:6;24245:14;24238:58;24330:6;24325:2;24317:6;24313:15;24306:31;24121:223;:::o;24350:366::-;24492:3;24513:67;24577:2;24572:3;24513:67;:::i;:::-;24506:74;;24589:93;24678:3;24589:93;:::i;:::-;24707:2;24702:3;24698:12;24691:19;;24350:366;;;:::o;24722:419::-;24888:4;24926:2;24915:9;24911:18;24903:26;;24975:9;24969:4;24965:20;24961:1;24950:9;24946:17;24939:47;25003:131;25129:4;25003:131;:::i;:::-;24995:139;;24722:419;;;:::o;25147:221::-;25287:34;25283:1;25275:6;25271:14;25264:58;25356:4;25351:2;25343:6;25339:15;25332:29;25147:221;:::o;25374:366::-;25516:3;25537:67;25601:2;25596:3;25537:67;:::i;:::-;25530:74;;25613:93;25702:3;25613:93;:::i;:::-;25731:2;25726:3;25722:12;25715:19;;25374:366;;;:::o;25746:419::-;25912:4;25950:2;25939:9;25935:18;25927:26;;25999:9;25993:4;25989:20;25985:1;25974:9;25970:17;25963:47;26027:131;26153:4;26027:131;:::i;:::-;26019:139;;25746:419;;;:::o;26171:179::-;26311:31;26307:1;26299:6;26295:14;26288:55;26171:179;:::o;26356:366::-;26498:3;26519:67;26583:2;26578:3;26519:67;:::i;:::-;26512:74;;26595:93;26684:3;26595:93;:::i;:::-;26713:2;26708:3;26704:12;26697:19;;26356:366;;;:::o;26728:419::-;26894:4;26932:2;26921:9;26917:18;26909:26;;26981:9;26975:4;26971:20;26967:1;26956:9;26952:17;26945:47;27009:131;27135:4;27009:131;:::i;:::-;27001:139;;26728:419;;;:::o;27153:180::-;27201:77;27198:1;27191:88;27298:4;27295:1;27288:15;27322:4;27319:1;27312:15;27339:410;27379:7;27402:20;27420:1;27402:20;:::i;:::-;27397:25;;27436:20;27454:1;27436:20;:::i;:::-;27431:25;;27491:1;27488;27484:9;27513:30;27531:11;27513:30;:::i;:::-;27502:41;;27692:1;27683:7;27679:15;27676:1;27673:22;27653:1;27646:9;27626:83;27603:139;;27722:18;;:::i;:::-;27603:139;27387:362;27339:410;;;;:::o;27755:180::-;27803:77;27800:1;27793:88;27900:4;27897:1;27890:15;27924:4;27921:1;27914:15;27941:185;27981:1;27998:20;28016:1;27998:20;:::i;:::-;27993:25;;28032:20;28050:1;28032:20;:::i;:::-;28027:25;;28071:1;28061:35;;28076:18;;:::i;:::-;28061:35;28118:1;28115;28111:9;28106:14;;27941:185;;;;:::o;28132:194::-;28172:4;28192:20;28210:1;28192:20;:::i;:::-;28187:25;;28226:20;28244:1;28226:20;:::i;:::-;28221:25;;28270:1;28267;28263:9;28255:17;;28294:1;28288:4;28285:11;28282:37;;;28299:18;;:::i;:::-;28282:37;28132:194;;;;:::o;28332:191::-;28372:3;28391:20;28409:1;28391:20;:::i;:::-;28386:25;;28425:20;28443:1;28425:20;:::i;:::-;28420:25;;28468:1;28465;28461:9;28454:16;;28489:3;28486:1;28483:10;28480:36;;;28496:18;;:::i;:::-;28480:36;28332:191;;;;:::o;28529:182::-;28669:34;28665:1;28657:6;28653:14;28646:58;28529:182;:::o;28717:366::-;28859:3;28880:67;28944:2;28939:3;28880:67;:::i;:::-;28873:74;;28956:93;29045:3;28956:93;:::i;:::-;29074:2;29069:3;29065:12;29058:19;;28717:366;;;:::o;29089:419::-;29255:4;29293:2;29282:9;29278:18;29270:26;;29342:9;29336:4;29332:20;29328:1;29317:9;29313:17;29306:47;29370:131;29496:4;29370:131;:::i;:::-;29362:139;;29089:419;;;:::o;29514:180::-;29562:77;29559:1;29552:88;29659:4;29656:1;29649:15;29683:4;29680:1;29673:15;29700:180;29748:77;29745:1;29738:88;29845:4;29842:1;29835:15;29869:4;29866:1;29859:15;29886:143;29943:5;29974:6;29968:13;29959:22;;29990:33;30017:5;29990:33;:::i;:::-;29886:143;;;;:::o;30035:351::-;30105:6;30154:2;30142:9;30133:7;30129:23;30125:32;30122:119;;;30160:79;;:::i;:::-;30122:119;30280:1;30305:64;30361:7;30352:6;30341:9;30337:22;30305:64;:::i;:::-;30295:74;;30251:128;30035:351;;;;:::o;30392:332::-;30513:4;30551:2;30540:9;30536:18;30528:26;;30564:71;30632:1;30621:9;30617:17;30608:6;30564:71;:::i;:::-;30645:72;30713:2;30702:9;30698:18;30689:6;30645:72;:::i;:::-;30392:332;;;;;:::o;30730:831::-;30993:4;31031:3;31020:9;31016:19;31008:27;;31045:71;31113:1;31102:9;31098:17;31089:6;31045:71;:::i;:::-;31126:80;31202:2;31191:9;31187:18;31178:6;31126:80;:::i;:::-;31253:9;31247:4;31243:20;31238:2;31227:9;31223:18;31216:48;31281:108;31384:4;31375:6;31281:108;:::i;:::-;31273:116;;31399:72;31467:2;31456:9;31452:18;31443:6;31399:72;:::i;:::-;31481:73;31549:3;31538:9;31534:19;31525:6;31481:73;:::i;:::-;30730:831;;;;;;;;:::o;31567:117::-;31676:1;31673;31666:12;31690:281;31773:27;31795:4;31773:27;:::i;:::-;31765:6;31761:40;31903:6;31891:10;31888:22;31867:18;31855:10;31852:34;31849:62;31846:88;;;31914:18;;:::i;:::-;31846:88;31954:10;31950:2;31943:22;31733:238;31690:281;;:::o;31977:129::-;32011:6;32038:20;;:::i;:::-;32028:30;;32067:33;32095:4;32087:6;32067:33;:::i;:::-;31977:129;;;:::o;32112:311::-;32189:4;32279:18;32271:6;32268:30;32265:56;;;32301:18;;:::i;:::-;32265:56;32351:4;32343:6;32339:17;32331:25;;32411:4;32405;32401:15;32393:23;;32112:311;;;:::o;32429:117::-;32538:1;32535;32528:12;32569:732;32676:5;32701:81;32717:64;32774:6;32717:64;:::i;:::-;32701:81;:::i;:::-;32692:90;;32802:5;32831:6;32824:5;32817:21;32865:4;32858:5;32854:16;32847:23;;32918:4;32910:6;32906:17;32898:6;32894:30;32947:3;32939:6;32936:15;32933:122;;;32966:79;;:::i;:::-;32933:122;33081:6;33064:231;33098:6;33093:3;33090:15;33064:231;;;33173:3;33202:48;33246:3;33234:10;33202:48;:::i;:::-;33197:3;33190:61;33280:4;33275:3;33271:14;33264:21;;33140:155;33124:4;33119:3;33115:14;33108:21;;33064:231;;;33068:21;32682:619;;32569:732;;;;;:::o;33324:385::-;33406:5;33455:3;33448:4;33440:6;33436:17;33432:27;33422:122;;33463:79;;:::i;:::-;33422:122;33573:6;33567:13;33598:105;33699:3;33691:6;33684:4;33676:6;33672:17;33598:105;:::i;:::-;33589:114;;33412:297;33324:385;;;;:::o;33715:554::-;33810:6;33859:2;33847:9;33838:7;33834:23;33830:32;33827:119;;;33865:79;;:::i;:::-;33827:119;34006:1;33995:9;33991:17;33985:24;34036:18;34028:6;34025:30;34022:117;;;34058:79;;:::i;:::-;34022:117;34163:89;34244:7;34235:6;34224:9;34220:22;34163:89;:::i;:::-;34153:99;;33956:306;33715:554;;;;:::o;34275:1029::-;34580:4;34618:3;34607:9;34603:19;34595:27;;34632:71;34700:1;34689:9;34685:17;34676:6;34632:71;:::i;:::-;34713:72;34781:2;34770:9;34766:18;34757:6;34713:72;:::i;:::-;34795;34863:2;34852:9;34848:18;34839:6;34795:72;:::i;:::-;34877;34945:2;34934:9;34930:18;34921:6;34877:72;:::i;:::-;34959:81;35035:3;35024:9;35020:19;35011:6;34959:81;:::i;:::-;35050;35126:3;35115:9;35111:19;35102:6;35050:81;:::i;:::-;35141:73;35209:3;35198:9;35194:19;35185:6;35141:73;:::i;:::-;35224;35292:3;35281:9;35277:19;35268:6;35224:73;:::i;:::-;34275:1029;;;;;;;;;;;:::o;35310:233::-;35349:3;35372:24;35390:5;35372:24;:::i;:::-;35363:33;;35418:66;35411:5;35408:77;35405:103;;35488:18;;:::i;:::-;35405:103;35535:1;35528:5;35524:13;35517:20;;35310:233;;;:::o;35549:224::-;35689:34;35685:1;35677:6;35673:14;35666:58;35758:7;35753:2;35745:6;35741:15;35734:32;35549:224;:::o;35779:366::-;35921:3;35942:67;36006:2;36001:3;35942:67;:::i;:::-;35935:74;;36018:93;36107:3;36018:93;:::i;:::-;36136:2;36131:3;36127:12;36120:19;;35779:366;;;:::o;36151:419::-;36317:4;36355:2;36344:9;36340:18;36332:26;;36404:9;36398:4;36394:20;36390:1;36379:9;36375:17;36368:47;36432:131;36558:4;36432:131;:::i;:::-;36424:139;;36151:419;;;:::o;36576:222::-;36716:34;36712:1;36704:6;36700:14;36693:58;36785:5;36780:2;36772:6;36768:15;36761:30;36576:222;:::o;36804:366::-;36946:3;36967:67;37031:2;37026:3;36967:67;:::i;:::-;36960:74;;37043:93;37132:3;37043:93;:::i;:::-;37161:2;37156:3;37152:12;37145:19;;36804:366;;;:::o;37176:419::-;37342:4;37380:2;37369:9;37365:18;37357:26;;37429:9;37423:4;37419:20;37415:1;37404:9;37400:17;37393:47;37457:131;37583:4;37457:131;:::i;:::-;37449:139;;37176:419;;;:::o;37601:225::-;37741:34;37737:1;37729:6;37725:14;37718:58;37810:8;37805:2;37797:6;37793:15;37786:33;37601:225;:::o;37832:366::-;37974:3;37995:67;38059:2;38054:3;37995:67;:::i;:::-;37988:74;;38071:93;38160:3;38071:93;:::i;:::-;38189:2;38184:3;38180:12;38173:19;;37832:366;;;:::o;38204:419::-;38370:4;38408:2;38397:9;38393:18;38385:26;;38457:9;38451:4;38447:20;38443:1;38432:9;38428:17;38421:47;38485:131;38611:4;38485:131;:::i;:::-;38477:139;;38204:419;;;:::o;38629:180::-;38677:77;38674:1;38667:88;38774:4;38771:1;38764:15;38798:4;38795:1;38788:15

Swarm Source

ipfs://55b0476cc135461ece77fe649a98ad95105a67c2fe2e4745e34b919e269a143e
[ 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.