ETH Price: $3,321.49 (+1.53%)
 

Overview

ETH Balance

15 wei

Eth Value

Less Than $0.01 (@ $3,321.49/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve158454272022-10-28 8:41:23826 days ago1666946483IN
0x3A3889fd...7C5Cc159A
0 ETH0.000464359.82075432
Approve158277252022-10-25 21:18:59828 days ago1666732739IN
0x3A3889fd...7C5Cc159A
0 ETH0.0005768923.07684153
Approve157963792022-10-21 12:07:35833 days ago1666354055IN
0x3A3889fd...7C5Cc159A
0 ETH0.0010825222.89459027
Approve157929082022-10-21 0:30:47833 days ago1666312247IN
0x3A3889fd...7C5Cc159A
0 ETH0.0011271323.83812748
Approve157923532022-10-20 22:39:47833 days ago1666305587IN
0x3A3889fd...7C5Cc159A
0 ETH0.0026005655
Approve157923062022-10-20 22:30:23833 days ago1666305023IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013569328.69806431
Approve157921982022-10-20 22:08:47833 days ago1666303727IN
0x3A3889fd...7C5Cc159A
0 ETH0.0016583435.07285451
Approve157920562022-10-20 21:40:23833 days ago1666302023IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013113927.73504498
Approve157920512022-10-20 21:39:23833 days ago1666301963IN
0x3A3889fd...7C5Cc159A
0 ETH0.001285327.18326972
Approve157920332022-10-20 21:35:47833 days ago1666301747IN
0x3A3889fd...7C5Cc159A
0 ETH0.001188925.1444503
Approve157920002022-10-20 21:29:11833 days ago1666301351IN
0x3A3889fd...7C5Cc159A
0 ETH0.0012866627.21190861
Approve157919912022-10-20 21:27:23833 days ago1666301243IN
0x3A3889fd...7C5Cc159A
0 ETH0.0012598826.64565247
Approve157919872022-10-20 21:26:35833 days ago1666301195IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013669528.9101778
Approve157919822022-10-20 21:25:35833 days ago1666301135IN
0x3A3889fd...7C5Cc159A
0 ETH0.0012772527.01308525
Approve157919782022-10-20 21:24:47833 days ago1666301087IN
0x3A3889fd...7C5Cc159A
0 ETH0.0011314823.93007238
Approve157919732022-10-20 21:23:47833 days ago1666301027IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013484828.51938833
Approve157919722022-10-20 21:23:35833 days ago1666301015IN
0x3A3889fd...7C5Cc159A
0 ETH0.001355828.6742404
Approve157919722022-10-20 21:23:35833 days ago1666301015IN
0x3A3889fd...7C5Cc159A
0 ETH0.001355828.6742404
Approve157919712022-10-20 21:23:23833 days ago1666301003IN
0x3A3889fd...7C5Cc159A
0 ETH0.0012801827.07492823
Approve157919342022-10-20 21:15:59833 days ago1666300559IN
0x3A3889fd...7C5Cc159A
0 ETH0.0015880433.58592965
Approve157919302022-10-20 21:15:11833 days ago1666300511IN
0x3A3889fd...7C5Cc159A
0 ETH0.0017276536.53850974
Approve157918972022-10-20 21:08:35833 days ago1666300115IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013619828.80505739
Approve157918932022-10-20 21:07:47833 days ago1666300067IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013006127.5071005
Approve157918912022-10-20 21:07:23833 days ago1666300043IN
0x3A3889fd...7C5Cc159A
0 ETH0.0013439728.42396877
Approve157918832022-10-20 21:05:47833 days ago1666299947IN
0x3A3889fd...7C5Cc159A
0 ETH0.0015776433.36601889
View all transactions

Latest 21 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
157954932022-10-21 9:09:47833 days ago1666343387
0x3A3889fd...7C5Cc159A
0.03080367 ETH
157954932022-10-21 9:09:47833 days ago1666343387
0x3A3889fd...7C5Cc159A
0.03080367 ETH
157921332022-10-20 21:55:47833 days ago1666302947
0x3A3889fd...7C5Cc159A
0.05311658 ETH
157921332022-10-20 21:55:47833 days ago1666302947
0x3A3889fd...7C5Cc159A
0.05311658 ETH
157919852022-10-20 21:26:11833 days ago1666301171
0x3A3889fd...7C5Cc159A
0.08909273 ETH
157919852022-10-20 21:26:11833 days ago1666301171
0x3A3889fd...7C5Cc159A
0.08909273 ETH
157918822022-10-20 21:05:35833 days ago1666299935
0x3A3889fd...7C5Cc159A
0.43989391 ETH
157918822022-10-20 21:05:35833 days ago1666299935
0x3A3889fd...7C5Cc159A
0.43989391 ETH
157917662022-10-20 20:42:11833 days ago1666298531
0x3A3889fd...7C5Cc159A
0.14827488 ETH
157917662022-10-20 20:42:11833 days ago1666298531
0x3A3889fd...7C5Cc159A
0.14827488 ETH
157916732022-10-20 20:22:59833 days ago1666297379
0x3A3889fd...7C5Cc159A
0.18248316 ETH
157916732022-10-20 20:22:59833 days ago1666297379
0x3A3889fd...7C5Cc159A
0.18248316 ETH
157916712022-10-20 20:22:35833 days ago1666297355
0x3A3889fd...7C5Cc159A
0.18248316 ETH
157916702022-10-20 20:22:23833 days ago1666297343
0x3A3889fd...7C5Cc159A
0.18248316 ETH
157916062022-10-20 20:09:35833 days ago1666296575
0x3A3889fd...7C5Cc159A
0.47254935 ETH
157916062022-10-20 20:09:35833 days ago1666296575
0x3A3889fd...7C5Cc159A
0.47254935 ETH
157915542022-10-20 19:59:11833 days ago1666295951
0x3A3889fd...7C5Cc159A
0.79409737 ETH
157915542022-10-20 19:59:11833 days ago1666295951
0x3A3889fd...7C5Cc159A
0.79409737 ETH
157915492022-10-20 19:58:11833 days ago1666295891
0x3A3889fd...7C5Cc159A
0.4847916 ETH
157915122022-10-20 19:50:47834 days ago1666295447
0x3A3889fd...7C5Cc159A
0.29616709 ETH
157915122022-10-20 19:50:47834 days ago1666295447
0x3A3889fd...7C5Cc159A
0.29616709 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
THEShiba

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-20
*/

/** 

████████╗██╗░░██╗███████╗  ░██████╗██╗░░██╗██╗██████╗░░█████╗░
╚══██╔══╝██║░░██║██╔════╝  ██╔════╝██║░░██║██║██╔══██╗██╔══██╗
░░░██║░░░███████║█████╗░░  ╚█████╗░███████║██║██████╦╝███████║
░░░██║░░░██╔══██║██╔══╝░░  ░╚═══██╗██╔══██║██║██╔══██╗██╔══██║
░░░██║░░░██║░░██║███████╗  ██████╔╝██║░░██║██║██████╦╝██║░░██║
░░░╚═╝░░░╚═╝░░╚═╝╚══════╝  ╚═════╝░╚═╝░░╚═╝╚═╝╚═════╝░╚═╝░░╚═╝

https://t.me/THEShibaportal
https://twitter.com/THEShibERC
https://theshiba.finance
https://medium.com/@THEShiba
                                                                          
**/


//SPDX-License-Identifier: MIT

pragma solidity 0.8.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, 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 sender,
        address recipient,
        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);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping (address => uint256) internal _balances;

    mapping (address => mapping (address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

contract THEShiba is ERC20, Ownable{
    using Address for address payable;
    
    IRouter public router;
    address public pair;
    
    bool private swapping;
    bool public swapEnabled;
    bool public tradingEnabled;

    uint256 public genesis_block;
    
    uint256 public swapThreshold = 1_000 * 10e18;
    uint256 public maxTxAmount = 20_200 * 10**18;
    uint256 public maxWalletAmount = 20_200 * 10**18;
    
    address public marketingWallet = 0x541Ba606efd878E94872B19777C49F1502B9EEbd;
    address public developerWallet = 0x541Ba606efd878E94872B19777C49F1502B9EEbd;
    address public lpReceiver = marketingWallet;
    
    struct Taxes {
        uint256 marketing;
        uint256 liquidity; 
        uint256 developer;
    }
    
    Taxes public taxes = Taxes(5,0,0);
    Taxes public sellTaxes = Taxes(5,0,0);
    uint256 public totTax = 5;
    uint256 public totSellTax = 5;
    
    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) public isBot;
    
    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }
        
    constructor() ERC20("THE Shiba", "THES") {
        _mint(msg.sender, 1e6 * 10**decimals());
        excludedFromFees[msg.sender] = true;

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        excludedFromFees[address(this)] = true;
        excludedFromFees[marketingWallet] = true;
        excludedFromFees[developerWallet] = true;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBot[sender] && !isBot[recipient], "You can't transfer tokens");
                
        
        if(!excludedFromFees[sender] && !excludedFromFees[recipient] && !swapping){
            require(tradingEnabled, "Trading not active yet");
            require(amount <= maxTxAmount, "You are exceeding maxTxAmount");
            if(recipient != pair){
                require(balanceOf(recipient) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount");
            }
        }

        uint256 fee;
        
        //set fee to zero if fees in contract are handled or exempted
        if (swapping || excludedFromFees[sender] || excludedFromFees[recipient]) fee = 0;
        
        //calculate fee
        else{
            if(recipient == pair) fee = amount * totSellTax / 100;
            else fee = amount * totTax / 100;
        }
        
        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (swapEnabled && !swapping && sender != pair && fee > 0) swapForFees();

        super._transfer(sender, recipient, amount - fee);
        if(fee > 0) super._transfer(sender, address(this) ,fee);

    }

    function swapForFees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {

            // Split the contract balance into halves
            uint256 denominator = totSellTax * 2;
            uint256 tokensToAddLiquidityWith = contractBalance * sellTaxes.liquidity / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;
    
            uint256 initialBalance = address(this).balance;
    
            swapTokensForETH(toSwap);
    
            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance= deltaBalance / (denominator - sellTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * sellTaxes.liquidity;
    
            if(ethToAddLiquidityWith > 0){
                // Add liquidity to Uniswap
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }
    
            uint256 marketingAmt = unitBalance * 2 * sellTaxes.marketing;
            if(marketingAmt > 0){
                payable(marketingWallet).sendValue(marketingAmt);
            }
            
            uint256 developerAmt = unitBalance * 2 * sellTaxes.developer;
            if(developerAmt > 0){
                payable(developerWallet).sendValue(developerAmt);
            }
        }
    }


    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);

    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpReceiver,
            block.timestamp
        );
    }

    function setSwapEnabled(bool state) external onlyOwner {
        swapEnabled = state;
    }

    function setSwapThreshold(uint256 new_amount) external onlyOwner {
        swapThreshold = new_amount;
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already active");
        tradingEnabled = true;
        swapEnabled = true;
        genesis_block = block.number;
    }

    function setTaxes(uint256 _marketing, uint256 _liquidity, uint256 _developer) external onlyOwner{
        taxes = Taxes(_marketing, _liquidity, _developer);
        totTax = _marketing + _liquidity + _developer;
    }

    function setSellTaxes(uint256 _marketing, uint256 _liquidity, uint256 _developer) external onlyOwner{
        sellTaxes = Taxes(_marketing, _liquidity, _developer);
        totSellTax = _marketing + _liquidity + _developer;
    }
    
    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateDeveloperWallet(address newWallet) external onlyOwner{
        developerWallet = newWallet;
    }

    function updateLpReceiver(address newWallet) external onlyOwner {
        lpReceiver = newWallet;
    }

    function updateRouterAndPair(IRouter _router, address _pair) external onlyOwner{
        router = _router;
        pair = _pair;
    }

    function addBot(address account) external onlyOwner{
        isBot[account] = true;
    }

    function addBotsBulk(address[] memory isBot_) external onlyOwner {
        for (uint i = 0; i < isBot_.length; i++) {
            isBot[isBot_[i]] = true;
        }
    }
    
    function delBot(address account) external {
        require (msg.sender == marketingWallet);
        isBot[account] = false;
    }

    function delBotsBulk(address[] memory isBot_) external onlyOwner {
        require (msg.sender == marketingWallet);
        for (uint i = 0; i < isBot_.length; i++) {
            isBot[isBot_[i]] = false;
        }
    }

    function updateExcludedFromFees(address _address, bool state) external onlyOwner{
        excludedFromFees[_address] = state;
    }
    
    function updateMaxTxAmount(uint256 amount) external onlyOwner{
        maxTxAmount = amount * 10**18;
    }
    
    function updateMaxWalletAmount(uint256 amount) external onlyOwner{
        maxWalletAmount = amount * 10**18;
    }

    function rescueERC20(address tokenAddress, uint256 amount) external {
        require (msg.sender == marketingWallet);
        IERC20(tokenAddress).transfer(owner(), amount);
    }

    function rescueETH(uint256 weiAmount) external {
        require (msg.sender == marketingWallet);
        payable(owner()).sendValue(weiAmount);
    }

    function manualSwap(uint256 amount, uint256 developerPercentage, uint256 marketingPercentage) external {
        require (msg.sender == marketingWallet);
        uint256 initBalance = address(this).balance;
        swapTokensForETH(amount);
        uint256 newBalance = address(this).balance - initBalance;
        if(marketingPercentage > 0) payable(marketingWallet).sendValue(newBalance * marketingPercentage / (developerPercentage + marketingPercentage));
        if(developerPercentage > 0) payable(developerWallet).sendValue(newBalance * developerPercentage / (developerPercentage + marketingPercentage));
    }

    function removeLimits() external onlyOwner returns (bool) {
        maxTxAmount = totalSupply();
        maxWalletAmount = totalSupply();
        return true;
    }

    // fallbacks
    receive() external payable {}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"addBotsBulk","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"delBotsBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"developerPercentage","type":"uint256"},{"internalType":"uint256","name":"marketingPercentage","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"address","name":"newWallet","type":"address"}],"name":"updateDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLpReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IRouter","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269021e19e0c9bab24000006009556904470b504fd02aa00000600a556904470b504fd02aa00000600b5573541ba606efd878e94872b19777c49f1502b9eebd600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073541ba606efd878e94872b19777c49f1502b9eebd600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060058152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015550506040518060600160405280600581526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155505060056015556005601655348015620001d257600080fd5b506040518060400160405280600981526020017f54484520536869626100000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5448455300000000000000000000000000000000000000000000000000000000815250816003908051906020019062000257929190620008c3565b50806004908051906020019062000270929190620008c3565b50505062000293620002876200068260201b60201c565b6200068a60201b60201c565b620002d233620002a86200075060201b60201c565b600a620002b6919062000b0d565b620f4240620002c6919062000b5e565b6200075960201b60201c565b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000c29565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000445919062000c29565b6040518363ffffffff1660e01b81526004016200046492919062000c6c565b6020604051808303816000875af115801562000484573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004aa919062000c29565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000e0c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c39062000cfa565b60405180910390fd5b620007e060008383620008be60201b60201c565b8060026000828254620007f4919062000d1c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200084b919062000d1c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008b2919062000d8a565b60405180910390a35050565b505050565b828054620008d19062000dd6565b90600052602060002090601f016020900481019282620008f5576000855562000941565b82601f106200091057805160ff191683800117855562000941565b8280016001018555821562000941579182015b828111156200094057825182559160200191906001019062000923565b5b50905062000950919062000954565b5090565b5b808211156200096f57600081600090555060010162000955565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a0157808604811115620009d957620009d862000973565b5b6001851615620009e95780820291505b8081029050620009f985620009a2565b9450620009b9565b94509492505050565b60008262000a1c576001905062000aef565b8162000a2c576000905062000aef565b816001811462000a45576002811462000a505762000a86565b600191505062000aef565b60ff84111562000a655762000a6462000973565b5b8360020a91508482111562000a7f5762000a7e62000973565b5b5062000aef565b5060208310610133831016604e8410600b841016171562000ac05782820a90508381111562000aba5762000ab962000973565b5b62000aef565b62000acf8484846001620009af565b9250905081840481111562000ae95762000ae862000973565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b1a8262000af6565b915062000b278362000b00565b925062000b567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a0a565b905092915050565b600062000b6b8262000af6565b915062000b788362000af6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bb45762000bb362000973565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bf18262000bc4565b9050919050565b62000c038162000be4565b811462000c0f57600080fd5b50565b60008151905062000c238162000bf8565b92915050565b60006020828403121562000c425762000c4162000bbf565b5b600062000c528482850162000c12565b91505092915050565b62000c668162000be4565b82525050565b600060408201905062000c83600083018562000c5b565b62000c92602083018462000c5b565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ce2601f8362000c99565b915062000cef8262000caa565b602082019050919050565b6000602082019050818103600083015262000d158162000cd3565b9050919050565b600062000d298262000af6565b915062000d368362000af6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d6e5762000d6d62000973565b5b828201905092915050565b62000d848162000af6565b82525050565b600060208201905062000da1600083018462000d79565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000def57607f821691505b6020821081141562000e065762000e0562000da7565b5b50919050565b614a9e8062000e1c6000396000f3fe6080604052600436106102e85760003560e01c8063728f8eea11610190578063aa4bde28116100dc578063e01af92c11610095578063f2fde38b1161006f578063f2fde38b14610b33578063f66895a314610b5c578063f887ea4014610b89578063ffecf51614610bb4576102ef565b8063e01af92c14610ab8578063e545fd6d14610ae1578063e9dae5ed14610b0a576102ef565b8063aa4bde2814610998578063aacebbe3146109c3578063b1975ec6146109ec578063c18bc19514610a15578063dbe66ca014610a3e578063dd62ed3e14610a7b576102ef565b80638da5cb5b116101495780639e252f00116101235780639e252f00146108ca578063a457c2d7146108f3578063a8aa1b3114610930578063a9059cbb1461095b576102ef565b80638da5cb5b1461084b57806395d89b41146108765780639d0014b1146108a1576102ef565b8063728f8eea1461075d578063751039fc1461078a57806375f0a874146107b55780638a8c523c146107e05780638c0b5e22146107f75780638cd4426d14610822576102ef565b8063293b7ef41161024f5780634ada218b116102085780636ddd1713116101e25780636ddd1713146106b5578063703a4902146106e057806370a0823114610709578063715018a614610746576102ef565b80634ada218b146106385780636256d18114610663578063654319741461068c576102ef565b8063293b7ef4146105165780632bce5beb14610541578063313ce5671461056a57806339509351146105955780633bbac579146105d257806340b28c2f1461060f576102ef565b80631f0c57fc116102a15780631f0c57fc146104065780632253163d1461043157806323b872dd1461045c57806326b5d32f14610499578063273123b7146104c2578063274a533c146104eb576102ef565b80630445b667146102f457806306fdde031461031f578063087332141461034a578063095ea7b31461037357806318160ddd146103b0578063185870f9146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610bdd565b604051610316919061355b565b60405180910390f35b34801561032b57600080fd5b50610334610be3565b604051610341919061360f565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613671565b610c75565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613722565b610d51565b6040516103a7919061377d565b60405180910390f35b3480156103bc57600080fd5b506103c5610d6f565b6040516103d2919061355b565b60405180910390f35b3480156103e757600080fd5b506103f0610d79565b6040516103fd91906137a7565b60405180910390f35b34801561041257600080fd5b5061041b610d9f565b60405161042891906137a7565b60405180910390f35b34801561043d57600080fd5b50610446610dc5565b604051610453919061355b565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906137c2565b610dcb565b604051610490919061377d565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613671565b610ecc565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190613815565b611037565b005b3480156104f757600080fd5b506105006110ec565b60405161050d919061355b565b60405180910390f35b34801561052257600080fd5b5061052b6110f2565b604051610538919061355b565b60405180910390f35b34801561054d57600080fd5b506105686004803603810190610563919061398a565b6110f8565b005b34801561057657600080fd5b5061057f611209565b60405161058c91906139ef565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613722565b611212565b6040516105c9919061377d565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190613815565b6112be565b604051610606919061377d565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613a48565b6112de565b005b34801561064457600080fd5b5061064d6113e0565b60405161065a919061377d565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190613a88565b6113f3565b005b34801561069857600080fd5b506106b360048036038101906106ae9190613815565b61148c565b005b3480156106c157600080fd5b506106ca61154c565b6040516106d7919061377d565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613815565b61155f565b005b34801561071557600080fd5b50610730600480360381019061072b9190613815565b61161f565b60405161073d919061355b565b60405180910390f35b34801561075257600080fd5b5061075b611667565b005b34801561076957600080fd5b506107726116ef565b60405161078193929190613ab5565b60405180910390f35b34801561079657600080fd5b5061079f611707565b6040516107ac919061377d565b60405180910390f35b3480156107c157600080fd5b506107ca6117a8565b6040516107d791906137a7565b60405180910390f35b3480156107ec57600080fd5b506107f56117ce565b005b34801561080357600080fd5b5061080c6118d9565b604051610819919061355b565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190613722565b6118df565b005b34801561085757600080fd5b506108606119c3565b60405161086d91906137a7565b60405180910390f35b34801561088257600080fd5b5061088b6119ed565b604051610898919061360f565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613a88565b611a7f565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190613a88565b611b05565b005b3480156108ff57600080fd5b5061091a60048036038101906109159190613722565b611b92565b604051610927919061377d565b60405180910390f35b34801561093c57600080fd5b50610945611c86565b60405161095291906137a7565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613722565b611cac565b60405161098f919061377d565b60405180910390f35b3480156109a457600080fd5b506109ad611cca565b6040516109ba919061355b565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613815565b611cd0565b005b3480156109f857600080fd5b50610a136004803603810190610a0e919061398a565b611d90565b005b348015610a2157600080fd5b50610a3c6004803603810190610a379190613a88565b611efb565b005b348015610a4a57600080fd5b50610a656004803603810190610a609190613815565b611f94565b604051610a72919061377d565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190613aec565b611fb4565b604051610aaf919061355b565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613b58565b61203b565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613b85565b6120d4565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613671565b6121ab565b005b348015610b3f57600080fd5b50610b5a6004803603810190610b559190613815565b612287565b005b348015610b6857600080fd5b50610b7161237f565b604051610b8093929190613ab5565b60405180910390f35b348015610b9557600080fd5b50610b9e612397565b604051610bab9190613c24565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190613815565b6123bd565b005b60095481565b606060038054610bf290613c6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e90613c6e565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b5050505050905090565b610c7d612494565b73ffffffffffffffffffffffffffffffffffffffff16610c9b6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613cec565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050808284610d3c9190613d3b565b610d469190613d3b565b601681905550505050565b6000610d65610d5e612494565b848461249c565b6001905092915050565b6000600254905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6000610dd8848484612667565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e23612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90613e03565b60405180910390fd5b610ec085610eaf612494565b8584610ebb9190613e23565b61249c565b60019150509392505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f2657600080fd5b6000479050610f3484612bbd565b60008147610f429190613e23565b90506000831115610fba57610fb98385610f5c9190613d3b565b8483610f689190613e57565b610f729190613ee0565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b60008411156110305761102f8385610fd29190613d3b565b8583610fde9190613e57565b610fe89190613ee0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b5050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109157600080fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60155481565b611100612494565b73ffffffffffffffffffffffffffffffffffffffff1661111e6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b90613cec565b60405180910390fd5b60005b81518110156112055760016018600084848151811061119957611198613f11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111fd90613f40565b915050611177565b5050565b60006012905090565b60006112b461121f612494565b84846001600061122d612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112af9190613d3b565b61249c565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6112e6612494565b73ffffffffffffffffffffffffffffffffffffffff166113046119c3565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135190613cec565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600760169054906101000a900460ff1681565b6113fb612494565b73ffffffffffffffffffffffffffffffffffffffff166114196119c3565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613cec565b60405180910390fd5b670de0b6b3a7640000816114839190613e57565b600a8190555050565b611494612494565b73ffffffffffffffffffffffffffffffffffffffff166114b26119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613cec565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760159054906101000a900460ff1681565b611567612494565b73ffffffffffffffffffffffffffffffffffffffff166115856119c3565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613cec565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166f612494565b73ffffffffffffffffffffffffffffffffffffffff1661168d6119c3565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613cec565b60405180910390fd5b6116ed6000612ef4565b565b600f8060000154908060010154908060020154905083565b6000611711612494565b73ffffffffffffffffffffffffffffffffffffffff1661172f6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613cec565b60405180910390fd5b61178d610d6f565b600a8190555061179b610d6f565b600b819055506001905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117d6612494565b73ffffffffffffffffffffffffffffffffffffffff166117f46119c3565b73ffffffffffffffffffffffffffffffffffffffff161461184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613cec565b60405180910390fd5b600760169054906101000a900460ff161561189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613fd5565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550565b600a5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461193957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61195d6119c3565b836040518363ffffffff1660e01b815260040161197b929190613ff5565b6020604051808303816000875af115801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190614033565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119fc90613c6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2890613c6e565b8015611a755780601f10611a4a57610100808354040283529160200191611a75565b820191906000526020600020905b815481529060010190602001808311611a5857829003601f168201915b5050505050905090565b611a87612494565b73ffffffffffffffffffffffffffffffffffffffff16611aa56119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613cec565b60405180910390fd5b8060098190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b5f57600080fd5b611b8f81611b6b6119c3565b73ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b50565b60008060016000611ba1612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c55906140d2565b60405180910390fd5b611c7b611c69612494565b858584611c769190613e23565b61249c565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cc0611cb9612494565b8484612667565b6001905092915050565b600b5481565b611cd8612494565b73ffffffffffffffffffffffffffffffffffffffff16611cf66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390613cec565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d98612494565b73ffffffffffffffffffffffffffffffffffffffff16611db66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613cec565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e6657600080fd5b60005b8151811015611ef757600060186000848481518110611e8b57611e8a613f11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611eef90613f40565b915050611e69565b5050565b611f03612494565b73ffffffffffffffffffffffffffffffffffffffff16611f216119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90613cec565b60405180910390fd5b670de0b6b3a764000081611f8b9190613e57565b600b8190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612043612494565b73ffffffffffffffffffffffffffffffffffffffff166120616119c3565b73ffffffffffffffffffffffffffffffffffffffff16146120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613cec565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b6120dc612494565b73ffffffffffffffffffffffffffffffffffffffff166120fa6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790613cec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6121b3612494565b73ffffffffffffffffffffffffffffffffffffffff166121d16119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90613cec565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f6000820151816000015560208201518160010155604082015181600201559050508082846122729190613d3b565b61227c9190613d3b565b601581905550505050565b61228f612494565b73ffffffffffffffffffffffffffffffffffffffff166122ad6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90613cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614164565b60405180910390fd5b61237c81612ef4565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c5612494565b73ffffffffffffffffffffffffffffffffffffffff166123e36119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613cec565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612503906141f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614288565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161265a919061355b565b60405180910390a3505050565b600081116126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a19061431a565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561274e5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614386565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128315750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561284a5750600760149054906101000a900460ff16155b1561299257600760169054906101000a900460ff1661289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906143f2565b60405180910390fd5b600a548111156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9061445e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461299157600b54816129458461161f565b61294f9190613d3b565b1115612990576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612987906144f0565b60405180910390fd5b5b5b6000600760149054906101000a900460ff16806129f85750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612a4c5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a5a5760009050612aef565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ad157606460165483612ac09190613e57565b612aca9190613ee0565b9050612aee565b606460155483612ae19190613e57565b612aeb9190613ee0565b90505b5b600760159054906101000a900460ff168015612b185750600760149054906101000a900460ff16155b8015612b725750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7e5750600081115b15612b8c57612b8b612fba565b5b612ba284848385612b9d9190613e23565b6131be565b6000811115612bb757612bb68430836131be565b5b50505050565b6000600267ffffffffffffffff811115612bda57612bd9613847565b5b604051908082528060200260200182016040528015612c085781602001602082028036833780820191505090505b5090503081600081518110612c2057612c1f613f11565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614525565b81600181518110612cff57612cfe613f11565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d6630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461249c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dca95949392919061464b565b600060405180830381600087803b158015612de457600080fd5b505af1158015612df8573d6000803e3d6000fd5b505050505050565b80471015612e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3a906146f1565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612e6990614742565b60006040518083038185875af1925050503d8060008114612ea6576040519150601f19603f3d011682016040523d82523d6000602084013e612eab565b606091505b5050905080612eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee6906147c9565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff166131bc576001600760146101000a81548160ff0219169083151502179055506000612ff43061161f565b9050600954811061319f57600060026016546130109190613e57565b9050600081601260010154846130269190613e57565b6130309190613ee0565b9050600081846130409190613e23565b9050600047905061305082612bbd565b6000814761305e9190613e23565b90506000601260010154866130739190613e23565b8261307e9190613ee0565b90506000601260010154826130939190613e57565b905060008111156130a9576130a8868261343d565b5b60006012600001546002846130be9190613e57565b6130c89190613e57565b9050600081111561311f5761311e81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b60006012600201546002856131349190613e57565b61313e9190613e57565b905060008111156131955761319481600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b5050505050505050505b506000600760146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561322e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132259061485b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561329e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613295906148ed565b60405180910390fd5b6132a983838361353d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561332f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133269061497f565b60405180910390fd5b818161333b9190613e23565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133cb9190613d3b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342f919061355b565b60405180910390a350505050565b61346a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461249c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134f39695949392919061499f565b60606040518083038185885af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614a15565b5050505050565b505050565b6000819050919050565b61355581613542565b82525050565b6000602082019050613570600083018461354c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135b0578082015181840152602081019050613595565b838111156135bf576000848401525b50505050565b6000601f19601f8301169050919050565b60006135e182613576565b6135eb8185613581565b93506135fb818560208601613592565b613604816135c5565b840191505092915050565b6000602082019050818103600083015261362981846135d6565b905092915050565b6000604051905090565b600080fd5b600080fd5b61364e81613542565b811461365957600080fd5b50565b60008135905061366b81613645565b92915050565b60008060006060848603121561368a5761368961363b565b5b60006136988682870161365c565b93505060206136a98682870161365c565b92505060406136ba8682870161365c565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136ef826136c4565b9050919050565b6136ff816136e4565b811461370a57600080fd5b50565b60008135905061371c816136f6565b92915050565b600080604083850312156137395761373861363b565b5b60006137478582860161370d565b92505060206137588582860161365c565b9150509250929050565b60008115159050919050565b61377781613762565b82525050565b6000602082019050613792600083018461376e565b92915050565b6137a1816136e4565b82525050565b60006020820190506137bc6000830184613798565b92915050565b6000806000606084860312156137db576137da61363b565b5b60006137e98682870161370d565b93505060206137fa8682870161370d565b925050604061380b8682870161365c565b9150509250925092565b60006020828403121561382b5761382a61363b565b5b60006138398482850161370d565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61387f826135c5565b810181811067ffffffffffffffff8211171561389e5761389d613847565b5b80604052505050565b60006138b1613631565b90506138bd8282613876565b919050565b600067ffffffffffffffff8211156138dd576138dc613847565b5b602082029050602081019050919050565b600080fd5b6000613906613901846138c2565b6138a7565b90508083825260208201905060208402830185811115613929576139286138ee565b5b835b81811015613952578061393e888261370d565b84526020840193505060208101905061392b565b5050509392505050565b600082601f83011261397157613970613842565b5b81356139818482602086016138f3565b91505092915050565b6000602082840312156139a05761399f61363b565b5b600082013567ffffffffffffffff8111156139be576139bd613640565b5b6139ca8482850161395c565b91505092915050565b600060ff82169050919050565b6139e9816139d3565b82525050565b6000602082019050613a0460008301846139e0565b92915050565b6000613a15826136e4565b9050919050565b613a2581613a0a565b8114613a3057600080fd5b50565b600081359050613a4281613a1c565b92915050565b60008060408385031215613a5f57613a5e61363b565b5b6000613a6d85828601613a33565b9250506020613a7e8582860161370d565b9150509250929050565b600060208284031215613a9e57613a9d61363b565b5b6000613aac8482850161365c565b91505092915050565b6000606082019050613aca600083018661354c565b613ad7602083018561354c565b613ae4604083018461354c565b949350505050565b60008060408385031215613b0357613b0261363b565b5b6000613b118582860161370d565b9250506020613b228582860161370d565b9150509250929050565b613b3581613762565b8114613b4057600080fd5b50565b600081359050613b5281613b2c565b92915050565b600060208284031215613b6e57613b6d61363b565b5b6000613b7c84828501613b43565b91505092915050565b60008060408385031215613b9c57613b9b61363b565b5b6000613baa8582860161370d565b9250506020613bbb85828601613b43565b9150509250929050565b6000819050919050565b6000613bea613be5613be0846136c4565b613bc5565b6136c4565b9050919050565b6000613bfc82613bcf565b9050919050565b6000613c0e82613bf1565b9050919050565b613c1e81613c03565b82525050565b6000602082019050613c396000830184613c15565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8657607f821691505b60208210811415613c9a57613c99613c3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cd6602083613581565b9150613ce182613ca0565b602082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4682613542565b9150613d5183613542565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8657613d85613d0c565b5b828201905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ded602883613581565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b6000613e2e82613542565b9150613e3983613542565b925082821015613e4c57613e4b613d0c565b5b828203905092915050565b6000613e6282613542565b9150613e6d83613542565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ea657613ea5613d0c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eeb82613542565b9150613ef683613542565b925082613f0657613f05613eb1565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613f4b82613542565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7e57613f7d613d0c565b5b600182019050919050565b7f54726164696e6720616c72656164792061637469766500000000000000000000600082015250565b6000613fbf601683613581565b9150613fca82613f89565b602082019050919050565b60006020820190508181036000830152613fee81613fb2565b9050919050565b600060408201905061400a6000830185613798565b614017602083018461354c565b9392505050565b60008151905061402d81613b2c565b92915050565b6000602082840312156140495761404861363b565b5b60006140578482850161401e565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140bc602583613581565b91506140c782614060565b604082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061414e602683613581565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141e0602483613581565b91506141eb82614184565b604082019050919050565b6000602082019050818103600083015261420f816141d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614272602283613581565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614304602983613581565b915061430f826142a8565b604082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b6000614370601983613581565b915061437b8261433a565b602082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b7f54726164696e67206e6f74206163746976652079657400000000000000000000600082015250565b60006143dc601683613581565b91506143e7826143a6565b602082019050919050565b6000602082019050818103600083015261440b816143cf565b9050919050565b7f596f752061726520657863656564696e67206d61785478416d6f756e74000000600082015250565b6000614448601d83613581565b915061445382614412565b602082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602183613581565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b60008151905061451f816136f6565b92915050565b60006020828403121561453b5761453a61363b565b5b600061454984828501614510565b91505092915050565b6000819050919050565b600061457761457261456d84614552565b613bc5565b613542565b9050919050565b6145878161455c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145c2816136e4565b82525050565b60006145d483836145b9565b60208301905092915050565b6000602082019050919050565b60006145f88261458d565b6146028185614598565b935061460d836145a9565b8060005b8381101561463e57815161462588826145c8565b9750614630836145e0565b925050600181019050614611565b5085935050505092915050565b600060a082019050614660600083018861354c565b61466d602083018761457e565b818103604083015261467f81866145ed565b905061468e6060830185613798565b61469b608083018461354c565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146db601d83613581565b91506146e6826146a5565b602082019050919050565b6000602082019050818103600083015261470a816146ce565b9050919050565b600081905092915050565b50565b600061472c600083614711565b91506147378261471c565b600082019050919050565b600061474d8261471f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147b3603a83613581565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614845602583613581565b9150614850826147e9565b604082019050919050565b6000602082019050818103600083015261487481614838565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148d7602383613581565b91506148e28261487b565b604082019050919050565b60006020820190508181036000830152614906816148ca565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614969602683613581565b91506149748261490d565b604082019050919050565b600060208201905081810360008301526149988161495c565b9050919050565b600060c0820190506149b46000830189613798565b6149c1602083018861354c565b6149ce604083018761457e565b6149db606083018661457e565b6149e86080830185613798565b6149f560a083018461354c565b979650505050505050565b600081519050614a0f81613645565b92915050565b600080600060608486031215614a2e57614a2d61363b565b5b6000614a3c86828701614a00565b9350506020614a4d86828701614a00565b9250506040614a5e86828701614a00565b915050925092509256fea2646970667358221220040bda633c38c00af1f48eeeb06f78149fd5891b59c8ef28d339a44f5fee6cfc64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063728f8eea11610190578063aa4bde28116100dc578063e01af92c11610095578063f2fde38b1161006f578063f2fde38b14610b33578063f66895a314610b5c578063f887ea4014610b89578063ffecf51614610bb4576102ef565b8063e01af92c14610ab8578063e545fd6d14610ae1578063e9dae5ed14610b0a576102ef565b8063aa4bde2814610998578063aacebbe3146109c3578063b1975ec6146109ec578063c18bc19514610a15578063dbe66ca014610a3e578063dd62ed3e14610a7b576102ef565b80638da5cb5b116101495780639e252f00116101235780639e252f00146108ca578063a457c2d7146108f3578063a8aa1b3114610930578063a9059cbb1461095b576102ef565b80638da5cb5b1461084b57806395d89b41146108765780639d0014b1146108a1576102ef565b8063728f8eea1461075d578063751039fc1461078a57806375f0a874146107b55780638a8c523c146107e05780638c0b5e22146107f75780638cd4426d14610822576102ef565b8063293b7ef41161024f5780634ada218b116102085780636ddd1713116101e25780636ddd1713146106b5578063703a4902146106e057806370a0823114610709578063715018a614610746576102ef565b80634ada218b146106385780636256d18114610663578063654319741461068c576102ef565b8063293b7ef4146105165780632bce5beb14610541578063313ce5671461056a57806339509351146105955780633bbac579146105d257806340b28c2f1461060f576102ef565b80631f0c57fc116102a15780631f0c57fc146104065780632253163d1461043157806323b872dd1461045c57806326b5d32f14610499578063273123b7146104c2578063274a533c146104eb576102ef565b80630445b667146102f457806306fdde031461031f578063087332141461034a578063095ea7b31461037357806318160ddd146103b0578063185870f9146103db576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610bdd565b604051610316919061355b565b60405180910390f35b34801561032b57600080fd5b50610334610be3565b604051610341919061360f565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613671565b610c75565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613722565b610d51565b6040516103a7919061377d565b60405180910390f35b3480156103bc57600080fd5b506103c5610d6f565b6040516103d2919061355b565b60405180910390f35b3480156103e757600080fd5b506103f0610d79565b6040516103fd91906137a7565b60405180910390f35b34801561041257600080fd5b5061041b610d9f565b60405161042891906137a7565b60405180910390f35b34801561043d57600080fd5b50610446610dc5565b604051610453919061355b565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906137c2565b610dcb565b604051610490919061377d565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613671565b610ecc565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190613815565b611037565b005b3480156104f757600080fd5b506105006110ec565b60405161050d919061355b565b60405180910390f35b34801561052257600080fd5b5061052b6110f2565b604051610538919061355b565b60405180910390f35b34801561054d57600080fd5b506105686004803603810190610563919061398a565b6110f8565b005b34801561057657600080fd5b5061057f611209565b60405161058c91906139ef565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613722565b611212565b6040516105c9919061377d565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190613815565b6112be565b604051610606919061377d565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190613a48565b6112de565b005b34801561064457600080fd5b5061064d6113e0565b60405161065a919061377d565b60405180910390f35b34801561066f57600080fd5b5061068a60048036038101906106859190613a88565b6113f3565b005b34801561069857600080fd5b506106b360048036038101906106ae9190613815565b61148c565b005b3480156106c157600080fd5b506106ca61154c565b6040516106d7919061377d565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613815565b61155f565b005b34801561071557600080fd5b50610730600480360381019061072b9190613815565b61161f565b60405161073d919061355b565b60405180910390f35b34801561075257600080fd5b5061075b611667565b005b34801561076957600080fd5b506107726116ef565b60405161078193929190613ab5565b60405180910390f35b34801561079657600080fd5b5061079f611707565b6040516107ac919061377d565b60405180910390f35b3480156107c157600080fd5b506107ca6117a8565b6040516107d791906137a7565b60405180910390f35b3480156107ec57600080fd5b506107f56117ce565b005b34801561080357600080fd5b5061080c6118d9565b604051610819919061355b565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190613722565b6118df565b005b34801561085757600080fd5b506108606119c3565b60405161086d91906137a7565b60405180910390f35b34801561088257600080fd5b5061088b6119ed565b604051610898919061360f565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613a88565b611a7f565b005b3480156108d657600080fd5b506108f160048036038101906108ec9190613a88565b611b05565b005b3480156108ff57600080fd5b5061091a60048036038101906109159190613722565b611b92565b604051610927919061377d565b60405180910390f35b34801561093c57600080fd5b50610945611c86565b60405161095291906137a7565b60405180910390f35b34801561096757600080fd5b50610982600480360381019061097d9190613722565b611cac565b60405161098f919061377d565b60405180910390f35b3480156109a457600080fd5b506109ad611cca565b6040516109ba919061355b565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613815565b611cd0565b005b3480156109f857600080fd5b50610a136004803603810190610a0e919061398a565b611d90565b005b348015610a2157600080fd5b50610a3c6004803603810190610a379190613a88565b611efb565b005b348015610a4a57600080fd5b50610a656004803603810190610a609190613815565b611f94565b604051610a72919061377d565b60405180910390f35b348015610a8757600080fd5b50610aa26004803603810190610a9d9190613aec565b611fb4565b604051610aaf919061355b565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613b58565b61203b565b005b348015610aed57600080fd5b50610b086004803603810190610b039190613b85565b6120d4565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190613671565b6121ab565b005b348015610b3f57600080fd5b50610b5a6004803603810190610b559190613815565b612287565b005b348015610b6857600080fd5b50610b7161237f565b604051610b8093929190613ab5565b60405180910390f35b348015610b9557600080fd5b50610b9e612397565b604051610bab9190613c24565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190613815565b6123bd565b005b60095481565b606060038054610bf290613c6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1e90613c6e565b8015610c6b5780601f10610c4057610100808354040283529160200191610c6b565b820191906000526020600020905b815481529060010190602001808311610c4e57829003601f168201915b5050505050905090565b610c7d612494565b73ffffffffffffffffffffffffffffffffffffffff16610c9b6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613cec565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050808284610d3c9190613d3b565b610d469190613d3b565b601681905550505050565b6000610d65610d5e612494565b848461249c565b6001905092915050565b6000600254905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6000610dd8848484612667565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e23612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90613e03565b60405180910390fd5b610ec085610eaf612494565b8584610ebb9190613e23565b61249c565b60019150509392505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f2657600080fd5b6000479050610f3484612bbd565b60008147610f429190613e23565b90506000831115610fba57610fb98385610f5c9190613d3b565b8483610f689190613e57565b610f729190613ee0565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b60008411156110305761102f8385610fd29190613d3b565b8583610fde9190613e57565b610fe89190613ee0565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b5050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461109157600080fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60155481565b611100612494565b73ffffffffffffffffffffffffffffffffffffffff1661111e6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b90613cec565b60405180910390fd5b60005b81518110156112055760016018600084848151811061119957611198613f11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111fd90613f40565b915050611177565b5050565b60006012905090565b60006112b461121f612494565b84846001600061122d612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112af9190613d3b565b61249c565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6112e6612494565b73ffffffffffffffffffffffffffffffffffffffff166113046119c3565b73ffffffffffffffffffffffffffffffffffffffff161461135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135190613cec565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600760169054906101000a900460ff1681565b6113fb612494565b73ffffffffffffffffffffffffffffffffffffffff166114196119c3565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613cec565b60405180910390fd5b670de0b6b3a7640000816114839190613e57565b600a8190555050565b611494612494565b73ffffffffffffffffffffffffffffffffffffffff166114b26119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613cec565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760159054906101000a900460ff1681565b611567612494565b73ffffffffffffffffffffffffffffffffffffffff166115856119c3565b73ffffffffffffffffffffffffffffffffffffffff16146115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d290613cec565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166f612494565b73ffffffffffffffffffffffffffffffffffffffff1661168d6119c3565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613cec565b60405180910390fd5b6116ed6000612ef4565b565b600f8060000154908060010154908060020154905083565b6000611711612494565b73ffffffffffffffffffffffffffffffffffffffff1661172f6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613cec565b60405180910390fd5b61178d610d6f565b600a8190555061179b610d6f565b600b819055506001905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117d6612494565b73ffffffffffffffffffffffffffffffffffffffff166117f46119c3565b73ffffffffffffffffffffffffffffffffffffffff161461184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613cec565b60405180910390fd5b600760169054906101000a900460ff161561189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613fd5565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550565b600a5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461193957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61195d6119c3565b836040518363ffffffff1660e01b815260040161197b929190613ff5565b6020604051808303816000875af115801561199a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119be9190614033565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119fc90613c6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2890613c6e565b8015611a755780601f10611a4a57610100808354040283529160200191611a75565b820191906000526020600020905b815481529060010190602001808311611a5857829003601f168201915b5050505050905090565b611a87612494565b73ffffffffffffffffffffffffffffffffffffffff16611aa56119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613cec565b60405180910390fd5b8060098190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b5f57600080fd5b611b8f81611b6b6119c3565b73ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b50565b60008060016000611ba1612494565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c55906140d2565b60405180910390fd5b611c7b611c69612494565b858584611c769190613e23565b61249c565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cc0611cb9612494565b8484612667565b6001905092915050565b600b5481565b611cd8612494565b73ffffffffffffffffffffffffffffffffffffffff16611cf66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4390613cec565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d98612494565b73ffffffffffffffffffffffffffffffffffffffff16611db66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613cec565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e6657600080fd5b60005b8151811015611ef757600060186000848481518110611e8b57611e8a613f11565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611eef90613f40565b915050611e69565b5050565b611f03612494565b73ffffffffffffffffffffffffffffffffffffffff16611f216119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90613cec565b60405180910390fd5b670de0b6b3a764000081611f8b9190613e57565b600b8190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612043612494565b73ffffffffffffffffffffffffffffffffffffffff166120616119c3565b73ffffffffffffffffffffffffffffffffffffffff16146120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90613cec565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b6120dc612494565b73ffffffffffffffffffffffffffffffffffffffff166120fa6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790613cec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6121b3612494565b73ffffffffffffffffffffffffffffffffffffffff166121d16119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90613cec565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f6000820151816000015560208201518160010155604082015181600201559050508082846122729190613d3b565b61227c9190613d3b565b601581905550505050565b61228f612494565b73ffffffffffffffffffffffffffffffffffffffff166122ad6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90613cec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614164565b60405180910390fd5b61237c81612ef4565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123c5612494565b73ffffffffffffffffffffffffffffffffffffffff166123e36119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090613cec565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612503906141f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614288565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161265a919061355b565b60405180910390a3505050565b600081116126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a19061431a565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561274e5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614386565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128315750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561284a5750600760149054906101000a900460ff16155b1561299257600760169054906101000a900460ff1661289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906143f2565b60405180910390fd5b600a548111156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da9061445e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461299157600b54816129458461161f565b61294f9190613d3b565b1115612990576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612987906144f0565b60405180910390fd5b5b5b6000600760149054906101000a900460ff16806129f85750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612a4c5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a5a5760009050612aef565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ad157606460165483612ac09190613e57565b612aca9190613ee0565b9050612aee565b606460155483612ae19190613e57565b612aeb9190613ee0565b90505b5b600760159054906101000a900460ff168015612b185750600760149054906101000a900460ff16155b8015612b725750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7e5750600081115b15612b8c57612b8b612fba565b5b612ba284848385612b9d9190613e23565b6131be565b6000811115612bb757612bb68430836131be565b5b50505050565b6000600267ffffffffffffffff811115612bda57612bd9613847565b5b604051908082528060200260200182016040528015612c085781602001602082028036833780820191505090505b5090503081600081518110612c2057612c1f613f11565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614525565b81600181518110612cff57612cfe613f11565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d6630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461249c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612dca95949392919061464b565b600060405180830381600087803b158015612de457600080fd5b505af1158015612df8573d6000803e3d6000fd5b505050505050565b80471015612e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3a906146f1565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612e6990614742565b60006040518083038185875af1925050503d8060008114612ea6576040519150601f19603f3d011682016040523d82523d6000602084013e612eab565b606091505b5050905080612eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee6906147c9565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff166131bc576001600760146101000a81548160ff0219169083151502179055506000612ff43061161f565b9050600954811061319f57600060026016546130109190613e57565b9050600081601260010154846130269190613e57565b6130309190613ee0565b9050600081846130409190613e23565b9050600047905061305082612bbd565b6000814761305e9190613e23565b90506000601260010154866130739190613e23565b8261307e9190613ee0565b90506000601260010154826130939190613e57565b905060008111156130a9576130a8868261343d565b5b60006012600001546002846130be9190613e57565b6130c89190613e57565b9050600081111561311f5761311e81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b60006012600201546002856131349190613e57565b61313e9190613e57565b905060008111156131955761319481600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e0090919063ffffffff16565b5b5050505050505050505b506000600760146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561322e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132259061485b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561329e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613295906148ed565b60405180910390fd5b6132a983838361353d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561332f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133269061497f565b60405180910390fd5b818161333b9190613e23565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133cb9190613d3b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161342f919061355b565b60405180910390a350505050565b61346a30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461249c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134f39695949392919061499f565b60606040518083038185885af1158015613511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135369190614a15565b5050505050565b505050565b6000819050919050565b61355581613542565b82525050565b6000602082019050613570600083018461354c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135b0578082015181840152602081019050613595565b838111156135bf576000848401525b50505050565b6000601f19601f8301169050919050565b60006135e182613576565b6135eb8185613581565b93506135fb818560208601613592565b613604816135c5565b840191505092915050565b6000602082019050818103600083015261362981846135d6565b905092915050565b6000604051905090565b600080fd5b600080fd5b61364e81613542565b811461365957600080fd5b50565b60008135905061366b81613645565b92915050565b60008060006060848603121561368a5761368961363b565b5b60006136988682870161365c565b93505060206136a98682870161365c565b92505060406136ba8682870161365c565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136ef826136c4565b9050919050565b6136ff816136e4565b811461370a57600080fd5b50565b60008135905061371c816136f6565b92915050565b600080604083850312156137395761373861363b565b5b60006137478582860161370d565b92505060206137588582860161365c565b9150509250929050565b60008115159050919050565b61377781613762565b82525050565b6000602082019050613792600083018461376e565b92915050565b6137a1816136e4565b82525050565b60006020820190506137bc6000830184613798565b92915050565b6000806000606084860312156137db576137da61363b565b5b60006137e98682870161370d565b93505060206137fa8682870161370d565b925050604061380b8682870161365c565b9150509250925092565b60006020828403121561382b5761382a61363b565b5b60006138398482850161370d565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61387f826135c5565b810181811067ffffffffffffffff8211171561389e5761389d613847565b5b80604052505050565b60006138b1613631565b90506138bd8282613876565b919050565b600067ffffffffffffffff8211156138dd576138dc613847565b5b602082029050602081019050919050565b600080fd5b6000613906613901846138c2565b6138a7565b90508083825260208201905060208402830185811115613929576139286138ee565b5b835b81811015613952578061393e888261370d565b84526020840193505060208101905061392b565b5050509392505050565b600082601f83011261397157613970613842565b5b81356139818482602086016138f3565b91505092915050565b6000602082840312156139a05761399f61363b565b5b600082013567ffffffffffffffff8111156139be576139bd613640565b5b6139ca8482850161395c565b91505092915050565b600060ff82169050919050565b6139e9816139d3565b82525050565b6000602082019050613a0460008301846139e0565b92915050565b6000613a15826136e4565b9050919050565b613a2581613a0a565b8114613a3057600080fd5b50565b600081359050613a4281613a1c565b92915050565b60008060408385031215613a5f57613a5e61363b565b5b6000613a6d85828601613a33565b9250506020613a7e8582860161370d565b9150509250929050565b600060208284031215613a9e57613a9d61363b565b5b6000613aac8482850161365c565b91505092915050565b6000606082019050613aca600083018661354c565b613ad7602083018561354c565b613ae4604083018461354c565b949350505050565b60008060408385031215613b0357613b0261363b565b5b6000613b118582860161370d565b9250506020613b228582860161370d565b9150509250929050565b613b3581613762565b8114613b4057600080fd5b50565b600081359050613b5281613b2c565b92915050565b600060208284031215613b6e57613b6d61363b565b5b6000613b7c84828501613b43565b91505092915050565b60008060408385031215613b9c57613b9b61363b565b5b6000613baa8582860161370d565b9250506020613bbb85828601613b43565b9150509250929050565b6000819050919050565b6000613bea613be5613be0846136c4565b613bc5565b6136c4565b9050919050565b6000613bfc82613bcf565b9050919050565b6000613c0e82613bf1565b9050919050565b613c1e81613c03565b82525050565b6000602082019050613c396000830184613c15565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8657607f821691505b60208210811415613c9a57613c99613c3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cd6602083613581565b9150613ce182613ca0565b602082019050919050565b60006020820190508181036000830152613d0581613cc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4682613542565b9150613d5183613542565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8657613d85613d0c565b5b828201905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ded602883613581565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b6000613e2e82613542565b9150613e3983613542565b925082821015613e4c57613e4b613d0c565b5b828203905092915050565b6000613e6282613542565b9150613e6d83613542565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ea657613ea5613d0c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eeb82613542565b9150613ef683613542565b925082613f0657613f05613eb1565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613f4b82613542565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7e57613f7d613d0c565b5b600182019050919050565b7f54726164696e6720616c72656164792061637469766500000000000000000000600082015250565b6000613fbf601683613581565b9150613fca82613f89565b602082019050919050565b60006020820190508181036000830152613fee81613fb2565b9050919050565b600060408201905061400a6000830185613798565b614017602083018461354c565b9392505050565b60008151905061402d81613b2c565b92915050565b6000602082840312156140495761404861363b565b5b60006140578482850161401e565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140bc602583613581565b91506140c782614060565b604082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061414e602683613581565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141e0602483613581565b91506141eb82614184565b604082019050919050565b6000602082019050818103600083015261420f816141d3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614272602283613581565b915061427d82614216565b604082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614304602983613581565b915061430f826142a8565b604082019050919050565b60006020820190508181036000830152614333816142f7565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e7300000000000000600082015250565b6000614370601983613581565b915061437b8261433a565b602082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b7f54726164696e67206e6f74206163746976652079657400000000000000000000600082015250565b60006143dc601683613581565b91506143e7826143a6565b602082019050919050565b6000602082019050818103600083015261440b816143cf565b9050919050565b7f596f752061726520657863656564696e67206d61785478416d6f756e74000000600082015250565b6000614448601d83613581565b915061445382614412565b602082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602183613581565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b60008151905061451f816136f6565b92915050565b60006020828403121561453b5761453a61363b565b5b600061454984828501614510565b91505092915050565b6000819050919050565b600061457761457261456d84614552565b613bc5565b613542565b9050919050565b6145878161455c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145c2816136e4565b82525050565b60006145d483836145b9565b60208301905092915050565b6000602082019050919050565b60006145f88261458d565b6146028185614598565b935061460d836145a9565b8060005b8381101561463e57815161462588826145c8565b9750614630836145e0565b925050600181019050614611565b5085935050505092915050565b600060a082019050614660600083018861354c565b61466d602083018761457e565b818103604083015261467f81866145ed565b905061468e6060830185613798565b61469b608083018461354c565b9695505050505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146db601d83613581565b91506146e6826146a5565b602082019050919050565b6000602082019050818103600083015261470a816146ce565b9050919050565b600081905092915050565b50565b600061472c600083614711565b91506147378261471c565b600082019050919050565b600061474d8261471f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147b3603a83613581565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614845602583613581565b9150614850826147e9565b604082019050919050565b6000602082019050818103600083015261487481614838565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148d7602383613581565b91506148e28261487b565b604082019050919050565b60006020820190508181036000830152614906816148ca565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614969602683613581565b91506149748261490d565b604082019050919050565b600060208201905081810360008301526149988161495c565b9050919050565b600060c0820190506149b46000830189613798565b6149c1602083018861354c565b6149ce604083018761457e565b6149db606083018661457e565b6149e86080830185613798565b6149f560a083018461354c565b979650505050505050565b600081519050614a0f81613645565b92915050565b600080600060608486031215614a2e57614a2d61363b565b5b6000614a3c86828701614a00565b9350506020614a4d86828701614a00565b9250506040614a5e86828701614a00565b915050925092509256fea2646970667358221220040bda633c38c00af1f48eeeb06f78149fd5891b59c8ef28d339a44f5fee6cfc64736f6c634300080c0033

Deployed Bytecode Sourcemap

14630:9151:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14912:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3836:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20766:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6003:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4956:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15157:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15239:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15529:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6654:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22918:623;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21801:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14871:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15497:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21615:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4798:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7485:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15627:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21371:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14836:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22320:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21258:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14806:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21136:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5127:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13407:94;;;;;;;;;;;;;:::i;:::-;;15413:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;23549:168;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15075:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20317:213;;;;;;;;;;;;;:::i;:::-;;14963:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22566:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13184:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4055:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20199:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22757:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8203:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14746:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5467:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15014:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21010:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21942:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22441:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15571:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5705:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20098:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22175:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20538:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13509:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15453:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14718:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21516:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14912:44;;;;:::o;3836:100::-;3890:13;3923:5;3916:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3836:100;:::o;20766:232::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20889:41:::1;;;;;;;;20895:10;20889:41;;;;20907:10;20889:41;;;;20919:10;20889:41;;::::0;20877:9:::1;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;20980:10;20967;20954;:23;;;;:::i;:::-;:36;;;;:::i;:::-;20941:10;:49;;;;20766:232:::0;;;:::o;6003:169::-;6086:4;6103:39;6112:12;:10;:12::i;:::-;6126:7;6135:6;6103:8;:39::i;:::-;6160:4;6153:11;;6003:169;;;;:::o;4956:108::-;5017:7;5044:12;;5037:19;;4956:108;:::o;15157:75::-;;;;;;;;;;;;;:::o;15239:43::-;;;;;;;;;;;;;:::o;15529:29::-;;;;:::o;6654:422::-;6760:4;6777:36;6787:6;6795:9;6806:6;6777:9;:36::i;:::-;6826:24;6853:11;:19;6865:6;6853:19;;;;;;;;;;;;;;;:33;6873:12;:10;:12::i;:::-;6853:33;;;;;;;;;;;;;;;;6826:60;;6925:6;6905:16;:26;;6897:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6987:57;6996:6;7004:12;:10;:12::i;:::-;7037:6;7018:16;:25;;;;:::i;:::-;6987:8;:57::i;:::-;7064:4;7057:11;;;6654:422;;;;;:::o;22918:623::-;23055:15;;;;;;;;;;;23041:29;;:10;:29;;;23032:39;;;;;;23082:19;23104:21;23082:43;;23136:24;23153:6;23136:16;:24::i;:::-;23171:18;23216:11;23192:21;:35;;;;:::i;:::-;23171:56;;23263:1;23241:19;:23;23238:142;;;23266:114;23359:19;23337;:41;;;;:::i;:::-;23314:19;23301:10;:32;;;;:::i;:::-;:78;;;;:::i;:::-;23274:15;;;;;;;;;;;23266:34;;;;:114;;;;:::i;:::-;23238:142;23416:1;23394:19;:23;23391:142;;;23419:114;23512:19;23490;:41;;;;:::i;:::-;23467:19;23454:10;:32;;;;:::i;:::-;:78;;;;:::i;:::-;23427:15;;;;;;;;;;;23419:34;;;;:114;;;;:::i;:::-;23391:142;23021:520;;22918:623;;;:::o;21801:133::-;21877:15;;;;;;;;;;;21863:29;;:10;:29;;;21854:39;;;;;;21921:5;21904;:14;21910:7;21904:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;21801:133;:::o;14871:28::-;;;;:::o;15497:25::-;;;;:::o;21615:174::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21696:6:::1;21691:91;21712:6;:13;21708:1;:17;21691:91;;;21766:4;21747:5;:16;21753:6;21760:1;21753:9;;;;;;;;:::i;:::-;;;;;;;;21747:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;21727:3;;;;;:::i;:::-;;;;21691:91;;;;21615:174:::0;:::o;4798:93::-;4856:5;4881:2;4874:9;;4798:93;:::o;7485:215::-;7573:4;7590:80;7599:12;:10;:12::i;:::-;7613:7;7659:10;7622:11;:25;7634:12;:10;:12::i;:::-;7622:25;;;;;;;;;;;;;;;:34;7648:7;7622:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7590:8;:80::i;:::-;7688:4;7681:11;;7485:215;;;;:::o;15627:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;21371:137::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21470:7:::1;21461:6;;:16;;;;;;;;;;;;;;;;;;21495:5;21488:4;;:12;;;;;;;;;;;;;;;;;;21371:137:::0;;:::o;14836:26::-;;;;;;;;;;;;;:::o;22320:109::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22415:6:::1;22406;:15;;;;:::i;:::-;22392:11;:29;;;;22320:109:::0;:::o;21258:105::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21346:9:::1;21333:10;;:22;;;;;;;;;;;;;;;;;;21258:105:::0;:::o;14806:23::-;;;;;;;;;;;;;:::o;21136:114::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21233:9:::1;21215:15;;:27;;;;;;;;;;;;;;;;;;21136:114:::0;:::o;5127:127::-;5201:7;5228:9;:18;5238:7;5228:18;;;;;;;;;;;;;;;;5221:25;;5127:127;;;:::o;13407:94::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13472:21:::1;13490:1;13472:9;:21::i;:::-;13407:94::o:0;15413:33::-;;;;;;;;;;;;;;;;;;;:::o;23549:168::-;23601:4;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23632:13:::1;:11;:13::i;:::-;23618:11;:27;;;;23674:13;:11;:13::i;:::-;23656:15;:31;;;;23705:4;23698:11;;23549:168:::0;:::o;15075:75::-;;;;;;;;;;;;;:::o;20317:213::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20381:14:::1;;;;;;;;;;;20380:15;20372:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20450:4;20433:14;;:21;;;;;;;;;;;;;;;;;;20479:4;20465:11;;:18;;;;;;;;;;;;;;;;;;20510:12;20494:13;:28;;;;20317:213::o:0;14963:44::-;;;;:::o;22566:183::-;22668:15;;;;;;;;;;;22654:29;;:10;:29;;;22645:39;;;;;;22702:12;22695:29;;;22725:7;:5;:7::i;:::-;22734:6;22695:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22566:183;;:::o;13184:87::-;13230:7;13257:6;;;;;;;;;;;13250:13;;13184:87;:::o;4055:104::-;4111:13;4144:7;4137:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4055:104;:::o;20199:110::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20291:10:::1;20275:13;:26;;;;20199:110:::0;:::o;22757:153::-;22838:15;;;;;;;;;;;22824:29;;:10;:29;;;22815:39;;;;;;22865:37;22892:9;22873:7;:5;:7::i;:::-;22865:26;;;;:37;;;;:::i;:::-;22757:153;:::o;8203:377::-;8296:4;8313:24;8340:11;:25;8352:12;:10;:12::i;:::-;8340:25;;;;;;;;;;;;;;;:34;8366:7;8340:34;;;;;;;;;;;;;;;;8313:61;;8413:15;8393:16;:35;;8385:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8481:67;8490:12;:10;:12::i;:::-;8504:7;8532:15;8513:16;:34;;;;:::i;:::-;8481:8;:67::i;:::-;8568:4;8561:11;;;8203:377;;;;:::o;14746:19::-;;;;;;;;;;;;;:::o;5467:175::-;5553:4;5570:42;5580:12;:10;:12::i;:::-;5594:9;5605:6;5570:9;:42::i;:::-;5630:4;5623:11;;5467:175;;;;:::o;15014:48::-;;;;:::o;21010:114::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21107:9:::1;21089:15;;:27;;;;;;;;;;;;;;;;;;21010:114:::0;:::o;21942:225::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22041:15:::1;;;;;;;;;;;22027:29;;:10;:29;;;22018:39;;;::::0;::::1;;22073:6;22068:92;22089:6;:13;22085:1;:17;22068:92;;;22143:5;22124;:16;22130:6;22137:1;22130:9;;;;;;;;:::i;:::-;;;;;;;;22124:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;22104:3;;;;;:::i;:::-;;;;22068:92;;;;21942:225:::0;:::o;22441:117::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22544:6:::1;22535;:15;;;;:::i;:::-;22517;:33;;;;22441:117:::0;:::o;15571:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;5705:151::-;5794:7;5821:11;:18;5833:5;5821:18;;;;;;;;;;;;;;;:27;5840:7;5821:27;;;;;;;;;;;;;;;;5814:34;;5705:151;;;;:::o;20098:93::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20178:5:::1;20164:11;;:19;;;;;;;;;;;;;;;;;;20098:93:::0;:::o;22175:133::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22295:5:::1;22266:16;:26;22283:8;22266:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22175:133:::0;;:::o;20538:220::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20653:41:::1;;;;;;;;20659:10;20653:41;;;;20671:10;20653:41;;;;20683:10;20653:41;;::::0;20645:5:::1;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;20740:10;20727;20714;:23;;;;:::i;:::-;:36;;;;:::i;:::-;20705:6;:45;;;;20538:220:::0;;;:::o;13509:192::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13618:1:::1;13598:22;;:8;:22;;;;13590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13674:19;13684:8;13674:9;:19::i;:::-;13509:192:::0;:::o;15453:37::-;;;;;;;;;;;;;;;;;;;:::o;14718:21::-;;;;;;;;;;;;;:::o;21516:91::-;13330:12;:10;:12::i;:::-;13319:23;;:7;:5;:7::i;:::-;:23;;;13311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21595:4:::1;21578:5;:14;21584:7;21578:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;21516:91:::0;:::o;1552:98::-;1605:7;1632:10;1625:17;;1552:98;:::o;11559:346::-;11678:1;11661:19;;:5;:19;;;;11653:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11759:1;11740:21;;:7;:21;;;;11732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11843:6;11813:11;:18;11825:5;11813:18;;;;;;;;;;;;;;;:27;11832:7;11813:27;;;;;;;;;;;;;;;:36;;;;11881:7;11865:32;;11874:5;11865:32;;;11890:6;11865:32;;;;;;:::i;:::-;;;;;;;;11559:346;;;:::o;16386:1376::-;16502:1;16493:6;:10;16485:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16569:5;:13;16575:6;16569:13;;;;;;;;;;;;;;;;;;;;;;;;;16568:14;:35;;;;;16587:5;:16;16593:9;16587:16;;;;;;;;;;;;;;;;;;;;;;;;;16586:17;16568:35;16560:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16676:16;:24;16693:6;16676:24;;;;;;;;;;;;;;;;;;;;;;;;;16675:25;:57;;;;;16705:16;:27;16722:9;16705:27;;;;;;;;;;;;;;;;;;;;;;;;;16704:28;16675:57;:70;;;;;16737:8;;;;;;;;;;;16736:9;16675:70;16672:392;;;16769:14;;;;;;;;;;;16761:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;16843:11;;16833:6;:21;;16825:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16919:4;;;;;;;;;;;16906:17;;:9;:17;;;16903:150;;16984:15;;16974:6;16951:20;16961:9;16951;:20::i;:::-;:29;;;;:::i;:::-;:48;;16943:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;16903:150;16672:392;17076:11;17183:8;;;;;;;;;;;:36;;;;17195:16;:24;17212:6;17195:24;;;;;;;;;;;;;;;;;;;;;;;;;17183:36;:67;;;;17223:16;:27;17240:9;17223:27;;;;;;;;;;;;;;;;;;;;;;;;;17183:67;17179:257;;;17258:1;17252:7;;17179:257;;;17340:4;;;;;;;;;;;17327:17;;:9;:17;;;17324:100;;;17374:3;17361:10;;17352:6;:19;;;;:::i;:::-;:25;;;;:::i;:::-;17346:31;;17324:100;;;17421:3;17412:6;;17403;:15;;;;:::i;:::-;:21;;;;:::i;:::-;17397:27;;17324:100;17179:257;17557:11;;;;;;;;;;;:24;;;;;17573:8;;;;;;;;;;;17572:9;17557:24;:42;;;;;17595:4;;;;;;;;;;;17585:14;;:6;:14;;;;17557:42;:53;;;;;17609:1;17603:3;:7;17557:53;17553:72;;;17612:13;:11;:13::i;:::-;17553:72;17638:48;17654:6;17662:9;17682:3;17673:6;:12;;;;:::i;:::-;17638:15;:48::i;:::-;17706:1;17700:3;:7;17697:55;;;17709:43;17725:6;17741:4;17748:3;17709:15;:43::i;:::-;17697:55;16474:1288;16386:1376;;;:::o;19184:400::-;19250:21;19288:1;19274:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19250:40;;19319:4;19301;19306:1;19301:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19345:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19335:4;19340:1;19335:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19371:53;19388:4;19403:6;;;;;;;;;;;19412:11;19371:8;:53::i;:::-;19463:6;;;;;;;;;;;:57;;;19521:11;19534:1;19537:4;19551;19558:15;19463:111;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19239:345;19184:400;:::o;12629:317::-;12744:6;12719:21;:31;;12711:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12798:12;12816:9;:14;;12838:6;12816:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12797:52;;;12868:7;12860:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;12700:246;12629:317;;:::o;13709:173::-;13765:16;13784:6;;;;;;;;;;;13765:25;;13810:8;13801:6;;:17;;;;;;;;;;;;;;;;;;13865:8;13834:40;;13855:8;13834:40;;;;;;;;;;;;13754:128;13709:173;:::o;17770:1404::-;15712:8;;;;;;;;;;;15707:104;;15748:4;15737:8;;:15;;;;;;;;;;;;;;;;;;17819:23:::1;17845:24;17863:4;17845:9;:24::i;:::-;17819:50;;17903:13;;17884:15;:32;17880:1287;;17990:19;18025:1;18012:10;;:14;;;;:::i;:::-;17990:36;;18041:32;18116:11;18094:9;:19;;;18076:15;:37;;;;:::i;:::-;:51;;;;:::i;:::-;18041:86;;18142:14;18177:24;18159:15;:42;;;;:::i;:::-;18142:59;;18222:22;18247:21;18222:46;;18289:24;18306:6;18289:16;:24::i;:::-;18334:20;18381:14;18357:21;:38;;;;:::i;:::-;18334:61;;18410:19;18461:9;:19;;;18447:11;:33;;;;:::i;:::-;18431:12;:50;;;;:::i;:::-;18410:71;;18496:29;18542:9;:19;;;18528:11;:33;;;;:::i;:::-;18496:65;;18609:1;18585:21;:25;18582:170;;;18675:61;18688:24;18714:21;18675:12;:61::i;:::-;18582:170;18772:20;18813:9;:19;;;18809:1;18795:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;18772:60;;18865:1;18850:12;:16;18847:103;;;18886:48;18921:12;18894:15;;;;;;;;;;;18886:34;;;;:48;;;;:::i;:::-;18847:103;18978:20;19019:9;:19;;;19015:1;19001:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;18978:60;;19071:1;19056:12;:16;19053:103;;;19092:48;19127:12;19100:15;;;;;;;;;;;19092:34;;;;:48;;;;:::i;:::-;19053:103;17918:1249;;;;;;;;;17880:1287;17808:1366;15794:5:::0;15783:8;;:16;;;;;;;;;;;;;;;;;;15707:104;17770:1404::o;9070:604::-;9194:1;9176:20;;:6;:20;;;;9168:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9278:1;9257:23;;:9;:23;;;;9249:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9333:47;9354:6;9362:9;9373:6;9333:20;:47::i;:::-;9393:21;9417:9;:17;9427:6;9417:17;;;;;;;;;;;;;;;;9393:41;;9470:6;9453:13;:23;;9445:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9566:6;9550:13;:22;;;;:::i;:::-;9530:9;:17;9540:6;9530:17;;;;;;;;;;;;;;;:42;;;;9607:6;9583:9;:20;9593:9;9583:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9648:9;9631:35;;9640:6;9631:35;;;9659:6;9631:35;;;;;;:::i;:::-;;;;;;;;9157:517;9070:604;;;:::o;19592:498::-;19740:53;19757:4;19772:6;;;;;;;;;;;19781:11;19740:8;:53::i;:::-;19836:6;;;;;;;;;;;:22;;;19866:9;19899:4;19919:11;19945:1;19988;20031:10;;;;;;;;;;;20056:15;19836:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19592:498;;:::o;12508:92::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:122;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:619::-;2509:6;2517;2525;2574:2;2562:9;2553:7;2549:23;2545:32;2542:119;;;2580:79;;:::i;:::-;2542:119;2700:1;2725:53;2770:7;2761:6;2750:9;2746:22;2725:53;:::i;:::-;2715:63;;2671:117;2827:2;2853:53;2898:7;2889:6;2878:9;2874:22;2853:53;:::i;:::-;2843:63;;2798:118;2955:2;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2926:118;2432:619;;;;;:::o;3057:126::-;3094:7;3134:42;3127:5;3123:54;3112:65;;3057:126;;;:::o;3189:96::-;3226:7;3255:24;3273:5;3255:24;:::i;:::-;3244:35;;3189:96;;;:::o;3291:122::-;3364:24;3382:5;3364:24;:::i;:::-;3357:5;3354:35;3344:63;;3403:1;3400;3393:12;3344:63;3291:122;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:474::-;3632:6;3640;3689:2;3677:9;3668:7;3664:23;3660:32;3657:119;;;3695:79;;:::i;:::-;3657:119;3815:1;3840:53;3885:7;3876:6;3865:9;3861:22;3840:53;:::i;:::-;3830:63;;3786:117;3942:2;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3913:118;3564:474;;;;;:::o;4044:90::-;4078:7;4121:5;4114:13;4107:21;4096:32;;4044:90;;;:::o;4140:109::-;4221:21;4236:5;4221:21;:::i;:::-;4216:3;4209:34;4140:109;;:::o;4255:210::-;4342:4;4380:2;4369:9;4365:18;4357:26;;4393:65;4455:1;4444:9;4440:17;4431:6;4393:65;:::i;:::-;4255:210;;;;:::o;4471:118::-;4558:24;4576:5;4558:24;:::i;:::-;4553:3;4546:37;4471:118;;:::o;4595:222::-;4688:4;4726:2;4715:9;4711:18;4703:26;;4739:71;4807:1;4796:9;4792:17;4783:6;4739:71;:::i;:::-;4595:222;;;;:::o;4823:619::-;4900:6;4908;4916;4965:2;4953:9;4944:7;4940:23;4936:32;4933:119;;;4971:79;;:::i;:::-;4933:119;5091:1;5116:53;5161:7;5152:6;5141:9;5137:22;5116:53;:::i;:::-;5106:63;;5062:117;5218:2;5244:53;5289:7;5280:6;5269:9;5265:22;5244:53;:::i;:::-;5234:63;;5189:118;5346:2;5372:53;5417:7;5408:6;5397:9;5393:22;5372:53;:::i;:::-;5362:63;;5317:118;4823:619;;;;;:::o;5448:329::-;5507:6;5556:2;5544:9;5535:7;5531:23;5527:32;5524:119;;;5562:79;;:::i;:::-;5524:119;5682:1;5707:53;5752:7;5743:6;5732:9;5728:22;5707:53;:::i;:::-;5697:63;;5653:117;5448:329;;;;:::o;5783:117::-;5892:1;5889;5882:12;5906:180;5954:77;5951:1;5944:88;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6092:281;6175:27;6197:4;6175:27;:::i;:::-;6167:6;6163:40;6305:6;6293:10;6290:22;6269:18;6257:10;6254:34;6251:62;6248:88;;;6316:18;;:::i;:::-;6248:88;6356:10;6352:2;6345:22;6135:238;6092:281;;:::o;6379:129::-;6413:6;6440:20;;:::i;:::-;6430:30;;6469:33;6497:4;6489:6;6469:33;:::i;:::-;6379:129;;;:::o;6514:311::-;6591:4;6681:18;6673:6;6670:30;6667:56;;;6703:18;;:::i;:::-;6667:56;6753:4;6745:6;6741:17;6733:25;;6813:4;6807;6803:15;6795:23;;6514:311;;;:::o;6831:117::-;6940:1;6937;6930:12;6971:710;7067:5;7092:81;7108:64;7165:6;7108:64;:::i;:::-;7092:81;:::i;:::-;7083:90;;7193:5;7222:6;7215:5;7208:21;7256:4;7249:5;7245:16;7238:23;;7309:4;7301:6;7297:17;7289:6;7285:30;7338:3;7330:6;7327:15;7324:122;;;7357:79;;:::i;:::-;7324:122;7472:6;7455:220;7489:6;7484:3;7481:15;7455:220;;;7564:3;7593:37;7626:3;7614:10;7593:37;:::i;:::-;7588:3;7581:50;7660:4;7655:3;7651:14;7644:21;;7531:144;7515:4;7510:3;7506:14;7499:21;;7455:220;;;7459:21;7073:608;;6971:710;;;;;:::o;7704:370::-;7775:5;7824:3;7817:4;7809:6;7805:17;7801:27;7791:122;;7832:79;;:::i;:::-;7791:122;7949:6;7936:20;7974:94;8064:3;8056:6;8049:4;8041:6;8037:17;7974:94;:::i;:::-;7965:103;;7781:293;7704:370;;;;:::o;8080:539::-;8164:6;8213:2;8201:9;8192:7;8188:23;8184:32;8181:119;;;8219:79;;:::i;:::-;8181:119;8367:1;8356:9;8352:17;8339:31;8397:18;8389:6;8386:30;8383:117;;;8419:79;;:::i;:::-;8383:117;8524:78;8594:7;8585:6;8574:9;8570:22;8524:78;:::i;:::-;8514:88;;8310:302;8080:539;;;;:::o;8625:86::-;8660:7;8700:4;8693:5;8689:16;8678:27;;8625:86;;;:::o;8717:112::-;8800:22;8816:5;8800:22;:::i;:::-;8795:3;8788:35;8717:112;;:::o;8835:214::-;8924:4;8962:2;8951:9;8947:18;8939:26;;8975:67;9039:1;9028:9;9024:17;9015:6;8975:67;:::i;:::-;8835:214;;;;:::o;9055:111::-;9107:7;9136:24;9154:5;9136:24;:::i;:::-;9125:35;;9055:111;;;:::o;9172:152::-;9260:39;9293:5;9260:39;:::i;:::-;9253:5;9250:50;9240:78;;9314:1;9311;9304:12;9240:78;9172:152;:::o;9330:169::-;9391:5;9429:6;9416:20;9407:29;;9445:48;9487:5;9445:48;:::i;:::-;9330:169;;;;:::o;9505:504::-;9588:6;9596;9645:2;9633:9;9624:7;9620:23;9616:32;9613:119;;;9651:79;;:::i;:::-;9613:119;9771:1;9796:68;9856:7;9847:6;9836:9;9832:22;9796:68;:::i;:::-;9786:78;;9742:132;9913:2;9939:53;9984:7;9975:6;9964:9;9960:22;9939:53;:::i;:::-;9929:63;;9884:118;9505:504;;;;;:::o;10015:329::-;10074:6;10123:2;10111:9;10102:7;10098:23;10094:32;10091:119;;;10129:79;;:::i;:::-;10091:119;10249:1;10274:53;10319:7;10310:6;10299:9;10295:22;10274:53;:::i;:::-;10264:63;;10220:117;10015:329;;;;:::o;10350:442::-;10499:4;10537:2;10526:9;10522:18;10514:26;;10550:71;10618:1;10607:9;10603:17;10594:6;10550:71;:::i;:::-;10631:72;10699:2;10688:9;10684:18;10675:6;10631:72;:::i;:::-;10713;10781:2;10770:9;10766:18;10757:6;10713:72;:::i;:::-;10350:442;;;;;;:::o;10798:474::-;10866:6;10874;10923:2;10911:9;10902:7;10898:23;10894:32;10891:119;;;10929:79;;:::i;:::-;10891:119;11049:1;11074:53;11119:7;11110:6;11099:9;11095:22;11074:53;:::i;:::-;11064:63;;11020:117;11176:2;11202:53;11247:7;11238:6;11227:9;11223:22;11202:53;:::i;:::-;11192:63;;11147:118;10798:474;;;;;:::o;11278:116::-;11348:21;11363:5;11348:21;:::i;:::-;11341:5;11338:32;11328:60;;11384:1;11381;11374:12;11328:60;11278:116;:::o;11400:133::-;11443:5;11481:6;11468:20;11459:29;;11497:30;11521:5;11497:30;:::i;:::-;11400:133;;;;:::o;11539:323::-;11595:6;11644:2;11632:9;11623:7;11619:23;11615:32;11612:119;;;11650:79;;:::i;:::-;11612:119;11770:1;11795:50;11837:7;11828:6;11817:9;11813:22;11795:50;:::i;:::-;11785:60;;11741:114;11539:323;;;;:::o;11868:468::-;11933:6;11941;11990:2;11978:9;11969:7;11965:23;11961:32;11958:119;;;11996:79;;:::i;:::-;11958:119;12116:1;12141:53;12186:7;12177:6;12166:9;12162:22;12141:53;:::i;:::-;12131:63;;12087:117;12243:2;12269:50;12311:7;12302:6;12291:9;12287:22;12269:50;:::i;:::-;12259:60;;12214:115;11868:468;;;;;:::o;12342:60::-;12370:3;12391:5;12384:12;;12342:60;;;:::o;12408:142::-;12458:9;12491:53;12509:34;12518:24;12536:5;12518:24;:::i;:::-;12509:34;:::i;:::-;12491:53;:::i;:::-;12478:66;;12408:142;;;:::o;12556:126::-;12606:9;12639:37;12670:5;12639:37;:::i;:::-;12626:50;;12556:126;;;:::o;12688:141::-;12753:9;12786:37;12817:5;12786:37;:::i;:::-;12773:50;;12688:141;;;:::o;12835:161::-;12937:52;12983:5;12937:52;:::i;:::-;12932:3;12925:65;12835:161;;:::o;13002:252::-;13110:4;13148:2;13137:9;13133:18;13125:26;;13161:86;13244:1;13233:9;13229:17;13220:6;13161:86;:::i;:::-;13002:252;;;;:::o;13260:180::-;13308:77;13305:1;13298:88;13405:4;13402:1;13395:15;13429:4;13426:1;13419:15;13446:320;13490:6;13527:1;13521:4;13517:12;13507:22;;13574:1;13568:4;13564:12;13595:18;13585:81;;13651:4;13643:6;13639:17;13629:27;;13585:81;13713:2;13705:6;13702:14;13682:18;13679:38;13676:84;;;13732:18;;:::i;:::-;13676:84;13497:269;13446:320;;;:::o;13772:182::-;13912:34;13908:1;13900:6;13896:14;13889:58;13772:182;:::o;13960:366::-;14102:3;14123:67;14187:2;14182:3;14123:67;:::i;:::-;14116:74;;14199:93;14288:3;14199:93;:::i;:::-;14317:2;14312:3;14308:12;14301:19;;13960:366;;;:::o;14332:419::-;14498:4;14536:2;14525:9;14521:18;14513:26;;14585:9;14579:4;14575:20;14571:1;14560:9;14556:17;14549:47;14613:131;14739:4;14613:131;:::i;:::-;14605:139;;14332:419;;;:::o;14757:180::-;14805:77;14802:1;14795:88;14902:4;14899:1;14892:15;14926:4;14923:1;14916:15;14943:305;14983:3;15002:20;15020:1;15002:20;:::i;:::-;14997:25;;15036:20;15054:1;15036:20;:::i;:::-;15031:25;;15190:1;15122:66;15118:74;15115:1;15112:81;15109:107;;;15196:18;;:::i;:::-;15109:107;15240:1;15237;15233:9;15226:16;;14943:305;;;;:::o;15254:227::-;15394:34;15390:1;15382:6;15378:14;15371:58;15463:10;15458:2;15450:6;15446:15;15439:35;15254:227;:::o;15487:366::-;15629:3;15650:67;15714:2;15709:3;15650:67;:::i;:::-;15643:74;;15726:93;15815:3;15726:93;:::i;:::-;15844:2;15839:3;15835:12;15828:19;;15487:366;;;:::o;15859:419::-;16025:4;16063:2;16052:9;16048:18;16040:26;;16112:9;16106:4;16102:20;16098:1;16087:9;16083:17;16076:47;16140:131;16266:4;16140:131;:::i;:::-;16132:139;;15859:419;;;:::o;16284:191::-;16324:4;16344:20;16362:1;16344:20;:::i;:::-;16339:25;;16378:20;16396:1;16378:20;:::i;:::-;16373:25;;16417:1;16414;16411:8;16408:34;;;16422:18;;:::i;:::-;16408:34;16467:1;16464;16460:9;16452:17;;16284:191;;;;:::o;16481:348::-;16521:7;16544:20;16562:1;16544:20;:::i;:::-;16539:25;;16578:20;16596:1;16578:20;:::i;:::-;16573:25;;16766:1;16698:66;16694:74;16691:1;16688:81;16683:1;16676:9;16669:17;16665:105;16662:131;;;16773:18;;:::i;:::-;16662:131;16821:1;16818;16814:9;16803:20;;16481:348;;;;:::o;16835:180::-;16883:77;16880:1;16873:88;16980:4;16977:1;16970:15;17004:4;17001:1;16994:15;17021:185;17061:1;17078:20;17096:1;17078:20;:::i;:::-;17073:25;;17112:20;17130:1;17112:20;:::i;:::-;17107:25;;17151:1;17141:35;;17156:18;;:::i;:::-;17141:35;17198:1;17195;17191:9;17186:14;;17021:185;;;;:::o;17212:180::-;17260:77;17257:1;17250:88;17357:4;17354:1;17347:15;17381:4;17378:1;17371:15;17398:233;17437:3;17460:24;17478:5;17460:24;:::i;:::-;17451:33;;17506:66;17499:5;17496:77;17493:103;;;17576:18;;:::i;:::-;17493:103;17623:1;17616:5;17612:13;17605:20;;17398:233;;;:::o;17637:172::-;17777:24;17773:1;17765:6;17761:14;17754:48;17637:172;:::o;17815:366::-;17957:3;17978:67;18042:2;18037:3;17978:67;:::i;:::-;17971:74;;18054:93;18143:3;18054:93;:::i;:::-;18172:2;18167:3;18163:12;18156:19;;17815:366;;;:::o;18187:419::-;18353:4;18391:2;18380:9;18376:18;18368:26;;18440:9;18434:4;18430:20;18426:1;18415:9;18411:17;18404:47;18468:131;18594:4;18468:131;:::i;:::-;18460:139;;18187:419;;;:::o;18612:332::-;18733:4;18771:2;18760:9;18756:18;18748:26;;18784:71;18852:1;18841:9;18837:17;18828:6;18784:71;:::i;:::-;18865:72;18933:2;18922:9;18918:18;18909:6;18865:72;:::i;:::-;18612:332;;;;;:::o;18950:137::-;19004:5;19035:6;19029:13;19020:22;;19051:30;19075:5;19051:30;:::i;:::-;18950:137;;;;:::o;19093:345::-;19160:6;19209:2;19197:9;19188:7;19184:23;19180:32;19177:119;;;19215:79;;:::i;:::-;19177:119;19335:1;19360:61;19413:7;19404:6;19393:9;19389:22;19360:61;:::i;:::-;19350:71;;19306:125;19093:345;;;;:::o;19444:224::-;19584:34;19580:1;19572:6;19568:14;19561:58;19653:7;19648:2;19640:6;19636:15;19629:32;19444:224;:::o;19674:366::-;19816:3;19837:67;19901:2;19896:3;19837:67;:::i;:::-;19830:74;;19913:93;20002:3;19913:93;:::i;:::-;20031:2;20026:3;20022:12;20015:19;;19674:366;;;:::o;20046:419::-;20212:4;20250:2;20239:9;20235:18;20227:26;;20299:9;20293:4;20289:20;20285:1;20274:9;20270:17;20263:47;20327:131;20453:4;20327:131;:::i;:::-;20319:139;;20046:419;;;:::o;20471:225::-;20611:34;20607:1;20599:6;20595:14;20588:58;20680:8;20675:2;20667:6;20663:15;20656:33;20471:225;:::o;20702:366::-;20844:3;20865:67;20929:2;20924:3;20865:67;:::i;:::-;20858:74;;20941:93;21030:3;20941:93;:::i;:::-;21059:2;21054:3;21050:12;21043:19;;20702:366;;;:::o;21074:419::-;21240:4;21278:2;21267:9;21263:18;21255:26;;21327:9;21321:4;21317:20;21313:1;21302:9;21298:17;21291:47;21355:131;21481:4;21355:131;:::i;:::-;21347:139;;21074:419;;;:::o;21499:223::-;21639:34;21635:1;21627:6;21623:14;21616:58;21708:6;21703:2;21695:6;21691:15;21684:31;21499:223;:::o;21728:366::-;21870:3;21891:67;21955:2;21950:3;21891:67;:::i;:::-;21884:74;;21967:93;22056:3;21967:93;:::i;:::-;22085:2;22080:3;22076:12;22069:19;;21728:366;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:221::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:4;22729:2;22721:6;22717:15;22710:29;22525:221;:::o;22752:366::-;22894:3;22915:67;22979:2;22974:3;22915:67;:::i;:::-;22908:74;;22991:93;23080:3;22991:93;:::i;:::-;23109:2;23104:3;23100:12;23093:19;;22752:366;;;:::o;23124:419::-;23290:4;23328:2;23317:9;23313:18;23305:26;;23377:9;23371:4;23367:20;23363:1;23352:9;23348:17;23341:47;23405:131;23531:4;23405:131;:::i;:::-;23397:139;;23124:419;;;:::o;23549:228::-;23689:34;23685:1;23677:6;23673:14;23666:58;23758:11;23753:2;23745:6;23741:15;23734:36;23549:228;:::o;23783:366::-;23925:3;23946:67;24010:2;24005:3;23946:67;:::i;:::-;23939:74;;24022:93;24111:3;24022:93;:::i;:::-;24140:2;24135:3;24131:12;24124:19;;23783:366;;;:::o;24155:419::-;24321:4;24359:2;24348:9;24344:18;24336:26;;24408:9;24402:4;24398:20;24394:1;24383:9;24379:17;24372:47;24436:131;24562:4;24436:131;:::i;:::-;24428:139;;24155:419;;;:::o;24580:175::-;24720:27;24716:1;24708:6;24704:14;24697:51;24580:175;:::o;24761:366::-;24903:3;24924:67;24988:2;24983:3;24924:67;:::i;:::-;24917:74;;25000:93;25089:3;25000:93;:::i;:::-;25118:2;25113:3;25109:12;25102:19;;24761:366;;;:::o;25133:419::-;25299:4;25337:2;25326:9;25322:18;25314:26;;25386:9;25380:4;25376:20;25372:1;25361:9;25357:17;25350:47;25414:131;25540:4;25414:131;:::i;:::-;25406:139;;25133:419;;;:::o;25558:172::-;25698:24;25694:1;25686:6;25682:14;25675:48;25558:172;:::o;25736:366::-;25878:3;25899:67;25963:2;25958:3;25899:67;:::i;:::-;25892:74;;25975:93;26064:3;25975:93;:::i;:::-;26093:2;26088:3;26084:12;26077:19;;25736:366;;;:::o;26108:419::-;26274:4;26312:2;26301:9;26297:18;26289:26;;26361:9;26355:4;26351:20;26347:1;26336:9;26332:17;26325:47;26389:131;26515:4;26389:131;:::i;:::-;26381:139;;26108:419;;;:::o;26533:179::-;26673:31;26669:1;26661:6;26657:14;26650:55;26533:179;:::o;26718:366::-;26860:3;26881:67;26945:2;26940:3;26881:67;:::i;:::-;26874:74;;26957:93;27046:3;26957:93;:::i;:::-;27075:2;27070:3;27066:12;27059:19;;26718:366;;;:::o;27090:419::-;27256:4;27294:2;27283:9;27279:18;27271:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27371:131;27497:4;27371:131;:::i;:::-;27363:139;;27090:419;;;:::o;27515:220::-;27655:34;27651:1;27643:6;27639:14;27632:58;27724:3;27719:2;27711:6;27707:15;27700:28;27515:220;:::o;27741:366::-;27883:3;27904:67;27968:2;27963:3;27904:67;:::i;:::-;27897:74;;27980:93;28069:3;27980:93;:::i;:::-;28098:2;28093:3;28089:12;28082:19;;27741:366;;;:::o;28113:419::-;28279:4;28317:2;28306:9;28302:18;28294:26;;28366:9;28360:4;28356:20;28352:1;28341:9;28337:17;28330:47;28394:131;28520:4;28394:131;:::i;:::-;28386:139;;28113:419;;;:::o;28538:143::-;28595:5;28626:6;28620:13;28611:22;;28642:33;28669:5;28642:33;:::i;:::-;28538:143;;;;:::o;28687:351::-;28757:6;28806:2;28794:9;28785:7;28781:23;28777:32;28774:119;;;28812:79;;:::i;:::-;28774:119;28932:1;28957:64;29013:7;29004:6;28993:9;28989:22;28957:64;:::i;:::-;28947:74;;28903:128;28687:351;;;;:::o;29044:85::-;29089:7;29118:5;29107:16;;29044:85;;;:::o;29135:158::-;29193:9;29226:61;29244:42;29253:32;29279:5;29253:32;:::i;:::-;29244:42;:::i;:::-;29226:61;:::i;:::-;29213:74;;29135:158;;;:::o;29299:147::-;29394:45;29433:5;29394:45;:::i;:::-;29389:3;29382:58;29299:147;;:::o;29452:114::-;29519:6;29553:5;29547:12;29537:22;;29452:114;;;:::o;29572:184::-;29671:11;29705:6;29700:3;29693:19;29745:4;29740:3;29736:14;29721:29;;29572:184;;;;:::o;29762:132::-;29829:4;29852:3;29844:11;;29882:4;29877:3;29873:14;29865:22;;29762:132;;;:::o;29900:108::-;29977:24;29995:5;29977:24;:::i;:::-;29972:3;29965:37;29900:108;;:::o;30014:179::-;30083:10;30104:46;30146:3;30138:6;30104:46;:::i;:::-;30182:4;30177:3;30173:14;30159:28;;30014:179;;;;:::o;30199:113::-;30269:4;30301;30296:3;30292:14;30284:22;;30199:113;;;:::o;30348:732::-;30467:3;30496:54;30544:5;30496:54;:::i;:::-;30566:86;30645:6;30640:3;30566:86;:::i;:::-;30559:93;;30676:56;30726:5;30676:56;:::i;:::-;30755:7;30786:1;30771:284;30796:6;30793:1;30790:13;30771:284;;;30872:6;30866:13;30899:63;30958:3;30943:13;30899:63;:::i;:::-;30892:70;;30985:60;31038:6;30985:60;:::i;:::-;30975:70;;30831:224;30818:1;30815;30811:9;30806:14;;30771:284;;;30775:14;31071:3;31064:10;;30472:608;;;30348:732;;;;:::o;31086:831::-;31349:4;31387:3;31376:9;31372:19;31364:27;;31401:71;31469:1;31458:9;31454:17;31445:6;31401:71;:::i;:::-;31482:80;31558:2;31547:9;31543:18;31534:6;31482:80;:::i;:::-;31609:9;31603:4;31599:20;31594:2;31583:9;31579:18;31572:48;31637:108;31740:4;31731:6;31637:108;:::i;:::-;31629:116;;31755:72;31823:2;31812:9;31808:18;31799:6;31755:72;:::i;:::-;31837:73;31905:3;31894:9;31890:19;31881:6;31837:73;:::i;:::-;31086:831;;;;;;;;:::o;31923:179::-;32063:31;32059:1;32051:6;32047:14;32040:55;31923:179;:::o;32108:366::-;32250:3;32271:67;32335:2;32330:3;32271:67;:::i;:::-;32264:74;;32347:93;32436:3;32347:93;:::i;:::-;32465:2;32460:3;32456:12;32449:19;;32108:366;;;:::o;32480:419::-;32646:4;32684:2;32673:9;32669:18;32661:26;;32733:9;32727:4;32723:20;32719:1;32708:9;32704:17;32697:47;32761:131;32887:4;32761:131;:::i;:::-;32753:139;;32480:419;;;:::o;32905:147::-;33006:11;33043:3;33028:18;;32905:147;;;;:::o;33058:114::-;;:::o;33178:398::-;33337:3;33358:83;33439:1;33434:3;33358:83;:::i;:::-;33351:90;;33450:93;33539:3;33450:93;:::i;:::-;33568:1;33563:3;33559:11;33552:18;;33178:398;;;:::o;33582:379::-;33766:3;33788:147;33931:3;33788:147;:::i;:::-;33781:154;;33952:3;33945:10;;33582:379;;;:::o;33967:245::-;34107:34;34103:1;34095:6;34091:14;34084:58;34176:28;34171:2;34163:6;34159:15;34152:53;33967:245;:::o;34218:366::-;34360:3;34381:67;34445:2;34440:3;34381:67;:::i;:::-;34374:74;;34457:93;34546:3;34457:93;:::i;:::-;34575:2;34570:3;34566:12;34559:19;;34218:366;;;:::o;34590:419::-;34756:4;34794:2;34783:9;34779:18;34771:26;;34843:9;34837:4;34833:20;34829:1;34818:9;34814:17;34807:47;34871:131;34997:4;34871:131;:::i;:::-;34863:139;;34590:419;;;:::o;35015:224::-;35155:34;35151:1;35143:6;35139:14;35132:58;35224:7;35219:2;35211:6;35207:15;35200:32;35015:224;:::o;35245:366::-;35387:3;35408:67;35472:2;35467:3;35408:67;:::i;:::-;35401:74;;35484:93;35573:3;35484:93;:::i;:::-;35602:2;35597:3;35593:12;35586:19;;35245:366;;;:::o;35617:419::-;35783:4;35821:2;35810:9;35806:18;35798:26;;35870:9;35864:4;35860:20;35856:1;35845:9;35841:17;35834:47;35898:131;36024:4;35898:131;:::i;:::-;35890:139;;35617:419;;;:::o;36042:222::-;36182:34;36178:1;36170:6;36166:14;36159:58;36251:5;36246:2;36238:6;36234:15;36227:30;36042:222;:::o;36270:366::-;36412:3;36433:67;36497:2;36492:3;36433:67;:::i;:::-;36426:74;;36509:93;36598:3;36509:93;:::i;:::-;36627:2;36622:3;36618:12;36611:19;;36270:366;;;:::o;36642:419::-;36808:4;36846:2;36835:9;36831:18;36823:26;;36895:9;36889:4;36885:20;36881:1;36870:9;36866:17;36859:47;36923:131;37049:4;36923:131;:::i;:::-;36915:139;;36642:419;;;:::o;37067:225::-;37207:34;37203:1;37195:6;37191:14;37184:58;37276:8;37271:2;37263:6;37259:15;37252:33;37067:225;:::o;37298:366::-;37440:3;37461:67;37525:2;37520:3;37461:67;:::i;:::-;37454:74;;37537:93;37626:3;37537:93;:::i;:::-;37655:2;37650:3;37646:12;37639:19;;37298:366;;;:::o;37670:419::-;37836:4;37874:2;37863:9;37859:18;37851:26;;37923:9;37917:4;37913:20;37909:1;37898:9;37894:17;37887:47;37951:131;38077:4;37951:131;:::i;:::-;37943:139;;37670:419;;;:::o;38095:807::-;38344:4;38382:3;38371:9;38367:19;38359:27;;38396:71;38464:1;38453:9;38449:17;38440:6;38396:71;:::i;:::-;38477:72;38545:2;38534:9;38530:18;38521:6;38477:72;:::i;:::-;38559:80;38635:2;38624:9;38620:18;38611:6;38559:80;:::i;:::-;38649;38725:2;38714:9;38710:18;38701:6;38649:80;:::i;:::-;38739:73;38807:3;38796:9;38792:19;38783:6;38739:73;:::i;:::-;38822;38890:3;38879:9;38875:19;38866:6;38822:73;:::i;:::-;38095:807;;;;;;;;;:::o;38908:143::-;38965:5;38996:6;38990:13;38981:22;;39012:33;39039:5;39012:33;:::i;:::-;38908:143;;;;:::o;39057:663::-;39145:6;39153;39161;39210:2;39198:9;39189:7;39185:23;39181:32;39178:119;;;39216:79;;:::i;:::-;39178:119;39336:1;39361:64;39417:7;39408:6;39397:9;39393:22;39361:64;:::i;:::-;39351:74;;39307:128;39474:2;39500:64;39556:7;39547:6;39536:9;39532:22;39500:64;:::i;:::-;39490:74;;39445:129;39613:2;39639:64;39695:7;39686:6;39675:9;39671:22;39639:64;:::i;:::-;39629:74;;39584:129;39057:663;;;;;:::o

Swarm Source

ipfs://040bda633c38c00af1f48eeeb06f78149fd5891b59c8ef28d339a44f5fee6cfc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.