ETH Price: $3,110.70 (-0.31%)

Contract

0xa55f15492f0C44da249b5208019C6a9948325531
 

Overview

ETH Balance

0.001762139702217545 ETH

Eth Value

$5.48 (@ $3,110.70/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve200294402024-06-06 1:14:35167 days ago1717636475IN
0xa55f1549...948325531
0 ETH0.0009267819.6216011
Approve200294392024-06-06 1:14:23167 days ago1717636463IN
0xa55f1549...948325531
0 ETH0.0026926757.00841401
Approve200294382024-06-06 1:14:11167 days ago1717636451IN
0xa55f1549...948325531
0 ETH0.000998121.13143543
Approve200294372024-06-06 1:13:59167 days ago1717636439IN
0xa55f1549...948325531
0 ETH0.0010271221.74582075
Approve200294282024-06-06 1:12:11167 days ago1717636331IN
0xa55f1549...948325531
0 ETH0.0027513458.25054981
Approve200124622024-06-03 16:22:59169 days ago1717431779IN
0xa55f1549...948325531
0 ETH0.000468918.83970078
Approve199479762024-05-25 16:06:47178 days ago1716653207IN
0xa55f1549...948325531
0 ETH0.000143945.76944022
Transfer198551062024-05-12 16:23:47191 days ago1715531027IN
0xa55f1549...948325531
0 ETH0.000232874.30842793
Transfer198533532024-05-12 10:30:11191 days ago1715509811IN
0xa55f1549...948325531
0 ETH0.000197633.65647263
Transfer198414192024-05-10 18:26:47193 days ago1715365607IN
0xa55f1549...948325531
0 ETH0.0007846111.02947952
Transfer193431622024-03-01 21:57:59263 days ago1709330279IN
0xa55f1549...948325531
0 ETH0.0034993460.12823632
Transfer193372942024-03-01 2:18:47264 days ago1709259527IN
0xa55f1549...948325531
0 ETH0.002874145.47496543
Transfer193337242024-02-29 14:19:59264 days ago1709216399IN
0xa55f1549...948325531
0 ETH0.0033442981.45099979
Approve191077482024-01-28 21:35:11296 days ago1706477711IN
0xa55f1549...948325531
0 ETH0.0005385811.4171702
Approve188044472023-12-17 8:04:59338 days ago1702800299IN
0xa55f1549...948325531
0 ETH0.0012866527.27531068
Approve185908182023-11-17 9:51:11368 days ago1700214671IN
0xa55f1549...948325531
0 ETH0.0013855329.33400438
Approve185908012023-11-17 9:47:47368 days ago1700214467IN
0xa55f1549...948325531
0 ETH0.0013371228.30902907
Approve185907592023-11-17 9:39:23368 days ago1700213963IN
0xa55f1549...948325531
0 ETH0.0016645135.24041236
Approve184579612023-10-29 19:36:35387 days ago1698608195IN
0xa55f1549...948325531
0 ETH0.000606812.86340334
Approve184295502023-10-25 20:12:35391 days ago1698264755IN
0xa55f1549...948325531
0 ETH0.0019538141.65116857
Approve183319222023-10-12 4:22:47405 days ago1697084567IN
0xa55f1549...948325531
0 ETH0.000255615.4187072
Approve181600802023-09-18 3:10:47429 days ago1695006647IN
0xa55f1549...948325531
0 ETH0.000357287.61647898
Approve181513012023-09-16 21:17:11430 days ago1694899031IN
0xa55f1549...948325531
0 ETH0.000401018.54868981
Rescue ERC20179774412023-08-23 12:34:59454 days ago1692794099IN
0xa55f1549...948325531
0 ETH0.0004199616.87424832
Rescue ERC20179774402023-08-23 12:34:47454 days ago1692794087IN
0xa55f1549...948325531
0 ETH0.0004233117.00899208
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
200294612024-06-06 1:18:47167 days ago1717636727
0xa55f1549...948325531
0.000287 ETH
200294612024-06-06 1:18:47167 days ago1717636727
0xa55f1549...948325531
0.000287 ETH
200294592024-06-06 1:18:23167 days ago1717636703
0xa55f1549...948325531
0.00032137 ETH
200294592024-06-06 1:18:23167 days ago1717636703
0xa55f1549...948325531
0.00032137 ETH
200294572024-06-06 1:17:59167 days ago1717636679
0xa55f1549...948325531
0.00044366 ETH
200294572024-06-06 1:17:59167 days ago1717636679
0xa55f1549...948325531
0.00044366 ETH
200294562024-06-06 1:17:47167 days ago1717636667
0xa55f1549...948325531
0.00049638 ETH
200294562024-06-06 1:17:47167 days ago1717636667
0xa55f1549...948325531
0.00049638 ETH
200294412024-06-06 1:14:47167 days ago1717636487
0xa55f1549...948325531
0.00202404 ETH
200294412024-06-06 1:14:47167 days ago1717636487
0xa55f1549...948325531
0.00202404 ETH
188075402023-12-17 18:32:11338 days ago1702837931
0xa55f1549...948325531
0.00347164 ETH
188075402023-12-17 18:32:11338 days ago1702837931
0xa55f1549...948325531
0.00347164 ETH
185908202023-11-17 9:51:35368 days ago1700214695
0xa55f1549...948325531
0.00322492 ETH
185908202023-11-17 9:51:35368 days ago1700214695
0xa55f1549...948325531
0.00322492 ETH
183319272023-10-12 4:23:47405 days ago1697084627
0xa55f1549...948325531
0.00349924 ETH
183319272023-10-12 4:23:47405 days ago1697084627
0xa55f1549...948325531
0.00349924 ETH
181720842023-09-19 19:36:59427 days ago1695152219
0xa55f1549...948325531
0.00359107 ETH
181720842023-09-19 19:36:59427 days ago1695152219
0xa55f1549...948325531
0.00359107 ETH
181513172023-09-16 21:20:23430 days ago1694899223
0xa55f1549...948325531
0.00363739 ETH
181513172023-09-16 21:20:23430 days ago1694899223
0xa55f1549...948325531
0.00363739 ETH
180116962023-08-28 7:36:59449 days ago1693208219
0xa55f1549...948325531
0.00373942 ETH
180116962023-08-28 7:36:59449 days ago1693208219
0xa55f1549...948325531
0.00373942 ETH
173618402023-05-29 3:00:47541 days ago1685329247
0xa55f1549...948325531
0.00435451 ETH
173618402023-05-29 3:00:47541 days ago1685329247
0xa55f1549...948325531
0.00435451 ETH
173618132023-05-29 2:55:23541 days ago1685328923
0xa55f1549...948325531
0.00576277 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FliedLice

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-13
*/

/*
    This is the contract for launch of FLIED LICE (FLICE) token.
    website: https://flice.info
    Twitter: https://twitter.com/fliedlicetoken
    Telegram Portal: https://t.me/+XP4DLQSzso5jZGEx
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @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");

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

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _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(0xdead), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
            // _balances[address(0xdead)] += amount;
        }

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

        _afterTokenTransfer(account, address(0xdead), 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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(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,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract FliedLice is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _interlock = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;
    bool public moonShot = false;

    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 1_000_000 * 10**decimals();
    uint256 public maxBuyLimit = 10_000_000 * 10**decimals();
    uint256 public maxSellLimit = 5_000_000 * 10**decimals();
    uint256 public maxWalletLimit = 20_000_000 * 10**decimals();

    address public marketingWallet = 0x9D49f05dca16161Da643bdc6726C12d30EAb0f5b;
    address private Operator = 0x4750A590318B197D8dEE9C24CDeE5Ac84c6B1D81;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TaxesRemoved(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("FLIED LICE", "FLICE") {
        _tokengeneration(marketingWallet, 1_000_000_000 * 10**decimals());

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

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[Operator] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;

        transferOwnership(marketingWallet);
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public 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;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pancake pair path of token -> weth
        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
            deadWallet,
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount <= 10_000_000 && new_amount > 0, "Swap threshold amount should be lower or euqal to 1.5% of tokens");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }
    // Open trade can only be called once and never again
    function _openTrading() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        providingLiquidity = true;
        launchedAtBlock = block.number;

        taxes = Taxes(20, 0, 0);
        sellTaxes = Taxes(49, 0, 0);
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    function updateWallet(address _marketingWallet) external {
        require(msg.sender == Operator, "Not authorized!");
        require(_marketingWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = _marketingWallet;
    }

    function SetBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _burn
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity,  _burn);
        require((_marketing + _liquidity +  _burn) <= 20, "Must keep fees at 20% or less");
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _burn
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity,  _burn);
        require((_marketing + _liquidity + _burn) <= 49, "Must keep fees at 49% or less");
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 1_000_000, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 1_000_000, "Cannot set max sell amount lower than 0.1%");
        require(maxWallet >= 5_000_000, "Cannot set max wallet amount lower than 0.5%");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function sendToTheMoon() external onlyOwner {
        require(tradingEnabled, "Enable trading first!");
        require(!moonShot, "Already employed!");
        maxBuyLimit = totalSupply(); // Limits removed
        maxSellLimit = totalSupply(); // Limits removed
        maxWalletLimit = totalSupply(); // Limits removed

        taxes = Taxes(0, 1, 0); // Liquidity tax of 1%
        sellTaxes = Taxes(0, 1, 0); // Liquidity tax of 1%

        tokenLiquidityThreshold = totalSupply() / 1000; // 0.1% of total supply

        renounceOwnership();

        moonShot = true;

        emit LimitRemoved(maxBuyLimit, maxSellLimit, maxWalletLimit);
        emit TaxesRemoved(0, 1, 0);
    }

    function rescueETH(uint256 weiAmount) external {
        require(msg.sender == Operator, "Not authorized!");
        payable(Operator).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external {
        require(msg.sender == Operator, "Not authorized!");
        IERC20(tokenAdd).transfer(Operator, amount);
    }

    // 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":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TaxesRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"}],"name":"SetBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"}],"name":"SetSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_openTrading","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonShot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","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":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendToTheMoon","outputs":[],"stateMutability":"nonpayable","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":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff0219169083151502179055506000600760176101000a81548160ff02191690831515021790555062000080620007fe60201b60201c565b600a6200008e919062000c64565b620f42406200009e919062000cb5565b600955620000b1620007fe60201b60201c565b600a620000bf919062000c64565b62989680620000cf919062000cb5565b600a55620000e2620007fe60201b60201c565b600a620000f0919062000c64565b624c4b4062000100919062000cb5565b600b5562000113620007fe60201b60201c565b600a62000121919062000c64565b6301312d0062000132919062000cb5565b600c55739d49f05dca16161da643bdc6726c12d30eab0f5b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734750a590318b197d8dee9c24cdee5ac84c6b1d81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060008152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015550506040518060600160405280600081526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155505060405180606001604052806000815260200160008152602001600081525060156000820151816000015560208201518160010155604082015181600201555050348015620002ac57600080fd5b506040518060400160405280600a81526020017f464c494544204c494345000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f464c49434500000000000000000000000000000000000000000000000000000081525081600390816200032a919062000f70565b5080600490816200033c919062000f70565b5050506200035f620003536200080760201b60201c565b6200080f60201b60201c565b620003c1600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000396620007fe60201b60201c565b600a620003a4919062000c64565b633b9aca00620003b5919062000cb5565b620008d560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044e9190620010c1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dc9190620010c1565b6040518363ffffffff1660e01b8152600401620004fb92919062001104565b6020604051808303816000875af11580156200051b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005419190620010c1565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007f6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200098b60201b60201c565b50506200127a565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200097f919062001142565b60405180910390a35050565b6200099b6200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009c162000aa060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1190620011c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a839062001258565b60405180910390fd5b62000a9d816200080f60201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b585780860481111562000b305762000b2f62000aca565b5b600185161562000b405780820291505b808102905062000b508562000af9565b945062000b10565b94509492505050565b60008262000b73576001905062000c46565b8162000b83576000905062000c46565b816001811462000b9c576002811462000ba75762000bdd565b600191505062000c46565b60ff84111562000bbc5762000bbb62000aca565b5b8360020a91508482111562000bd65762000bd562000aca565b5b5062000c46565b5060208310610133831016604e8410600b841016171562000c175782820a90508381111562000c115762000c1062000aca565b5b62000c46565b62000c26848484600162000b06565b9250905081840481111562000c405762000c3f62000aca565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c718262000c4d565b915062000c7e8362000c57565b925062000cad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b61565b905092915050565b600062000cc28262000c4d565b915062000ccf8362000c4d565b925082820262000cdf8162000c4d565b9150828204841483151762000cf95762000cf862000aca565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d8257607f821691505b60208210810362000d985762000d9762000d3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dc3565b62000e0e868362000dc3565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000e5162000e4b62000e458462000c4d565b62000e26565b62000c4d565b9050919050565b6000819050919050565b62000e6d8362000e30565b62000e8562000e7c8262000e58565b84845462000dd0565b825550505050565b600090565b62000e9c62000e8d565b62000ea981848462000e62565b505050565b5b8181101562000ed15762000ec560008262000e92565b60018101905062000eaf565b5050565b601f82111562000f205762000eea8162000d9e565b62000ef58462000db3565b8101602085101562000f05578190505b62000f1d62000f148562000db3565b83018262000eae565b50505b505050565b600082821c905092915050565b600062000f456000198460080262000f25565b1980831691505092915050565b600062000f60838362000f32565b9150826002028217905092915050565b62000f7b8262000d00565b67ffffffffffffffff81111562000f975762000f9662000d0b565b5b62000fa3825462000d69565b62000fb082828562000ed5565b600060209050601f83116001811462000fe8576000841562000fd3578287015190505b62000fdf858262000f52565b8655506200104f565b601f19841662000ff88662000d9e565b60005b82811015620010225784890151825560018201915060208501945060208101905062000ffb565b868310156200104257848901516200103e601f89168262000f32565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001089826200105c565b9050919050565b6200109b816200107c565b8114620010a757600080fd5b50565b600081519050620010bb8162001090565b92915050565b600060208284031215620010da57620010d962001057565b5b6000620010ea84828501620010aa565b91505092915050565b620010fe816200107c565b82525050565b60006040820190506200111b6000830185620010f3565b6200112a6020830184620010f3565b9392505050565b6200113c8162000c4d565b82525050565b600060208201905062001159600083018462001131565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a86020836200115f565b9150620011b58262001170565b602082019050919050565b60006020820190508181036000830152620011db8162001199565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012406026836200115f565b91506200124d82620011e2565b604082019050919050565b60006020820190508181036000830152620012738162001231565b9050919050565b615074806200128a6000396000f3fe6080604052600436106102605760003560e01c806370a08231116101445780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146108d5578063e1b450ad14610912578063f2fde38b1461093b578063f66895a314610964578063f887ea4014610991578063fbe6324e146109bc57610267565b80639e252f00146107ca578063a457c2d7146107f3578063a8aa1b3114610830578063a9059cbb1461085b578063c5d32bb21461089857610267565b8063848b86e311610108578063848b86e3146106cc57806385141a77146106f55780638cd4426d146107205780638da5cb5b146107495780638de890bd1461077457806395d89b411461079f57610267565b806370a08231146105f7578063715018a614610634578063728f8eea1461064b57806375f0a8741461067857806379cc6790146106a357610267565b806340b28c2f116101dd5780634ada218b116101a15780634ada218b146104f55780634e736f22146105205780635331803c14610549578063652e2f041461057657806366a88d96146105a15780636aa5b37f146105cc57610267565b806340b28c2f1461042657806342966c681461044f57806342b6fa111461047857806348c34a60146104a15780634a2b3b13146104cc57610267565b806318160ddd1161022457806318160ddd1461033f5780631c1702f31461036a57806323b872dd14610381578063313ce567146103be57806339509351146103e957610267565b806306fdde031461026c578063095ea7b31461029757806310dfd37d146102d45780631340538f146102eb5780631675d8021461031457610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e7565b60405161028e9190613614565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b991906136cf565b610a79565b6040516102cb919061372a565b60405180910390f35b3480156102e057600080fd5b506102e9610a97565b005b3480156102f757600080fd5b50610312600480360381019061030d9190613771565b610d1d565b005b34801561032057600080fd5b50610329610db6565b60405161033691906137ad565b60405180910390f35b34801561034b57600080fd5b50610354610dbc565b60405161036191906137ad565b60405180910390f35b34801561037657600080fd5b5061037f610dc6565b005b34801561038d57600080fd5b506103a860048036038101906103a391906137c8565b610f53565b6040516103b5919061372a565b60405180910390f35b3480156103ca57600080fd5b506103d3611054565b6040516103e09190613837565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906136cf565b61105d565b60405161041d919061372a565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613852565b611109565b005b34801561045b57600080fd5b5061047660048036038101906104719190613892565b61120b565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613892565b61121f565b005b3480156104ad57600080fd5b506104b6611315565b6040516104c3919061372a565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee91906138bf565b611328565b005b34801561050157600080fd5b5061050a611441565b604051610517919061372a565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906138bf565b611454565b005b34801561055557600080fd5b5061055e61156d565b60405161056d93929190613912565b60405180910390f35b34801561058257600080fd5b5061058b611585565b60405161059891906137ad565b60405180910390f35b3480156105ad57600080fd5b506105b661158b565b6040516105c391906137ad565b60405180910390f35b3480156105d857600080fd5b506105e1611591565b6040516105ee91906137ad565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613949565b611597565b60405161062b91906137ad565b60405180910390f35b34801561064057600080fd5b506106496115df565b005b34801561065757600080fd5b50610660611667565b60405161066f93929190613912565b60405180910390f35b34801561068457600080fd5b5061068d61167f565b60405161069a9190613985565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906136cf565b6116a5565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613949565b6116c5565b005b34801561070157600080fd5b5061070a611808565b6040516107179190613985565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906136cf565b61180e565b005b34801561075557600080fd5b5061075e611943565b60405161076b9190613985565b60405180910390f35b34801561078057600080fd5b5061078961196d565b60405161079691906137ad565b60405180910390f35b3480156107ab57600080fd5b506107b4611973565b6040516107c19190613614565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613892565b611a05565b005b3480156107ff57600080fd5b5061081a600480360381019061081591906136cf565b611b01565b604051610827919061372a565b60405180910390f35b34801561083c57600080fd5b50610845611bf5565b6040516108529190613985565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906136cf565b611c1b565b60405161088f919061372a565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613949565b611c32565b6040516108cc919061372a565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613852565b611c52565b60405161090991906137ad565b60405180910390f35b34801561091e57600080fd5b50610939600480360381019061093491906138bf565b611cd9565b005b34801561094757600080fd5b50610962600480360381019061095d9190613949565b611e9b565b005b34801561097057600080fd5b50610979611f92565b60405161098893929190613912565b60405180910390f35b34801561099d57600080fd5b506109a6611faa565b6040516109b391906139ff565b60405180910390f35b3480156109c857600080fd5b506109d1611fd0565b6040516109de919061372a565b60405180910390f35b6060600380546109f690613a49565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613a49565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a8d610a86611fe3565b8484611feb565b6001905092915050565b610a9f611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610abd611943565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613ac6565b60405180910390fd5b600760169054906101000a900460ff16610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990613b32565b60405180910390fd5b600760179054906101000a900460ff1615610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613b9e565b60405180910390fd5b610bba610dbc565b600a81905550610bc8610dbc565b600b81905550610bd6610dbc565b600c81905550604051806060016040528060008152602001600181526020016000815250600f60008201518160000155602082015181600101556040820151816002015590505060405180606001604052806000815260200160018152602001600081525060126000820151816000015560208201518160010155604082015181600201559050506103e8610c69610dbc565b610c739190613c1c565b600981905550610c816115df565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c54604051610cd593929190613912565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b0928600060016000604051610d1393929190613cc3565b60405180910390a1565b610d25611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610d43611943565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ac6565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610dce611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610dec611943565b73ffffffffffffffffffffffffffffffffffffffff1614610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613ac6565b60405180910390fd5b600760169054906101000a900460ff1615610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613d46565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550604051806060016040528060148152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610f608484846121b4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fab611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613dd8565b60405180910390fd5b61104885611037611fe3565b85846110439190613df8565b611feb565b60019150509392505050565b60006012905090565b60006110ff61106a611fe3565b848460016000611078611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110fa9190613e2c565b611feb565b6001905092915050565b611111611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661112f611943565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90613ac6565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61121c611216611fe3565b82612a0a565b50565b611227611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611245611943565b73ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613ac6565b60405180910390fd5b6298968081111580156112ae5750600081115b6112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613ed2565b60405180910390fd5b6112f5611054565b600a6113019190614025565b8161130c9190614070565b60098190555050565b600760179054906101000a900460ff1681565b611330611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661134e611943565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613ac6565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f60008201518160000155602082015181600101556040820151816002015590505060148183856113f19190613e2c565b6113fb9190613e2c565b111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906140fe565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b61145c611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661147a611943565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613ac6565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050603181838561151d9190613e2c565b6115279190613e2c565b1115611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f9061416a565b60405180910390fd5b505050565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e7611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611605611943565b73ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613ac6565b60405180910390fd5b6116656000612bda565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116b7826116b1611fe3565b83612ca0565b6116c18282612a0a565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906141d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614268565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611895906141d6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016118fb929190614288565b6020604051808303816000875af115801561191a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193e91906142c6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b60606004805461198290613a49565b80601f01602080910402602001604051908101604052809291908181526020018280546119ae90613a49565b80156119fb5780601f106119d0576101008083540402835291602001916119fb565b820191906000526020600020905b8154815290600101906020018083116119de57829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906141d6565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611afd573d6000803e3d6000fd5b5050565b60008060016000611b10611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490614365565b60405180910390fd5b611bea611bd8611fe3565b858584611be59190613df8565b611feb565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c283384846121b4565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce1611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611cff611943565b73ffffffffffffffffffffffffffffffffffffffff1614611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613ac6565b60405180910390fd5b620f4240831015611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d92906143f7565b60405180910390fd5b620f4240821015611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890614489565b60405180910390fd5b624c4b40811015611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e9061451b565b60405180910390fd5b611e2f611054565b600a611e3b9190614025565b83611e469190614070565b600a81905550611e54611054565b600a611e609190614025565b82611e6b9190614070565b600b81905550611e79611054565b600a611e859190614025565b81611e909190614070565b600c81905550505050565b611ea3611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611943565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d906145ad565b60405180910390fd5b611f8f81612bda565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c0906146d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a791906137ad565b60405180910390a3505050565b600081116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614763565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561229b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122f057600760169054906101000a900460ff166122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906147cf565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156123975750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123b05750600760149054906101000a900460ff16155b1561245357600a548111156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061483b565b60405180910390fd5b600c548161240784611597565b6124119190613e2c565b1115612452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612449906148a7565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124fb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125515750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561256a5750600760149054906101000a900460ff16155b1561266357600b548111156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614913565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461266257600c548161261684611597565b6126209190613e2c565b1115612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906148a7565b60405180910390fd5b5b5b6000806000806000612673613563565b600760149054906101000a900460ff16806126d75750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061272b5750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561273957600093506128e0565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16036127e3576012600001546012600101546127a49190613e2c565b955085945060126002015492506012604051806060016040529081600082015481526020016001820154815260200160028201548152505090506128df565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361288d57600f60000154600f6001015461284e9190613e2c565b9550859450600f600201549250600f604051806060016040529081600082015481526020016001820154815260200160028201548152505090506128de565b6015600001546015600101546128a39190613e2c565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886128ee9190614070565b6128f89190613c1c565b9350606483886129089190614070565b6129129190613c1c565b9150600760159054906101000a900460ff16801561297e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b1561298e5761298d8682612d2c565b5b6129af8989848761299f9190613e2c565b8a6129aa9190613df8565b612ed0565b60008211156129c3576129c28983612a0a565b5b60008411156129ff5760008611156129fe576000606487896129e59190614070565b6129ef9190613c1c565b90506129fc8a3083612ed0565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a70906149a5565b60405180910390fd5b612a868261dead83613142565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0390614a37565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bc091906137ad565b60405180910390a3612bd58361dead84613147565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cac8484611c52565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d265781811015612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90614aa3565b60405180910390fd5b612d258484848403611feb565b5b50505050565b600760149054906101000a900460ff16612ecc576001600760146101000a81548160ff0219169083151502179055506000820315612eb0576000612d6f30611597565b90506009548110612eae5760016009541115612d8b5760095490505b6000600284612d9a9190614070565b9050600081846020015184612daf9190614070565b612db99190613c1c565b905060008184612dc99190613df8565b90506000479050612dd98261314c565b60008147612de79190613df8565b90506000876020015186612dfb9190613df8565b82612e069190613c1c565b90506000886020015182612e1a9190614070565b90506000811115612e3057612e2f868261338f565b5b60008960000151600284612e449190614070565b612e4e9190614070565b90506000811115612ea557612ea481600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661346f90919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3690614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa590614bc7565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b90614c59565b60405180910390fd5b81816130409190613df8565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d09190613e2c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161313491906137ad565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff81111561316957613168614c79565b5b6040519080825280602002602001820160405280156131975781602001602082028036833780820191505090505b50905030816000815181106131af576131ae614ca8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190614cec565b8160018151811061328e5761328d614ca8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132f530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611feb565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613359959493929190614dd7565b600060405180830381600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050505050565b6133bc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611feb565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161342596959493929190614e31565b60606040518083038185885af1158015613443573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134689190614ea7565b5050505050565b804710156134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a990614f46565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516134d890614f97565b60006040518083038185875af1925050503d8060008114613515576040519150601f19603f3d011682016040523d82523d6000602084013e61351a565b606091505b505090508061355e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135559061501e565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156135be5780820151818401526020810190506135a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006135e682613584565b6135f0818561358f565b93506136008185602086016135a0565b613609816135ca565b840191505092915050565b6000602082019050818103600083015261362e81846135db565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136668261363b565b9050919050565b6136768161365b565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b6000819050919050565b6136ac81613699565b81146136b757600080fd5b50565b6000813590506136c9816136a3565b92915050565b600080604083850312156136e6576136e5613636565b5b60006136f485828601613684565b9250506020613705858286016136ba565b9150509250929050565b60008115159050919050565b6137248161370f565b82525050565b600060208201905061373f600083018461371b565b92915050565b61374e8161370f565b811461375957600080fd5b50565b60008135905061376b81613745565b92915050565b60006020828403121561378757613786613636565b5b60006137958482850161375c565b91505092915050565b6137a781613699565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6000806000606084860312156137e1576137e0613636565b5b60006137ef86828701613684565b935050602061380086828701613684565b9250506040613811868287016136ba565b9150509250925092565b600060ff82169050919050565b6138318161381b565b82525050565b600060208201905061384c6000830184613828565b92915050565b6000806040838503121561386957613868613636565b5b600061387785828601613684565b925050602061388885828601613684565b9150509250929050565b6000602082840312156138a8576138a7613636565b5b60006138b6848285016136ba565b91505092915050565b6000806000606084860312156138d8576138d7613636565b5b60006138e6868287016136ba565b93505060206138f7868287016136ba565b9250506040613908868287016136ba565b9150509250925092565b6000606082019050613927600083018661379e565b613934602083018561379e565b613941604083018461379e565b949350505050565b60006020828403121561395f5761395e613636565b5b600061396d84828501613684565b91505092915050565b61397f8161365b565b82525050565b600060208201905061399a6000830184613976565b92915050565b6000819050919050565b60006139c56139c06139bb8461363b565b6139a0565b61363b565b9050919050565b60006139d7826139aa565b9050919050565b60006139e9826139cc565b9050919050565b6139f9816139de565b82525050565b6000602082019050613a1460008301846139f0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6157607f821691505b602082108103613a7457613a73613a1a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab060208361358f565b9150613abb82613a7a565b602082019050919050565b60006020820190508181036000830152613adf81613aa3565b9050919050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b6000613b1c60158361358f565b9150613b2782613ae6565b602082019050919050565b60006020820190508181036000830152613b4b81613b0f565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b6000613b8860118361358f565b9150613b9382613b52565b602082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c2782613699565b9150613c3283613699565b925082613c4257613c41613bbe565b5b828204905092915050565b6000819050919050565b6000613c72613c6d613c6884613c4d565b6139a0565b613699565b9050919050565b613c8281613c57565b82525050565b6000819050919050565b6000613cad613ca8613ca384613c88565b6139a0565b613699565b9050919050565b613cbd81613c92565b82525050565b6000606082019050613cd86000830186613c79565b613ce56020830185613cb4565b613cf26040830184613c79565b949350505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613d3060188361358f565b9150613d3b82613cfa565b602082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dc260288361358f565b9150613dcd82613d66565b604082019050919050565b60006020820190508181036000830152613df181613db5565b9050919050565b6000613e0382613699565b9150613e0e83613699565b9250828203905081811115613e2657613e25613bed565b5b92915050565b6000613e3782613699565b9150613e4283613699565b9250828201905080821115613e5a57613e59613bed565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73602082015250565b6000613ebc60408361358f565b9150613ec782613e60565b604082019050919050565b60006020820190508181036000830152613eeb81613eaf565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613f4957808604811115613f2557613f24613bed565b5b6001851615613f345780820291505b8081029050613f4285613ef2565b9450613f09565b94509492505050565b600082613f62576001905061401e565b81613f70576000905061401e565b8160018114613f865760028114613f9057613fbf565b600191505061401e565b60ff841115613fa257613fa1613bed565b5b8360020a915084821115613fb957613fb8613bed565b5b5061401e565b5060208310610133831016604e8410600b8410161715613ff45782820a905083811115613fef57613fee613bed565b5b61401e565b6140018484846001613eff565b9250905081840481111561401857614017613bed565b5b81810290505b9392505050565b600061403082613699565b915061403b8361381b565b92506140687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f52565b905092915050565b600061407b82613699565b915061408683613699565b925082820261409481613699565b915082820484148315176140ab576140aa613bed565b5b5092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006140e8601d8361358f565b91506140f3826140b2565b602082019050919050565b60006020820190508181036000830152614117816140db565b9050919050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b6000614154601d8361358f565b915061415f8261411e565b602082019050919050565b6000602082019050818103600083015261418381614147565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b60006141c0600f8361358f565b91506141cb8261418a565b602082019050919050565b600060208201905081810360008301526141ef816141b3565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061425260228361358f565b915061425d826141f6565b604082019050919050565b6000602082019050818103600083015261428181614245565b9050919050565b600060408201905061429d6000830185613976565b6142aa602083018461379e565b9392505050565b6000815190506142c081613745565b92915050565b6000602082840312156142dc576142db613636565b5b60006142ea848285016142b1565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061434f60258361358f565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006143e160298361358f565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614473602a8361358f565b915061447e82614417565b604082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b6000614505602c8361358f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061459760268361358f565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061462960248361358f565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb60228361358f565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061474d60298361358f565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006147b960138361358f565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b6000614825601d8361358f565b9150614830826147ef565b602082019050919050565b6000602082019050818103600083015261485481614818565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b600061489160208361358f565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b60006148fd601e8361358f565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061498f60218361358f565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a2160228361358f565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614a8d601d8361358f565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b1f60258361358f565b9150614b2a82614ac3565b604082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb160238361358f565b9150614bbc82614b55565b604082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c4360268361358f565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ce68161366d565b92915050565b600060208284031215614d0257614d01613636565b5b6000614d1084828501614cd7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d4e8161365b565b82525050565b6000614d608383614d45565b60208301905092915050565b6000602082019050919050565b6000614d8482614d19565b614d8e8185614d24565b9350614d9983614d35565b8060005b83811015614dca578151614db18882614d54565b9750614dbc83614d6c565b925050600181019050614d9d565b5085935050505092915050565b600060a082019050614dec600083018861379e565b614df96020830187613c79565b8181036040830152614e0b8186614d79565b9050614e1a6060830185613976565b614e27608083018461379e565b9695505050505050565b600060c082019050614e466000830189613976565b614e53602083018861379e565b614e606040830187613c79565b614e6d6060830186613c79565b614e7a6080830185613976565b614e8760a083018461379e565b979650505050505050565b600081519050614ea1816136a3565b92915050565b600080600060608486031215614ec057614ebf613636565b5b6000614ece86828701614e92565b9350506020614edf86828701614e92565b9250506040614ef086828701614e92565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614f30601d8361358f565b9150614f3b82614efa565b602082019050919050565b60006020820190508181036000830152614f5f81614f23565b9050919050565b600081905092915050565b50565b6000614f81600083614f66565b9150614f8c82614f71565b600082019050919050565b6000614fa282614f74565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615008603a8361358f565b915061501382614fac565b604082019050919050565b6000602082019050818103600083015261503781614ffb565b905091905056fea26469706673582212208d197f030aa532af498f988933b4bb2cbb20568aadcfac9b0dd9fbbfafa1c96d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a08231116101445780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146108d5578063e1b450ad14610912578063f2fde38b1461093b578063f66895a314610964578063f887ea4014610991578063fbe6324e146109bc57610267565b80639e252f00146107ca578063a457c2d7146107f3578063a8aa1b3114610830578063a9059cbb1461085b578063c5d32bb21461089857610267565b8063848b86e311610108578063848b86e3146106cc57806385141a77146106f55780638cd4426d146107205780638da5cb5b146107495780638de890bd1461077457806395d89b411461079f57610267565b806370a08231146105f7578063715018a614610634578063728f8eea1461064b57806375f0a8741461067857806379cc6790146106a357610267565b806340b28c2f116101dd5780634ada218b116101a15780634ada218b146104f55780634e736f22146105205780635331803c14610549578063652e2f041461057657806366a88d96146105a15780636aa5b37f146105cc57610267565b806340b28c2f1461042657806342966c681461044f57806342b6fa111461047857806348c34a60146104a15780634a2b3b13146104cc57610267565b806318160ddd1161022457806318160ddd1461033f5780631c1702f31461036a57806323b872dd14610381578063313ce567146103be57806339509351146103e957610267565b806306fdde031461026c578063095ea7b31461029757806310dfd37d146102d45780631340538f146102eb5780631675d8021461031457610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e7565b60405161028e9190613614565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b991906136cf565b610a79565b6040516102cb919061372a565b60405180910390f35b3480156102e057600080fd5b506102e9610a97565b005b3480156102f757600080fd5b50610312600480360381019061030d9190613771565b610d1d565b005b34801561032057600080fd5b50610329610db6565b60405161033691906137ad565b60405180910390f35b34801561034b57600080fd5b50610354610dbc565b60405161036191906137ad565b60405180910390f35b34801561037657600080fd5b5061037f610dc6565b005b34801561038d57600080fd5b506103a860048036038101906103a391906137c8565b610f53565b6040516103b5919061372a565b60405180910390f35b3480156103ca57600080fd5b506103d3611054565b6040516103e09190613837565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906136cf565b61105d565b60405161041d919061372a565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190613852565b611109565b005b34801561045b57600080fd5b5061047660048036038101906104719190613892565b61120b565b005b34801561048457600080fd5b5061049f600480360381019061049a9190613892565b61121f565b005b3480156104ad57600080fd5b506104b6611315565b6040516104c3919061372a565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee91906138bf565b611328565b005b34801561050157600080fd5b5061050a611441565b604051610517919061372a565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906138bf565b611454565b005b34801561055557600080fd5b5061055e61156d565b60405161056d93929190613912565b60405180910390f35b34801561058257600080fd5b5061058b611585565b60405161059891906137ad565b60405180910390f35b3480156105ad57600080fd5b506105b661158b565b6040516105c391906137ad565b60405180910390f35b3480156105d857600080fd5b506105e1611591565b6040516105ee91906137ad565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613949565b611597565b60405161062b91906137ad565b60405180910390f35b34801561064057600080fd5b506106496115df565b005b34801561065757600080fd5b50610660611667565b60405161066f93929190613912565b60405180910390f35b34801561068457600080fd5b5061068d61167f565b60405161069a9190613985565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906136cf565b6116a5565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613949565b6116c5565b005b34801561070157600080fd5b5061070a611808565b6040516107179190613985565b60405180910390f35b34801561072c57600080fd5b50610747600480360381019061074291906136cf565b61180e565b005b34801561075557600080fd5b5061075e611943565b60405161076b9190613985565b60405180910390f35b34801561078057600080fd5b5061078961196d565b60405161079691906137ad565b60405180910390f35b3480156107ab57600080fd5b506107b4611973565b6040516107c19190613614565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613892565b611a05565b005b3480156107ff57600080fd5b5061081a600480360381019061081591906136cf565b611b01565b604051610827919061372a565b60405180910390f35b34801561083c57600080fd5b50610845611bf5565b6040516108529190613985565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d91906136cf565b611c1b565b60405161088f919061372a565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613949565b611c32565b6040516108cc919061372a565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f79190613852565b611c52565b60405161090991906137ad565b60405180910390f35b34801561091e57600080fd5b50610939600480360381019061093491906138bf565b611cd9565b005b34801561094757600080fd5b50610962600480360381019061095d9190613949565b611e9b565b005b34801561097057600080fd5b50610979611f92565b60405161098893929190613912565b60405180910390f35b34801561099d57600080fd5b506109a6611faa565b6040516109b391906139ff565b60405180910390f35b3480156109c857600080fd5b506109d1611fd0565b6040516109de919061372a565b60405180910390f35b6060600380546109f690613a49565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613a49565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a8d610a86611fe3565b8484611feb565b6001905092915050565b610a9f611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610abd611943565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613ac6565b60405180910390fd5b600760169054906101000a900460ff16610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990613b32565b60405180910390fd5b600760179054906101000a900460ff1615610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613b9e565b60405180910390fd5b610bba610dbc565b600a81905550610bc8610dbc565b600b81905550610bd6610dbc565b600c81905550604051806060016040528060008152602001600181526020016000815250600f60008201518160000155602082015181600101556040820151816002015590505060405180606001604052806000815260200160018152602001600081525060126000820151816000015560208201518160010155604082015181600201559050506103e8610c69610dbc565b610c739190613c1c565b600981905550610c816115df565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c54604051610cd593929190613912565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b0928600060016000604051610d1393929190613cc3565b60405180910390a1565b610d25611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610d43611943565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ac6565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610dce611fe3565b73ffffffffffffffffffffffffffffffffffffffff16610dec611943565b73ffffffffffffffffffffffffffffffffffffffff1614610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613ac6565b60405180910390fd5b600760169054906101000a900460ff1615610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613d46565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550604051806060016040528060148152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610f608484846121b4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fab611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613dd8565b60405180910390fd5b61104885611037611fe3565b85846110439190613df8565b611feb565b60019150509392505050565b60006012905090565b60006110ff61106a611fe3565b848460016000611078611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110fa9190613e2c565b611feb565b6001905092915050565b611111611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661112f611943565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90613ac6565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61121c611216611fe3565b82612a0a565b50565b611227611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611245611943565b73ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613ac6565b60405180910390fd5b6298968081111580156112ae5750600081115b6112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613ed2565b60405180910390fd5b6112f5611054565b600a6113019190614025565b8161130c9190614070565b60098190555050565b600760179054906101000a900460ff1681565b611330611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661134e611943565b73ffffffffffffffffffffffffffffffffffffffff16146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139b90613ac6565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f60008201518160000155602082015181600101556040820151816002015590505060148183856113f19190613e2c565b6113fb9190613e2c565b111561143c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611433906140fe565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b61145c611fe3565b73ffffffffffffffffffffffffffffffffffffffff1661147a611943565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613ac6565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050603181838561151d9190613e2c565b6115279190613e2c565b1115611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f9061416a565b60405180910390fd5b505050565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e7611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611605611943565b73ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613ac6565b60405180910390fd5b6116656000612bda565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116b7826116b1611fe3565b83612ca0565b6116c18282612a0a565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906141d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614268565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611895906141d6565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016118fb929190614288565b6020604051808303816000875af115801561191a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193e91906142c6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b60606004805461198290613a49565b80601f01602080910402602001604051908101604052809291908181526020018280546119ae90613a49565b80156119fb5780601f106119d0576101008083540402835291602001916119fb565b820191906000526020600020905b8154815290600101906020018083116119de57829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906141d6565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611afd573d6000803e3d6000fd5b5050565b60008060016000611b10611fe3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490614365565b60405180910390fd5b611bea611bd8611fe3565b858584611be59190613df8565b611feb565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c283384846121b4565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce1611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611cff611943565b73ffffffffffffffffffffffffffffffffffffffff1614611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613ac6565b60405180910390fd5b620f4240831015611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d92906143f7565b60405180910390fd5b620f4240821015611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890614489565b60405180910390fd5b624c4b40811015611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e9061451b565b60405180910390fd5b611e2f611054565b600a611e3b9190614025565b83611e469190614070565b600a81905550611e54611054565b600a611e609190614025565b82611e6b9190614070565b600b81905550611e79611054565b600a611e859190614025565b81611e909190614070565b600c81905550505050565b611ea3611fe3565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611943565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d906145ad565b60405180910390fd5b611f8f81612bda565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c0906146d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a791906137ad565b60405180910390a3505050565b600081116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614763565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561229b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122f057600760169054906101000a900460ff166122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e6906147cf565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156123975750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123b05750600760149054906101000a900460ff16155b1561245357600a548111156123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061483b565b60405180910390fd5b600c548161240784611597565b6124119190613e2c565b1115612452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612449906148a7565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124fb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125515750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561256a5750600760149054906101000a900460ff16155b1561266357600b548111156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614913565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461266257600c548161261684611597565b6126209190613e2c565b1115612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906148a7565b60405180910390fd5b5b5b6000806000806000612673613563565b600760149054906101000a900460ff16806126d75750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061272b5750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561273957600093506128e0565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16036127e3576012600001546012600101546127a49190613e2c565b955085945060126002015492506012604051806060016040529081600082015481526020016001820154815260200160028201548152505090506128df565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361288d57600f60000154600f6001015461284e9190613e2c565b9550859450600f600201549250600f604051806060016040529081600082015481526020016001820154815260200160028201548152505090506128de565b6015600001546015600101546128a39190613e2c565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886128ee9190614070565b6128f89190613c1c565b9350606483886129089190614070565b6129129190613c1c565b9150600760159054906101000a900460ff16801561297e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b1561298e5761298d8682612d2c565b5b6129af8989848761299f9190613e2c565b8a6129aa9190613df8565b612ed0565b60008211156129c3576129c28983612a0a565b5b60008411156129ff5760008611156129fe576000606487896129e59190614070565b6129ef9190613c1c565b90506129fc8a3083612ed0565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a70906149a5565b60405180910390fd5b612a868261dead83613142565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0390614a37565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bc091906137ad565b60405180910390a3612bd58361dead84613147565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cac8484611c52565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d265781811015612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90614aa3565b60405180910390fd5b612d258484848403611feb565b5b50505050565b600760149054906101000a900460ff16612ecc576001600760146101000a81548160ff0219169083151502179055506000820315612eb0576000612d6f30611597565b90506009548110612eae5760016009541115612d8b5760095490505b6000600284612d9a9190614070565b9050600081846020015184612daf9190614070565b612db99190613c1c565b905060008184612dc99190613df8565b90506000479050612dd98261314c565b60008147612de79190613df8565b90506000876020015186612dfb9190613df8565b82612e069190613c1c565b90506000886020015182612e1a9190614070565b90506000811115612e3057612e2f868261338f565b5b60008960000151600284612e449190614070565b612e4e9190614070565b90506000811115612ea557612ea481600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661346f90919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3690614b35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa590614bc7565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302b90614c59565b60405180910390fd5b81816130409190613df8565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d09190613e2c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161313491906137ad565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff81111561316957613168614c79565b5b6040519080825280602002602001820160405280156131975781602001602082028036833780820191505090505b50905030816000815181106131af576131ae614ca8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327a9190614cec565b8160018151811061328e5761328d614ca8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132f530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611feb565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613359959493929190614dd7565b600060405180830381600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050505050565b6133bc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611feb565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161342596959493929190614e31565b60606040518083038185885af1158015613443573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134689190614ea7565b5050505050565b804710156134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a990614f46565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516134d890614f97565b60006040518083038185875af1925050503d8060008114613515576040519150601f19603f3d011682016040523d82523d6000602084013e61351a565b606091505b505090508061355e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135559061501e565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156135be5780820151818401526020810190506135a3565b60008484015250505050565b6000601f19601f8301169050919050565b60006135e682613584565b6135f0818561358f565b93506136008185602086016135a0565b613609816135ca565b840191505092915050565b6000602082019050818103600083015261362e81846135db565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136668261363b565b9050919050565b6136768161365b565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b6000819050919050565b6136ac81613699565b81146136b757600080fd5b50565b6000813590506136c9816136a3565b92915050565b600080604083850312156136e6576136e5613636565b5b60006136f485828601613684565b9250506020613705858286016136ba565b9150509250929050565b60008115159050919050565b6137248161370f565b82525050565b600060208201905061373f600083018461371b565b92915050565b61374e8161370f565b811461375957600080fd5b50565b60008135905061376b81613745565b92915050565b60006020828403121561378757613786613636565b5b60006137958482850161375c565b91505092915050565b6137a781613699565b82525050565b60006020820190506137c2600083018461379e565b92915050565b6000806000606084860312156137e1576137e0613636565b5b60006137ef86828701613684565b935050602061380086828701613684565b9250506040613811868287016136ba565b9150509250925092565b600060ff82169050919050565b6138318161381b565b82525050565b600060208201905061384c6000830184613828565b92915050565b6000806040838503121561386957613868613636565b5b600061387785828601613684565b925050602061388885828601613684565b9150509250929050565b6000602082840312156138a8576138a7613636565b5b60006138b6848285016136ba565b91505092915050565b6000806000606084860312156138d8576138d7613636565b5b60006138e6868287016136ba565b93505060206138f7868287016136ba565b9250506040613908868287016136ba565b9150509250925092565b6000606082019050613927600083018661379e565b613934602083018561379e565b613941604083018461379e565b949350505050565b60006020828403121561395f5761395e613636565b5b600061396d84828501613684565b91505092915050565b61397f8161365b565b82525050565b600060208201905061399a6000830184613976565b92915050565b6000819050919050565b60006139c56139c06139bb8461363b565b6139a0565b61363b565b9050919050565b60006139d7826139aa565b9050919050565b60006139e9826139cc565b9050919050565b6139f9816139de565b82525050565b6000602082019050613a1460008301846139f0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a6157607f821691505b602082108103613a7457613a73613a1a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab060208361358f565b9150613abb82613a7a565b602082019050919050565b60006020820190508181036000830152613adf81613aa3565b9050919050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b6000613b1c60158361358f565b9150613b2782613ae6565b602082019050919050565b60006020820190508181036000830152613b4b81613b0f565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b6000613b8860118361358f565b9150613b9382613b52565b602082019050919050565b60006020820190508181036000830152613bb781613b7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c2782613699565b9150613c3283613699565b925082613c4257613c41613bbe565b5b828204905092915050565b6000819050919050565b6000613c72613c6d613c6884613c4d565b6139a0565b613699565b9050919050565b613c8281613c57565b82525050565b6000819050919050565b6000613cad613ca8613ca384613c88565b6139a0565b613699565b9050919050565b613cbd81613c92565b82525050565b6000606082019050613cd86000830186613c79565b613ce56020830185613cb4565b613cf26040830184613c79565b949350505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613d3060188361358f565b9150613d3b82613cfa565b602082019050919050565b60006020820190508181036000830152613d5f81613d23565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dc260288361358f565b9150613dcd82613d66565b604082019050919050565b60006020820190508181036000830152613df181613db5565b9050919050565b6000613e0382613699565b9150613e0e83613699565b9250828203905081811115613e2657613e25613bed565b5b92915050565b6000613e3782613699565b9150613e4283613699565b9250828201905080821115613e5a57613e59613bed565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73602082015250565b6000613ebc60408361358f565b9150613ec782613e60565b604082019050919050565b60006020820190508181036000830152613eeb81613eaf565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613f4957808604811115613f2557613f24613bed565b5b6001851615613f345780820291505b8081029050613f4285613ef2565b9450613f09565b94509492505050565b600082613f62576001905061401e565b81613f70576000905061401e565b8160018114613f865760028114613f9057613fbf565b600191505061401e565b60ff841115613fa257613fa1613bed565b5b8360020a915084821115613fb957613fb8613bed565b5b5061401e565b5060208310610133831016604e8410600b8410161715613ff45782820a905083811115613fef57613fee613bed565b5b61401e565b6140018484846001613eff565b9250905081840481111561401857614017613bed565b5b81810290505b9392505050565b600061403082613699565b915061403b8361381b565b92506140687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f52565b905092915050565b600061407b82613699565b915061408683613699565b925082820261409481613699565b915082820484148315176140ab576140aa613bed565b5b5092915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006140e8601d8361358f565b91506140f3826140b2565b602082019050919050565b60006020820190508181036000830152614117816140db565b9050919050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b6000614154601d8361358f565b915061415f8261411e565b602082019050919050565b6000602082019050818103600083015261418381614147565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b60006141c0600f8361358f565b91506141cb8261418a565b602082019050919050565b600060208201905081810360008301526141ef816141b3565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061425260228361358f565b915061425d826141f6565b604082019050919050565b6000602082019050818103600083015261428181614245565b9050919050565b600060408201905061429d6000830185613976565b6142aa602083018461379e565b9392505050565b6000815190506142c081613745565b92915050565b6000602082840312156142dc576142db613636565b5b60006142ea848285016142b1565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061434f60258361358f565b915061435a826142f3565b604082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006143e160298361358f565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614473602a8361358f565b915061447e82614417565b604082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b6000614505602c8361358f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061459760268361358f565b91506145a28261453b565b604082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061462960248361358f565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb60228361358f565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061474d60298361358f565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006147b960138361358f565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b6000614825601d8361358f565b9150614830826147ef565b602082019050919050565b6000602082019050818103600083015261485481614818565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b600061489160208361358f565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b60006148fd601e8361358f565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061498f60218361358f565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a2160228361358f565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614a8d601d8361358f565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b1f60258361358f565b9150614b2a82614ac3565b604082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb160238361358f565b9150614bbc82614b55565b604082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c4360268361358f565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ce68161366d565b92915050565b600060208284031215614d0257614d01613636565b5b6000614d1084828501614cd7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d4e8161365b565b82525050565b6000614d608383614d45565b60208301905092915050565b6000602082019050919050565b6000614d8482614d19565b614d8e8185614d24565b9350614d9983614d35565b8060005b83811015614dca578151614db18882614d54565b9750614dbc83614d6c565b925050600181019050614d9d565b5085935050505092915050565b600060a082019050614dec600083018861379e565b614df96020830187613c79565b8181036040830152614e0b8186614d79565b9050614e1a6060830185613976565b614e27608083018461379e565b9695505050505050565b600060c082019050614e466000830189613976565b614e53602083018861379e565b614e606040830187613c79565b614e6d6060830186613c79565b614e7a6080830185613976565b614e8760a083018461379e565b979650505050505050565b600081519050614ea1816136a3565b92915050565b600080600060608486031215614ec057614ebf613636565b5b6000614ece86828701614e92565b9350506020614edf86828701614e92565b9250506040614ef086828701614e92565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614f30601d8361358f565b9150614f3b82614efa565b602082019050919050565b60006020820190508181036000830152614f5f81614f23565b9050919050565b600081905092915050565b50565b6000614f81600083614f66565b9150614f8c82614f71565b600082019050919050565b6000614fa282614f74565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615008603a8361358f565b915061501382614fac565b604082019050919050565b6000602082019050818103600083015261503781614ffb565b905091905056fea26469706673582212208d197f030aa532af498f988933b4bb2cbb20568aadcfac9b0dd9fbbfafa1c96d64736f6c63430008130033

Deployed Bytecode Sourcemap

16086:12781:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18440:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27738:704;;;;;;;;;;;;;:::i;:::-;;25354:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16443:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3704:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25886:297;;;;;;;;;;;;;:::i;:::-;;18609:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3546:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19065:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26191:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15505:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25514:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16367:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26620:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16326:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26914:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17150:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16580:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16643:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16517:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3875:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13789:94;;;;;;;;;;;;;:::i;:::-;;17062:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16711:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15915:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26354:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16866:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28622:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13566:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16404:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2803:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28450:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19321:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16215:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19739:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17202:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4494:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27212:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13891:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17104:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16187:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16281:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2584:100;2638:13;2671:5;2664:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:100;:::o;18440:161::-;18515:4;18532:39;18541:12;:10;:12::i;:::-;18555:7;18564:6;18532:8;:39::i;:::-;18589:4;18582:11;;18440:161;;;;:::o;27738:704::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27801:14:::1;;;;;;;;;;;27793:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27861:8;;;;;;;;;;;27860:9;27852:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;27916:13;:11;:13::i;:::-;27902:11;:27;;;;27973:13;:11;:13::i;:::-;27958:12;:28;;;;28032:13;:11;:13::i;:::-;28015:14;:30;;;;28084:14;;;;;;;;28090:1;28084:14;;;;28093:1;28084:14;;;;28096:1;28084:14;;::::0;28076:5:::1;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;28144:14;;;;;;;;28150:1;28144:14;;;;28153:1;28144:14;;;;28156:1;28144:14;;::::0;28132:9:::1;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;28236:4;28220:13;:11;:13::i;:::-;:20;;;;:::i;:::-;28194:23;:46;;;;28277:19;:17;:19::i;:::-;28320:4;28309:8;;:15;;;;;;;;;;;;;;;;;;28342:55;28355:11;;28368:12;;28382:14;;28342:55;;;;;;;;:::i;:::-;;;;;;;;28413:21;28426:1;28429;28432;28413:21;;;;;;;;:::i;:::-;;;;;;;;27738:704::o:0;25354:152::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25493:5:::1;25472:18;;:26;;;;;;;;;;;;;;;;;;25354:152:::0;:::o;16443:67::-;;;;:::o;3704:108::-;3765:7;3792:12;;3785:19;;3704:108;:::o;25886:297::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25949:14:::1;;;;;;;;;;;25948:15;25940:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26020:4;26003:14;;:21;;;;;;;;;;;;;;;;;;26056:4;26035:18;;:25;;;;;;;;;;;;;;;;;;26089:12;26071:15;:30;;;;26122:15;;;;;;;;26128:2;26122:15;;;;26132:1;26122:15;;;;26135:1;26122:15;;::::0;26114:5:::1;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;26160:15;;;;;;;;26166:2;26160:15;;;;26170:1;26160:15;;;;26173:1;26160:15;;::::0;26148:9:::1;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;25886:297::o:0;18609:448::-;18741:4;18758:36;18768:6;18776:9;18787:6;18758:9;:36::i;:::-;18807:24;18834:11;:19;18846:6;18834:19;;;;;;;;;;;;;;;:33;18854:12;:10;:12::i;:::-;18834:33;;;;;;;;;;;;;;;;18807:60;;18906:6;18886:16;:26;;18878:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18968:57;18977:6;18985:12;:10;:12::i;:::-;19018:6;18999:16;:25;;;;:::i;:::-;18968:8;:57::i;:::-;19045:4;19038:11;;;18609:448;;;;;:::o;3546:93::-;3604:5;3629:2;3622:9;;3546:93;:::o;19065:248::-;19181:4;19203:80;19212:12;:10;:12::i;:::-;19226:7;19272:10;19235:11;:25;19247:12;:10;:12::i;:::-;19235:25;;;;;;;;;;;;;;;:34;19261:7;19235:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19203:8;:80::i;:::-;19301:4;19294:11;;19065:248;;;;:::o;26191:155::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26303:9:::1;26286:6;;:27;;;;;;;;;;;;;;;;;;26331:7;26324:4;;:14;;;;;;;;;;;;;;;;;;26191:155:::0;;:::o;15505:91::-;15561:27;15567:12;:10;:12::i;:::-;15581:6;15561:5;:27::i;:::-;15505:91;:::o;25514:307::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25652:10:::1;25638;:24;;:42;;;;;25679:1;25666:10;:14;25638:42;25630:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;25803:10;:8;:10::i;:::-;25799:2;:14;;;;:::i;:::-;25786:10;:27;;;;:::i;:::-;25760:23;:53;;;;25514:307:::0;:::o;16367:28::-;;;;;;;;;;;;;:::o;26620:286::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26768:37:::1;;;;;;;;26774:10;26768:37;;;;26786:10;26768:37;;;;26799:5;26768:37;;::::0;26760:5:::1;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;26862:2;26852:5;26838:10;26825;:23;;;;:::i;:::-;:32;;;;:::i;:::-;26824:40;;26816:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26620:286:::0;;;:::o;16326:34::-;;;;;;;;;;;;;:::o;26914:290::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27067:37:::1;;;;;;;;27073:10;27067:37;;;;27085:10;27067:37;;;;27098:5;27067:37;;::::0;27055:9:::1;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;27160:2;27150:5;27137:10;27124;:23;;;;:::i;:::-;:31;;;;:::i;:::-;27123:39;;27115:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26914:290:::0;;;:::o;17150:43::-;;;;;;;;;;;;;;;;;;;:::o;16580:56::-;;;;:::o;16643:59::-;;;;:::o;16517:56::-;;;;:::o;3875:127::-;3949:7;3976:9;:18;3986:7;3976:18;;;;;;;;;;;;;;;;3969:25;;3875:127;;;:::o;13789:94::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13854:21:::1;13872:1;13854:9;:21::i;:::-;13789:94::o:0;17062:35::-;;;;;;;;;;;;;;;;;;;:::o;16711:75::-;;;;;;;;;;;;;:::o;15915:164::-;15992:46;16008:7;16017:12;:10;:12::i;:::-;16031:6;15992:15;:46::i;:::-;16049:22;16055:7;16064:6;16049:5;:22::i;:::-;15915:164;;:::o;26354:258::-;26444:8;;;;;;;;;;;26430:22;;:10;:22;;;26422:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26519:1;26491:30;;:16;:30;;;26483:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26588:16;26570:15;;:34;;;;;;;;;;;;;;;;;;26354:258;:::o;16866:79::-;16903:42;16866:79;:::o;28622:187::-;28719:8;;;;;;;;;;;28705:22;;:10;:22;;;28697:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28765:8;28758:25;;;28784:8;;;;;;;;;;;28794:6;28758:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28622:187;;:::o;13566:87::-;13612:7;13639:6;;;;;;;;;;;13632:13;;13566:87;:::o;16404:30::-;;;;:::o;2803:104::-;2859:13;2892:7;2885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:104;:::o;28450:164::-;28530:8;;;;;;;;;;;28516:22;;:10;:22;;;28508:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28577:8;;;;;;;;;;;28569:26;;:37;28596:9;28569:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28450:164;:::o;19321:410::-;19442:4;19464:24;19491:11;:25;19503:12;:10;:12::i;:::-;19491:25;;;;;;;;;;;;;;;:34;19517:7;19491:34;;;;;;;;;;;;;;;;19464:61;;19564:15;19544:16;:35;;19536:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19632:67;19641:12;:10;:12::i;:::-;19655:7;19683:15;19664:16;:34;;;;:::i;:::-;19632:8;:67::i;:::-;19719:4;19712:11;;;19321:410;;;;:::o;16215:19::-;;;;;;;;;;;;;:::o;19739:165::-;19817:4;19834:40;19844:10;19856:9;19867:6;19834:9;:40::i;:::-;19892:4;19885:11;;19739:165;;;;:::o;17202:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4494:201::-;4628:7;4660:11;:18;4672:5;4660:18;;;;;;;;;;;;;;;:27;4679:7;4660:27;;;;;;;;;;;;;;;;4653:34;;4494:201;;;;:::o;27212:518::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27338:9:::1;27328:6;:19;;27320:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27423:9;27412:7;:20;;27404:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27511:9;27498;:22;;27490:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27607:10;:8;:10::i;:::-;27603:2;:14;;;;:::i;:::-;27594:6;:23;;;;:::i;:::-;27580:11;:37;;;;27657:10;:8;:10::i;:::-;27653:2;:14;;;;:::i;:::-;27643:7;:24;;;;:::i;:::-;27628:12;:39;;;;27711:10;:8;:10::i;:::-;27707:2;:14;;;;:::i;:::-;27695:9;:26;;;;:::i;:::-;27678:14;:43;;;;27212:518:::0;;;:::o;13891:192::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14000:1:::1;13980:22;;:8;:22;;::::0;13972:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14056:19;14066:8;14056:9;:19::i;:::-;13891:192:::0;:::o;17104:39::-;;;;;;;;;;;;;;;;;;;:::o;16187:21::-;;;;;;;;;;;;;:::o;16281:38::-;;;;;;;;;;;;;:::o;306:98::-;359:7;386:10;379:17;;306:98;:::o;11214:380::-;11367:1;11350:19;;:5;:19;;;11342:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11448:1;11429:21;;:7;:21;;;11421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11532:6;11502:11;:18;11514:5;11502:18;;;;;;;;;;;;;;;:27;11521:7;11502:27;;;;;;;;;;;;;;;:36;;;;11570:7;11554:32;;11563:5;11554:32;;;11579:6;11554:32;;;;;;:::i;:::-;;;;;;;;11214:380;;;:::o;19912:2939::-;20062:1;20053:6;:10;20045:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20127:9;:17;20137:6;20127:17;;;;;;;;;;;;;;;;;;;;;;;;;20126:18;:43;;;;;20149:9;:20;20159:9;20149:20;;;;;;;;;;;;;;;;;;;;;;;;;20148:21;20126:43;20122:122;;;20194:14;;;;;;;;;;;20186:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;20122:122;20270:4;;;;;;;;;;;20260:14;;:6;:14;;;:39;;;;;20279:9;:20;20289:9;20279:20;;;;;;;;;;;;;;;;;;;;;;;;;20278:21;20260:39;:54;;;;;20304:10;;;;;;;;;;;20303:11;20260:54;20256:306;;;20349:11;;20339:6;:21;;20331:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20468:14;;20458:6;20435:20;20445:9;20435;:20::i;:::-;:29;;;;:::i;:::-;:47;;20409:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20256:306;20602:4;;;;;;;;;;;20592:14;;:6;:14;;;;:39;;;;;20611:9;:20;20621:9;20611:20;;;;;;;;;;;;;;;;;;;;;;;;;20610:21;20592:39;:61;;;;;20636:9;:17;20646:6;20636:17;;;;;;;;;;;;;;;;;;;;;;;;;20635:18;20592:61;:76;;;;;20658:10;;;;;;;;;;;20657:11;20592:76;20574:423;;;20713:12;;20703:6;:22;;20695:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20792:4;;;;;;;;;;;20779:17;;:9;:17;;;20775:211;;20880:14;;20870:6;20847:20;20857:9;20847;:20::i;:::-;:29;;;;:::i;:::-;:47;;20817:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;20775:211;20574:423;21009:15;21035:14;21060:11;21082:15;21108:18;21137:25;;:::i;:::-;21250:10;;;;;;;;;;;:31;;;;21264:9;:17;21274:6;21264:17;;;;;;;;;;;;;;;;;;;;;;;;;21250:31;:55;;;;21285:9;:20;21295:9;21285:20;;;;;;;;;;;;;;;;;;;;;;;;;21250:55;21246:847;;;21326:1;21320:7;;21246:847;;;21391:4;;;;;;;;;;;21378:17;;:9;:17;;;21374:719;;21478:9;:19;;;21439:9;:19;;;:58;;;;:::i;:::-;21412:85;;21521:7;21512:16;;21553:9;:14;;;21543:24;;21597:9;21582:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21374:719;;;21638:4;;;;;;;;;;;21628:14;;:6;:14;;;21624:469;;21721:5;:15;;;21686:5;:15;;;:50;;;;:::i;:::-;21659:77;;21760:7;21751:16;;21792:5;:10;;;21782:20;;21832:5;21817:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21624:469;;;21940:13;:23;;;21897:13;:23;;;:66;;;;:::i;:::-;21870:93;;21988:7;21979:16;;22020:13;:18;;;22010:28;;22068:13;22053:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21624:469;21374:719;21246:847;22131:3;22121:6;22112;:15;;;;:::i;:::-;22111:23;;;;:::i;:::-;22105:29;;22179:3;22168:7;22159:6;:16;;;;:::i;:::-;22158:24;;;;:::i;:::-;22145:37;;22296:18;;;;;;;;;;;:36;;;;;22328:4;;;;;;;;;;;22318:14;;:6;:14;;;;22296:36;22292:72;;;22334:30;22342:7;22351:12;22334:7;:30::i;:::-;22292:72;22406:63;22422:6;22430:9;22457:10;22451:3;:16;;;;:::i;:::-;22441:6;:27;;;;:::i;:::-;22406:15;:63::i;:::-;22524:1;22511:10;:14;22508:77;;;22542:31;22554:6;22562:10;22542:11;:31::i;:::-;22508:77;22605:1;22599:3;:7;22595:249;;;22681:1;22671:7;:11;22667:164;;;22703:17;22744:3;22733:7;22724:6;:16;;;;:::i;:::-;22723:24;;;;:::i;:::-;22703:44;;22766:49;22782:6;22798:4;22805:9;22766:15;:49::i;:::-;22684:147;22667:164;22595:249;20034:2817;;;;;;19912:2939;;;:::o;10032:744::-;10135:1;10116:21;;:7;:21;;;10108:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10188:54;10209:7;10226:6;10235;10188:20;:54::i;:::-;10255:22;10280:9;:18;10290:7;10280:18;;;;;;;;;;;;;;;;10255:43;;10335:6;10317:14;:24;;10309:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10454:6;10437:14;:23;10416:9;:18;10426:7;10416:18;;;;;;;;;;;;;;;:44;;;;10571:6;10555:12;;:22;;;;;;;;;;;10686:6;10660:42;;10669:7;10660:42;;;10695:6;10660:42;;;;;;:::i;:::-;;;;;;;;10715:53;10735:7;10752:6;10761;10715:19;:53::i;:::-;10097:679;10032:744;;:::o;14091:173::-;14147:16;14166:6;;;;;;;;;;;14147:25;;14192:8;14183:6;;:17;;;;;;;;;;;;;;;;;;14247:8;14216:40;;14237:8;14216:40;;;;;;;;;;;;14136:128;14091:173;:::o;5303:419::-;5404:24;5431:25;5441:5;5448:7;5431:9;:25::i;:::-;5404:52;;5491:17;5471:16;:37;5467:248;;5553:6;5533:16;:26;;5525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5637:51;5646:5;5653:7;5681:6;5662:16;:25;5637:8;:51::i;:::-;5467:248;5393:329;5303:419;;;:::o;22859:1437::-;17693:10;;;;;;;;;;;17688:110;;17733:4;17720:10;;:17;;;;;;;;;;;;;;;;;;22964:1:::1;22953:7;:12:::0;22950:49;22981:7:::1;22950:49;23011:23;23037:24;23055:4;23037:9;:24::i;:::-;23011:50;;23095:23;;23076:15;:42;23072:1217;;23165:1;23139:23;;:27;23135:109;;;23205:23;;23187:41;;23135:109;23315:19;23347:1;23337:7;:11;;;;:::i;:::-;23315:33;;23363:32;23457:11;23417:9;:19;;;23399:15;:37;;;;:::i;:::-;23398:70;;;;:::i;:::-;23363:105;;23483:14;23518:24;23500:15;:42;;;;:::i;:::-;23483:59;;23559:22;23584:21;23559:46;;23622:24;23639:6;23622:16;:24::i;:::-;23663:20;23710:14;23686:21;:38;;;;:::i;:::-;23663:61;;23739:19;23791:9;:19;;;23777:11;:33;;;;:::i;:::-;23761:12;:50;;;;:::i;:::-;23739:72;;23826:29;23872:9;:19;;;23858:11;:33;;;;:::i;:::-;23826:65;;23936:1;23912:21;:25;23908:172;;;24003:61;24016:24;24042:21;24003:12;:61::i;:::-;23908:172;24096:20;24137:9;:19;;;24133:1;24119:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;24096:60;;24190:1;24175:12;:16;24171:105;;;24212:48;24247:12;24220:15;;;;;;;;;;;24212:34;;;;:48;;;;:::i;:::-;24171:105;23120:1169;;;;;;;;23072:1217;22937:1359;17752:1;17781:5:::0;17768:10;;:18;;;;;;;;;;;;;;;;;;17688:110;22859:1437;;:::o;8718:578::-;8876:1;8858:20;;:6;:20;;;8850:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8960:1;8939:23;;:9;:23;;;8931:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9015:21;9039:9;:17;9049:6;9039:17;;;;;;;;;;;;;;;;9015:41;;9092:6;9075:13;:23;;9067:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9188:6;9172:13;:22;;;;:::i;:::-;9152:9;:17;9162:6;9152:17;;;;;;;;;;;;;;;:42;;;;9229:6;9205:9;:20;9215:9;9205:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9270:9;9253:35;;9262:6;9253:35;;;9281:6;9253:35;;;;;;:::i;:::-;;;;;;;;8839:457;8718:578;;;:::o;12194:91::-;;;;:::o;12889:90::-;;;;:::o;24304:534::-;24430:21;24468:1;24454:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24430:40;;24499:4;24481;24486:1;24481:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24525:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24515:4;24520:1;24515:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24551:53;24568:4;24583:6;;;;;;;;;;;24592:11;24551:8;:53::i;:::-;24643:6;;;;;;;;;;;:57;;;24715:11;24741:1;24757:4;24784;24804:15;24643:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24359:479;24304:534;:::o;24846:500::-;24994:53;25011:4;25026:6;;;;;;;;;;;25035:11;24994:8;:53::i;:::-;25090:6;;;;;;;;;;;:22;;;25121:9;25155:4;25175:11;25201:1;25244;16903:42;25312:15;25090:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24846:500;;:::o;13009:319::-;13124:6;13099:21;:31;;13091:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13178:12;13196:9;:14;;13219:6;13196:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13177:54;;;13250:7;13242:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;13080:248;13009:319;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:323::-;3763:6;3812:2;3800:9;3791:7;3787:23;3783:32;3780:119;;;3818:79;;:::i;:::-;3780:119;3938:1;3963:50;4005:7;3996:6;3985:9;3981:22;3963:50;:::i;:::-;3953:60;;3909:114;3707:323;;;;:::o;4036:118::-;4123:24;4141:5;4123:24;:::i;:::-;4118:3;4111:37;4036:118;;:::o;4160:222::-;4253:4;4291:2;4280:9;4276:18;4268:26;;4304:71;4372:1;4361:9;4357:17;4348:6;4304:71;:::i;:::-;4160:222;;;;:::o;4388:619::-;4465:6;4473;4481;4530:2;4518:9;4509:7;4505:23;4501:32;4498:119;;;4536:79;;:::i;:::-;4498:119;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4388:619;;;;;:::o;5013:86::-;5048:7;5088:4;5081:5;5077:16;5066:27;;5013:86;;;:::o;5105:112::-;5188:22;5204:5;5188:22;:::i;:::-;5183:3;5176:35;5105:112;;:::o;5223:214::-;5312:4;5350:2;5339:9;5335:18;5327:26;;5363:67;5427:1;5416:9;5412:17;5403:6;5363:67;:::i;:::-;5223:214;;;;:::o;5443:474::-;5511:6;5519;5568:2;5556:9;5547:7;5543:23;5539:32;5536:119;;;5574:79;;:::i;:::-;5536:119;5694:1;5719:53;5764:7;5755:6;5744:9;5740:22;5719:53;:::i;:::-;5709:63;;5665:117;5821:2;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5792:118;5443:474;;;;;:::o;5923:329::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:619::-;6335:6;6343;6351;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:53;6596:7;6587:6;6576:9;6572:22;6551:53;:::i;:::-;6541:63;;6497:117;6653:2;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6624:118;6781:2;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6752:118;6258:619;;;;;:::o;6883:442::-;7032:4;7070:2;7059:9;7055:18;7047:26;;7083:71;7151:1;7140:9;7136:17;7127:6;7083:71;:::i;:::-;7164:72;7232:2;7221:9;7217:18;7208:6;7164:72;:::i;:::-;7246;7314:2;7303:9;7299:18;7290:6;7246:72;:::i;:::-;6883:442;;;;;;:::o;7331:329::-;7390:6;7439:2;7427:9;7418:7;7414:23;7410:32;7407:119;;;7445:79;;:::i;:::-;7407:119;7565:1;7590:53;7635:7;7626:6;7615:9;7611:22;7590:53;:::i;:::-;7580:63;;7536:117;7331:329;;;;:::o;7666:118::-;7753:24;7771:5;7753:24;:::i;:::-;7748:3;7741:37;7666:118;;:::o;7790:222::-;7883:4;7921:2;7910:9;7906:18;7898:26;;7934:71;8002:1;7991:9;7987:17;7978:6;7934:71;:::i;:::-;7790:222;;;;:::o;8018:60::-;8046:3;8067:5;8060:12;;8018:60;;;:::o;8084:142::-;8134:9;8167:53;8185:34;8194:24;8212:5;8194:24;:::i;:::-;8185:34;:::i;:::-;8167:53;:::i;:::-;8154:66;;8084:142;;;:::o;8232:126::-;8282:9;8315:37;8346:5;8315:37;:::i;:::-;8302:50;;8232:126;;;:::o;8364:141::-;8429:9;8462:37;8493:5;8462:37;:::i;:::-;8449:50;;8364:141;;;:::o;8511:161::-;8613:52;8659:5;8613:52;:::i;:::-;8608:3;8601:65;8511:161;;:::o;8678:252::-;8786:4;8824:2;8813:9;8809:18;8801:26;;8837:86;8920:1;8909:9;8905:17;8896:6;8837:86;:::i;:::-;8678:252;;;;:::o;8936:180::-;8984:77;8981:1;8974:88;9081:4;9078:1;9071:15;9105:4;9102:1;9095:15;9122:320;9166:6;9203:1;9197:4;9193:12;9183:22;;9250:1;9244:4;9240:12;9271:18;9261:81;;9327:4;9319:6;9315:17;9305:27;;9261:81;9389:2;9381:6;9378:14;9358:18;9355:38;9352:84;;9408:18;;:::i;:::-;9352:84;9173:269;9122:320;;;:::o;9448:182::-;9588:34;9584:1;9576:6;9572:14;9565:58;9448:182;:::o;9636:366::-;9778:3;9799:67;9863:2;9858:3;9799:67;:::i;:::-;9792:74;;9875:93;9964:3;9875:93;:::i;:::-;9993:2;9988:3;9984:12;9977:19;;9636:366;;;:::o;10008:419::-;10174:4;10212:2;10201:9;10197:18;10189:26;;10261:9;10255:4;10251:20;10247:1;10236:9;10232:17;10225:47;10289:131;10415:4;10289:131;:::i;:::-;10281:139;;10008:419;;;:::o;10433:171::-;10573:23;10569:1;10561:6;10557:14;10550:47;10433:171;:::o;10610:366::-;10752:3;10773:67;10837:2;10832:3;10773:67;:::i;:::-;10766:74;;10849:93;10938:3;10849:93;:::i;:::-;10967:2;10962:3;10958:12;10951:19;;10610:366;;;:::o;10982:419::-;11148:4;11186:2;11175:9;11171:18;11163:26;;11235:9;11229:4;11225:20;11221:1;11210:9;11206:17;11199:47;11263:131;11389:4;11263:131;:::i;:::-;11255:139;;10982:419;;;:::o;11407:167::-;11547:19;11543:1;11535:6;11531:14;11524:43;11407:167;:::o;11580:366::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:419::-;12118:4;12156:2;12145:9;12141:18;12133:26;;12205:9;12199:4;12195:20;12191:1;12180:9;12176:17;12169:47;12233:131;12359:4;12233:131;:::i;:::-;12225:139;;11952:419;;;:::o;12377:180::-;12425:77;12422:1;12415:88;12522:4;12519:1;12512:15;12546:4;12543:1;12536:15;12563:180;12611:77;12608:1;12601:88;12708:4;12705:1;12698:15;12732:4;12729:1;12722:15;12749:185;12789:1;12806:20;12824:1;12806:20;:::i;:::-;12801:25;;12840:20;12858:1;12840:20;:::i;:::-;12835:25;;12879:1;12869:35;;12884:18;;:::i;:::-;12869:35;12926:1;12923;12919:9;12914:14;;12749:185;;;;:::o;12940:85::-;12985:7;13014:5;13003:16;;12940:85;;;:::o;13031:158::-;13089:9;13122:61;13140:42;13149:32;13175:5;13149:32;:::i;:::-;13140:42;:::i;:::-;13122:61;:::i;:::-;13109:74;;13031:158;;;:::o;13195:147::-;13290:45;13329:5;13290:45;:::i;:::-;13285:3;13278:58;13195:147;;:::o;13348:85::-;13393:7;13422:5;13411:16;;13348:85;;;:::o;13439:158::-;13497:9;13530:61;13548:42;13557:32;13583:5;13557:32;:::i;:::-;13548:42;:::i;:::-;13530:61;:::i;:::-;13517:74;;13439:158;;;:::o;13603:147::-;13698:45;13737:5;13698:45;:::i;:::-;13693:3;13686:58;13603:147;;:::o;13756:490::-;13929:4;13967:2;13956:9;13952:18;13944:26;;13980:79;14056:1;14045:9;14041:17;14032:6;13980:79;:::i;:::-;14069:80;14145:2;14134:9;14130:18;14121:6;14069:80;:::i;:::-;14159;14235:2;14224:9;14220:18;14211:6;14159:80;:::i;:::-;13756:490;;;;;;:::o;14252:174::-;14392:26;14388:1;14380:6;14376:14;14369:50;14252:174;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14432:366;;;:::o;14804:419::-;14970:4;15008:2;14997:9;14993:18;14985:26;;15057:9;15051:4;15047:20;15043:1;15032:9;15028:17;15021:47;15085:131;15211:4;15085:131;:::i;:::-;15077:139;;14804:419;;;:::o;15229:227::-;15369:34;15365:1;15357:6;15353:14;15346:58;15438:10;15433:2;15425:6;15421:15;15414:35;15229:227;:::o;15462:366::-;15604:3;15625:67;15689:2;15684:3;15625:67;:::i;:::-;15618:74;;15701:93;15790:3;15701:93;:::i;:::-;15819:2;15814:3;15810:12;15803:19;;15462:366;;;:::o;15834:419::-;16000:4;16038:2;16027:9;16023:18;16015:26;;16087:9;16081:4;16077:20;16073:1;16062:9;16058:17;16051:47;16115:131;16241:4;16115:131;:::i;:::-;16107:139;;15834:419;;;:::o;16259:194::-;16299:4;16319:20;16337:1;16319:20;:::i;:::-;16314:25;;16353:20;16371:1;16353:20;:::i;:::-;16348:25;;16397:1;16394;16390:9;16382:17;;16421:1;16415:4;16412:11;16409:37;;;16426:18;;:::i;:::-;16409:37;16259:194;;;;:::o;16459:191::-;16499:3;16518:20;16536:1;16518:20;:::i;:::-;16513:25;;16552:20;16570:1;16552:20;:::i;:::-;16547:25;;16595:1;16592;16588:9;16581:16;;16616:3;16613:1;16610:10;16607:36;;;16623:18;;:::i;:::-;16607:36;16459:191;;;;:::o;16656:251::-;16796:34;16792:1;16784:6;16780:14;16773:58;16865:34;16860:2;16852:6;16848:15;16841:59;16656:251;:::o;16913:366::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:419::-;17451:4;17489:2;17478:9;17474:18;17466:26;;17538:9;17532:4;17528:20;17524:1;17513:9;17509:17;17502:47;17566:131;17692:4;17566:131;:::i;:::-;17558:139;;17285:419;;;:::o;17710:102::-;17752:8;17799:5;17796:1;17792:13;17771:34;;17710:102;;;:::o;17818:848::-;17879:5;17886:4;17910:6;17901:15;;17934:5;17925:14;;17948:712;17969:1;17959:8;17956:15;17948:712;;;18064:4;18059:3;18055:14;18049:4;18046:24;18043:50;;;18073:18;;:::i;:::-;18043:50;18123:1;18113:8;18109:16;18106:451;;;18538:4;18531:5;18527:16;18518:25;;18106:451;18588:4;18582;18578:15;18570:23;;18618:32;18641:8;18618:32;:::i;:::-;18606:44;;17948:712;;;17818:848;;;;;;;:::o;18672:1073::-;18726:5;18917:8;18907:40;;18938:1;18929:10;;18940:5;;18907:40;18966:4;18956:36;;18983:1;18974:10;;18985:5;;18956:36;19052:4;19100:1;19095:27;;;;19136:1;19131:191;;;;19045:277;;19095:27;19113:1;19104:10;;19115:5;;;19131:191;19176:3;19166:8;19163:17;19160:43;;;19183:18;;:::i;:::-;19160:43;19232:8;19229:1;19225:16;19216:25;;19267:3;19260:5;19257:14;19254:40;;;19274:18;;:::i;:::-;19254:40;19307:5;;;19045:277;;19431:2;19421:8;19418:16;19412:3;19406:4;19403:13;19399:36;19381:2;19371:8;19368:16;19363:2;19357:4;19354:12;19350:35;19334:111;19331:246;;;19487:8;19481:4;19477:19;19468:28;;19522:3;19515:5;19512:14;19509:40;;;19529:18;;:::i;:::-;19509:40;19562:5;;19331:246;19602:42;19640:3;19630:8;19624:4;19621:1;19602:42;:::i;:::-;19587:57;;;;19676:4;19671:3;19667:14;19660:5;19657:25;19654:51;;;19685:18;;:::i;:::-;19654:51;19734:4;19727:5;19723:16;19714:25;;18672:1073;;;;;;:::o;19751:281::-;19809:5;19833:23;19851:4;19833:23;:::i;:::-;19825:31;;19877:25;19893:8;19877:25;:::i;:::-;19865:37;;19921:104;19958:66;19948:8;19942:4;19921:104;:::i;:::-;19912:113;;19751:281;;;;:::o;20038:410::-;20078:7;20101:20;20119:1;20101:20;:::i;:::-;20096:25;;20135:20;20153:1;20135:20;:::i;:::-;20130:25;;20190:1;20187;20183:9;20212:30;20230:11;20212:30;:::i;:::-;20201:41;;20391:1;20382:7;20378:15;20375:1;20372:22;20352:1;20345:9;20325:83;20302:139;;20421:18;;:::i;:::-;20302:139;20086:362;20038:410;;;;:::o;20454:179::-;20594:31;20590:1;20582:6;20578:14;20571:55;20454:179;:::o;20639:366::-;20781:3;20802:67;20866:2;20861:3;20802:67;:::i;:::-;20795:74;;20878:93;20967:3;20878:93;:::i;:::-;20996:2;20991:3;20987:12;20980:19;;20639:366;;;:::o;21011:419::-;21177:4;21215:2;21204:9;21200:18;21192:26;;21264:9;21258:4;21254:20;21250:1;21239:9;21235:17;21228:47;21292:131;21418:4;21292:131;:::i;:::-;21284:139;;21011:419;;;:::o;21436:179::-;21576:31;21572:1;21564:6;21560:14;21553:55;21436:179;:::o;21621:366::-;21763:3;21784:67;21848:2;21843:3;21784:67;:::i;:::-;21777:74;;21860:93;21949:3;21860:93;:::i;:::-;21978:2;21973:3;21969:12;21962:19;;21621:366;;;:::o;21993:419::-;22159:4;22197:2;22186:9;22182:18;22174:26;;22246:9;22240:4;22236:20;22232:1;22221:9;22217:17;22210:47;22274:131;22400:4;22274:131;:::i;:::-;22266:139;;21993:419;;;:::o;22418:165::-;22558:17;22554:1;22546:6;22542:14;22535:41;22418:165;:::o;22589:366::-;22731:3;22752:67;22816:2;22811:3;22752:67;:::i;:::-;22745:74;;22828:93;22917:3;22828:93;:::i;:::-;22946:2;22941:3;22937:12;22930:19;;22589:366;;;:::o;22961:419::-;23127:4;23165:2;23154:9;23150:18;23142:26;;23214:9;23208:4;23204:20;23200:1;23189:9;23185:17;23178:47;23242:131;23368:4;23242:131;:::i;:::-;23234:139;;22961:419;;;:::o;23386:221::-;23526:34;23522:1;23514:6;23510:14;23503:58;23595:4;23590:2;23582:6;23578:15;23571:29;23386:221;:::o;23613:366::-;23755:3;23776:67;23840:2;23835:3;23776:67;:::i;:::-;23769:74;;23852:93;23941:3;23852:93;:::i;:::-;23970:2;23965:3;23961:12;23954:19;;23613:366;;;:::o;23985:419::-;24151:4;24189:2;24178:9;24174:18;24166:26;;24238:9;24232:4;24228:20;24224:1;24213:9;24209:17;24202:47;24266:131;24392:4;24266:131;:::i;:::-;24258:139;;23985:419;;;:::o;24410:332::-;24531:4;24569:2;24558:9;24554:18;24546:26;;24582:71;24650:1;24639:9;24635:17;24626:6;24582:71;:::i;:::-;24663:72;24731:2;24720:9;24716:18;24707:6;24663:72;:::i;:::-;24410:332;;;;;:::o;24748:137::-;24802:5;24833:6;24827:13;24818:22;;24849:30;24873:5;24849:30;:::i;:::-;24748:137;;;;:::o;24891:345::-;24958:6;25007:2;24995:9;24986:7;24982:23;24978:32;24975:119;;;25013:79;;:::i;:::-;24975:119;25133:1;25158:61;25211:7;25202:6;25191:9;25187:22;25158:61;:::i;:::-;25148:71;;25104:125;24891:345;;;;:::o;25242:224::-;25382:34;25378:1;25370:6;25366:14;25359:58;25451:7;25446:2;25438:6;25434:15;25427:32;25242:224;:::o;25472:366::-;25614:3;25635:67;25699:2;25694:3;25635:67;:::i;:::-;25628:74;;25711:93;25800:3;25711:93;:::i;:::-;25829:2;25824:3;25820:12;25813:19;;25472:366;;;:::o;25844:419::-;26010:4;26048:2;26037:9;26033:18;26025:26;;26097:9;26091:4;26087:20;26083:1;26072:9;26068:17;26061:47;26125:131;26251:4;26125:131;:::i;:::-;26117:139;;25844:419;;;:::o;26269:228::-;26409:34;26405:1;26397:6;26393:14;26386:58;26478:11;26473:2;26465:6;26461:15;26454:36;26269:228;:::o;26503:366::-;26645:3;26666:67;26730:2;26725:3;26666:67;:::i;:::-;26659:74;;26742:93;26831:3;26742:93;:::i;:::-;26860:2;26855:3;26851:12;26844:19;;26503:366;;;:::o;26875:419::-;27041:4;27079:2;27068:9;27064:18;27056:26;;27128:9;27122:4;27118:20;27114:1;27103:9;27099:17;27092:47;27156:131;27282:4;27156:131;:::i;:::-;27148:139;;26875:419;;;:::o;27300:229::-;27440:34;27436:1;27428:6;27424:14;27417:58;27509:12;27504:2;27496:6;27492:15;27485:37;27300:229;:::o;27535:366::-;27677:3;27698:67;27762:2;27757:3;27698:67;:::i;:::-;27691:74;;27774:93;27863:3;27774:93;:::i;:::-;27892:2;27887:3;27883:12;27876:19;;27535:366;;;:::o;27907:419::-;28073:4;28111:2;28100:9;28096:18;28088:26;;28160:9;28154:4;28150:20;28146:1;28135:9;28131:17;28124:47;28188:131;28314:4;28188:131;:::i;:::-;28180:139;;27907:419;;;:::o;28332:231::-;28472:34;28468:1;28460:6;28456:14;28449:58;28541:14;28536:2;28528:6;28524:15;28517:39;28332:231;:::o;28569:366::-;28711:3;28732:67;28796:2;28791:3;28732:67;:::i;:::-;28725:74;;28808:93;28897:3;28808:93;:::i;:::-;28926:2;28921:3;28917:12;28910:19;;28569:366;;;:::o;28941:419::-;29107:4;29145:2;29134:9;29130:18;29122:26;;29194:9;29188:4;29184:20;29180:1;29169:9;29165:17;29158:47;29222:131;29348:4;29222:131;:::i;:::-;29214:139;;28941:419;;;:::o;29366:225::-;29506:34;29502:1;29494:6;29490:14;29483:58;29575:8;29570:2;29562:6;29558:15;29551:33;29366:225;:::o;29597:366::-;29739:3;29760:67;29824:2;29819:3;29760:67;:::i;:::-;29753:74;;29836:93;29925:3;29836:93;:::i;:::-;29954:2;29949:3;29945:12;29938:19;;29597:366;;;:::o;29969:419::-;30135:4;30173:2;30162:9;30158:18;30150:26;;30222:9;30216:4;30212:20;30208:1;30197:9;30193:17;30186:47;30250:131;30376:4;30250:131;:::i;:::-;30242:139;;29969:419;;;:::o;30394:223::-;30534:34;30530:1;30522:6;30518:14;30511:58;30603:6;30598:2;30590:6;30586:15;30579:31;30394:223;:::o;30623:366::-;30765:3;30786:67;30850:2;30845:3;30786:67;:::i;:::-;30779:74;;30862:93;30951:3;30862:93;:::i;:::-;30980:2;30975:3;30971:12;30964:19;;30623:366;;;:::o;30995:419::-;31161:4;31199:2;31188:9;31184:18;31176:26;;31248:9;31242:4;31238:20;31234:1;31223:9;31219:17;31212:47;31276:131;31402:4;31276:131;:::i;:::-;31268:139;;30995:419;;;:::o;31420:221::-;31560:34;31556:1;31548:6;31544:14;31537:58;31629:4;31624:2;31616:6;31612:15;31605:29;31420:221;:::o;31647:366::-;31789:3;31810:67;31874:2;31869:3;31810:67;:::i;:::-;31803:74;;31886:93;31975:3;31886:93;:::i;:::-;32004:2;31999:3;31995:12;31988:19;;31647:366;;;:::o;32019:419::-;32185:4;32223:2;32212:9;32208:18;32200:26;;32272:9;32266:4;32262:20;32258:1;32247:9;32243:17;32236:47;32300:131;32426:4;32300:131;:::i;:::-;32292:139;;32019:419;;;:::o;32444:228::-;32584:34;32580:1;32572:6;32568:14;32561:58;32653:11;32648:2;32640:6;32636:15;32629:36;32444:228;:::o;32678:366::-;32820:3;32841:67;32905:2;32900:3;32841:67;:::i;:::-;32834:74;;32917:93;33006:3;32917:93;:::i;:::-;33035:2;33030:3;33026:12;33019:19;;32678:366;;;:::o;33050:419::-;33216:4;33254:2;33243:9;33239:18;33231:26;;33303:9;33297:4;33293:20;33289:1;33278:9;33274:17;33267:47;33331:131;33457:4;33331:131;:::i;:::-;33323:139;;33050:419;;;:::o;33475:169::-;33615:21;33611:1;33603:6;33599:14;33592:45;33475:169;:::o;33650:366::-;33792:3;33813:67;33877:2;33872:3;33813:67;:::i;:::-;33806:74;;33889:93;33978:3;33889:93;:::i;:::-;34007:2;34002:3;33998:12;33991:19;;33650:366;;;:::o;34022:419::-;34188:4;34226:2;34215:9;34211:18;34203:26;;34275:9;34269:4;34265:20;34261:1;34250:9;34246:17;34239:47;34303:131;34429:4;34303:131;:::i;:::-;34295:139;;34022:419;;;:::o;34447:179::-;34587:31;34583:1;34575:6;34571:14;34564:55;34447:179;:::o;34632:366::-;34774:3;34795:67;34859:2;34854:3;34795:67;:::i;:::-;34788:74;;34871:93;34960:3;34871:93;:::i;:::-;34989:2;34984:3;34980:12;34973:19;;34632:366;;;:::o;35004:419::-;35170:4;35208:2;35197:9;35193:18;35185:26;;35257:9;35251:4;35247:20;35243:1;35232:9;35228:17;35221:47;35285:131;35411:4;35285:131;:::i;:::-;35277:139;;35004:419;;;:::o;35429:182::-;35569:34;35565:1;35557:6;35553:14;35546:58;35429:182;:::o;35617:366::-;35759:3;35780:67;35844:2;35839:3;35780:67;:::i;:::-;35773:74;;35856:93;35945:3;35856:93;:::i;:::-;35974:2;35969:3;35965:12;35958:19;;35617:366;;;:::o;35989:419::-;36155:4;36193:2;36182:9;36178:18;36170:26;;36242:9;36236:4;36232:20;36228:1;36217:9;36213:17;36206:47;36270:131;36396:4;36270:131;:::i;:::-;36262:139;;35989:419;;;:::o;36414:180::-;36554:32;36550:1;36542:6;36538:14;36531:56;36414:180;:::o;36600:366::-;36742:3;36763:67;36827:2;36822:3;36763:67;:::i;:::-;36756:74;;36839:93;36928:3;36839:93;:::i;:::-;36957:2;36952:3;36948:12;36941:19;;36600:366;;;:::o;36972:419::-;37138:4;37176:2;37165:9;37161:18;37153:26;;37225:9;37219:4;37215:20;37211:1;37200:9;37196:17;37189:47;37253:131;37379:4;37253:131;:::i;:::-;37245:139;;36972:419;;;:::o;37397:220::-;37537:34;37533:1;37525:6;37521:14;37514:58;37606:3;37601:2;37593:6;37589:15;37582:28;37397:220;:::o;37623:366::-;37765:3;37786:67;37850:2;37845:3;37786:67;:::i;:::-;37779:74;;37862:93;37951:3;37862:93;:::i;:::-;37980:2;37975:3;37971:12;37964:19;;37623:366;;;:::o;37995:419::-;38161:4;38199:2;38188:9;38184:18;38176:26;;38248:9;38242:4;38238:20;38234:1;38223:9;38219:17;38212:47;38276:131;38402:4;38276:131;:::i;:::-;38268:139;;37995:419;;;:::o;38420:221::-;38560:34;38556:1;38548:6;38544:14;38537:58;38629:4;38624:2;38616:6;38612:15;38605:29;38420:221;:::o;38647:366::-;38789:3;38810:67;38874:2;38869:3;38810:67;:::i;:::-;38803:74;;38886:93;38975:3;38886:93;:::i;:::-;39004:2;38999:3;38995:12;38988:19;;38647:366;;;:::o;39019:419::-;39185:4;39223:2;39212:9;39208:18;39200:26;;39272:9;39266:4;39262:20;39258:1;39247:9;39243:17;39236:47;39300:131;39426:4;39300:131;:::i;:::-;39292:139;;39019:419;;;:::o;39444:179::-;39584:31;39580:1;39572:6;39568:14;39561:55;39444:179;:::o;39629:366::-;39771:3;39792:67;39856:2;39851:3;39792:67;:::i;:::-;39785:74;;39868:93;39957:3;39868:93;:::i;:::-;39986:2;39981:3;39977:12;39970:19;;39629:366;;;:::o;40001:419::-;40167:4;40205:2;40194:9;40190:18;40182:26;;40254:9;40248:4;40244:20;40240:1;40229:9;40225:17;40218:47;40282:131;40408:4;40282:131;:::i;:::-;40274:139;;40001:419;;;:::o;40426:224::-;40566:34;40562:1;40554:6;40550:14;40543:58;40635:7;40630:2;40622:6;40618:15;40611:32;40426:224;:::o;40656:366::-;40798:3;40819:67;40883:2;40878:3;40819:67;:::i;:::-;40812:74;;40895:93;40984:3;40895:93;:::i;:::-;41013:2;41008:3;41004:12;40997:19;;40656:366;;;:::o;41028:419::-;41194:4;41232:2;41221:9;41217:18;41209:26;;41281:9;41275:4;41271:20;41267:1;41256:9;41252:17;41245:47;41309:131;41435:4;41309:131;:::i;:::-;41301:139;;41028:419;;;:::o;41453:222::-;41593:34;41589:1;41581:6;41577:14;41570:58;41662:5;41657:2;41649:6;41645:15;41638:30;41453:222;:::o;41681:366::-;41823:3;41844:67;41908:2;41903:3;41844:67;:::i;:::-;41837:74;;41920:93;42009:3;41920:93;:::i;:::-;42038:2;42033:3;42029:12;42022:19;;41681:366;;;:::o;42053:419::-;42219:4;42257:2;42246:9;42242:18;42234:26;;42306:9;42300:4;42296:20;42292:1;42281:9;42277:17;42270:47;42334:131;42460:4;42334:131;:::i;:::-;42326:139;;42053:419;;;:::o;42478:225::-;42618:34;42614:1;42606:6;42602:14;42595:58;42687:8;42682:2;42674:6;42670:15;42663:33;42478:225;:::o;42709:366::-;42851:3;42872:67;42936:2;42931:3;42872:67;:::i;:::-;42865:74;;42948:93;43037:3;42948:93;:::i;:::-;43066:2;43061:3;43057:12;43050:19;;42709:366;;;:::o;43081:419::-;43247:4;43285:2;43274:9;43270:18;43262:26;;43334:9;43328:4;43324:20;43320:1;43309:9;43305:17;43298:47;43362:131;43488:4;43362:131;:::i;:::-;43354:139;;43081:419;;;:::o;43506:180::-;43554:77;43551:1;43544:88;43651:4;43648:1;43641:15;43675:4;43672:1;43665:15;43692:180;43740:77;43737:1;43730:88;43837:4;43834:1;43827:15;43861:4;43858:1;43851:15;43878:143;43935:5;43966:6;43960:13;43951:22;;43982:33;44009:5;43982:33;:::i;:::-;43878:143;;;;:::o;44027:351::-;44097:6;44146:2;44134:9;44125:7;44121:23;44117:32;44114:119;;;44152:79;;:::i;:::-;44114:119;44272:1;44297:64;44353:7;44344:6;44333:9;44329:22;44297:64;:::i;:::-;44287:74;;44243:128;44027:351;;;;:::o;44384:114::-;44451:6;44485:5;44479:12;44469:22;;44384:114;;;:::o;44504:184::-;44603:11;44637:6;44632:3;44625:19;44677:4;44672:3;44668:14;44653:29;;44504:184;;;;:::o;44694:132::-;44761:4;44784:3;44776:11;;44814:4;44809:3;44805:14;44797:22;;44694:132;;;:::o;44832:108::-;44909:24;44927:5;44909:24;:::i;:::-;44904:3;44897:37;44832:108;;:::o;44946:179::-;45015:10;45036:46;45078:3;45070:6;45036:46;:::i;:::-;45114:4;45109:3;45105:14;45091:28;;44946:179;;;;:::o;45131:113::-;45201:4;45233;45228:3;45224:14;45216:22;;45131:113;;;:::o;45280:732::-;45399:3;45428:54;45476:5;45428:54;:::i;:::-;45498:86;45577:6;45572:3;45498:86;:::i;:::-;45491:93;;45608:56;45658:5;45608:56;:::i;:::-;45687:7;45718:1;45703:284;45728:6;45725:1;45722:13;45703:284;;;45804:6;45798:13;45831:63;45890:3;45875:13;45831:63;:::i;:::-;45824:70;;45917:60;45970:6;45917:60;:::i;:::-;45907:70;;45763:224;45750:1;45747;45743:9;45738:14;;45703:284;;;45707:14;46003:3;45996:10;;45404:608;;;45280:732;;;;:::o;46018:831::-;46281:4;46319:3;46308:9;46304:19;46296:27;;46333:71;46401:1;46390:9;46386:17;46377:6;46333:71;:::i;:::-;46414:80;46490:2;46479:9;46475:18;46466:6;46414:80;:::i;:::-;46541:9;46535:4;46531:20;46526:2;46515:9;46511:18;46504:48;46569:108;46672:4;46663:6;46569:108;:::i;:::-;46561:116;;46687:72;46755:2;46744:9;46740:18;46731:6;46687:72;:::i;:::-;46769:73;46837:3;46826:9;46822:19;46813:6;46769:73;:::i;:::-;46018:831;;;;;;;;:::o;46855:807::-;47104:4;47142:3;47131:9;47127:19;47119:27;;47156:71;47224:1;47213:9;47209:17;47200:6;47156:71;:::i;:::-;47237:72;47305:2;47294:9;47290:18;47281:6;47237:72;:::i;:::-;47319:80;47395:2;47384:9;47380:18;47371:6;47319:80;:::i;:::-;47409;47485:2;47474:9;47470:18;47461:6;47409:80;:::i;:::-;47499:73;47567:3;47556:9;47552:19;47543:6;47499:73;:::i;:::-;47582;47650:3;47639:9;47635:19;47626:6;47582:73;:::i;:::-;46855:807;;;;;;;;;:::o;47668:143::-;47725:5;47756:6;47750:13;47741:22;;47772:33;47799:5;47772:33;:::i;:::-;47668:143;;;;:::o;47817:663::-;47905:6;47913;47921;47970:2;47958:9;47949:7;47945:23;47941:32;47938:119;;;47976:79;;:::i;:::-;47938:119;48096:1;48121:64;48177:7;48168:6;48157:9;48153:22;48121:64;:::i;:::-;48111:74;;48067:128;48234:2;48260:64;48316:7;48307:6;48296:9;48292:22;48260:64;:::i;:::-;48250:74;;48205:129;48373:2;48399:64;48455:7;48446:6;48435:9;48431:22;48399:64;:::i;:::-;48389:74;;48344:129;47817:663;;;;;:::o;48486:179::-;48626:31;48622:1;48614:6;48610:14;48603:55;48486:179;:::o;48671:366::-;48813:3;48834:67;48898:2;48893:3;48834:67;:::i;:::-;48827:74;;48910:93;48999:3;48910:93;:::i;:::-;49028:2;49023:3;49019:12;49012:19;;48671:366;;;:::o;49043:419::-;49209:4;49247:2;49236:9;49232:18;49224:26;;49296:9;49290:4;49286:20;49282:1;49271:9;49267:17;49260:47;49324:131;49450:4;49324:131;:::i;:::-;49316:139;;49043:419;;;:::o;49468:147::-;49569:11;49606:3;49591:18;;49468:147;;;;:::o;49621:114::-;;:::o;49741:398::-;49900:3;49921:83;50002:1;49997:3;49921:83;:::i;:::-;49914:90;;50013:93;50102:3;50013:93;:::i;:::-;50131:1;50126:3;50122:11;50115:18;;49741:398;;;:::o;50145:379::-;50329:3;50351:147;50494:3;50351:147;:::i;:::-;50344:154;;50515:3;50508:10;;50145:379;;;:::o;50530:245::-;50670:34;50666:1;50658:6;50654:14;50647:58;50739:28;50734:2;50726:6;50722:15;50715:53;50530:245;:::o;50781:366::-;50923:3;50944:67;51008:2;51003:3;50944:67;:::i;:::-;50937:74;;51020:93;51109:3;51020:93;:::i;:::-;51138:2;51133:3;51129:12;51122:19;;50781:366;;;:::o;51153:419::-;51319:4;51357:2;51346:9;51342:18;51334:26;;51406:9;51400:4;51396:20;51392:1;51381:9;51377:17;51370:47;51434:131;51560:4;51434:131;:::i;:::-;51426:139;;51153:419;;;:::o

Swarm Source

ipfs://8d197f030aa532af498f988933b4bb2cbb20568aadcfac9b0dd9fbbfafa1c96d

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.