ETH Price: $2,686.65 (-2.22%)

Contract

0x78E33639132D46396Ad1a5327161CFc3ac4AE36D
 

Overview

ETH Balance

635 wei

Eth Value

Less Than $0.01 (@ $2,686.65/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer198509492024-05-12 2:25:11106 days ago1715480711IN
0x78E33639...3ac4AE36D
0 ETH0.000260253.65788125
Approve174048802023-06-04 4:28:11449 days ago1685852891IN
0x78E33639...3ac4AE36D
0 ETH0.0009001519.1600707
Approve170781922023-04-19 4:08:11495 days ago1681877291IN
0x78E33639...3ac4AE36D
0 ETH0.0047233100
Approve170781922023-04-19 4:08:11495 days ago1681877291IN
0x78E33639...3ac4AE36D
0 ETH0.0047233100
Approve170781922023-04-19 4:08:11495 days ago1681877291IN
0x78E33639...3ac4AE36D
0 ETH0.0047233100
Approve170781922023-04-19 4:08:11495 days ago1681877291IN
0x78E33639...3ac4AE36D
0 ETH0.0047233100
Approve170781922023-04-19 4:08:11495 days ago1681877291IN
0x78E33639...3ac4AE36D
0 ETH0.0047233100
Approve170764642023-04-18 22:18:35496 days ago1681856315IN
0x78E33639...3ac4AE36D
0 ETH0.0037656680.31705131
Rescue ERC20170706962023-04-18 2:42:23496 days ago1681785743IN
0x78E33639...3ac4AE36D
0 ETH0.0024784237.23937082
Approve170702912023-04-18 1:20:23496 days ago1681780823IN
0x78E33639...3ac4AE36D
0 ETH0.0018739139.72441408
Approve170698292023-04-17 23:45:35496 days ago1681775135IN
0x78E33639...3ac4AE36D
0 ETH0.0014580131.0737975
Approve170693282023-04-17 22:03:59497 days ago1681769039IN
0x78E33639...3ac4AE36D
0 ETH0.0017836837.76356323
Approve170688842023-04-17 20:34:23497 days ago1681763663IN
0x78E33639...3ac4AE36D
0 ETH0.0017981938.07082808
Approve170686942023-04-17 19:55:23497 days ago1681761323IN
0x78E33639...3ac4AE36D
0 ETH0.001714336.48924581
Approve170686552023-04-17 19:47:35497 days ago1681760855IN
0x78E33639...3ac4AE36D
0 ETH0.0019980342.30158732
Approve170685922023-04-17 19:34:59497 days ago1681760099IN
0x78E33639...3ac4AE36D
0 ETH0.0018294238.78126657
Approve170685902023-04-17 19:34:35497 days ago1681760075IN
0x78E33639...3ac4AE36D
0 ETH0.0032319668.51305233
Approve170685762023-04-17 19:31:47497 days ago1681759907IN
0x78E33639...3ac4AE36D
0 ETH0.0018100738.37102698
Approve170685672023-04-17 19:29:59497 days ago1681759799IN
0x78E33639...3ac4AE36D
0 ETH0.0018611539.45392169
Approve170685212023-04-17 19:20:35497 days ago1681759235IN
0x78E33639...3ac4AE36D
0 ETH0.002518753.39295677
Approve170684872023-04-17 19:13:23497 days ago1681758803IN
0x78E33639...3ac4AE36D
0 ETH0.0031686967.17183355
Approve170684432023-04-17 19:04:35497 days ago1681758275IN
0x78E33639...3ac4AE36D
0 ETH0.00528742112.08583273
Approve170684382023-04-17 19:03:35497 days ago1681758215IN
0x78E33639...3ac4AE36D
0 ETH0.00480617102.45740448
Approve170683692023-04-17 18:49:35497 days ago1681757375IN
0x78E33639...3ac4AE36D
0 ETH0.0020844744.13165834
Approve170683452023-04-17 18:44:35497 days ago1681757075IN
0x78E33639...3ac4AE36D
0 ETH0.0015291432.37440516
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
174048902023-06-04 4:30:11449 days ago1685853011
0x78E33639...3ac4AE36D
0.00347853 ETH
174048902023-06-04 4:30:11449 days ago1685853011
0x78E33639...3ac4AE36D
0.00347853 ETH
171003742023-04-22 7:23:47492 days ago1682148227
0x78E33639...3ac4AE36D
0.00390208 ETH
171003742023-04-22 7:23:47492 days ago1682148227
0x78E33639...3ac4AE36D
0.00390208 ETH
170919972023-04-21 3:06:47493 days ago1682046407
0x78E33639...3ac4AE36D
0.00411582 ETH
170919972023-04-21 3:06:47493 days ago1682046407
0x78E33639...3ac4AE36D
0.00411582 ETH
170781912023-04-19 4:07:59495 days ago1681877279
0x78E33639...3ac4AE36D
0.00605699 ETH
170781912023-04-19 4:07:59495 days ago1681877279
0x78E33639...3ac4AE36D
0.00605699 ETH
170689842023-04-17 20:54:23497 days ago1681764863
0x78E33639...3ac4AE36D
0.00448144 ETH
170689842023-04-17 20:54:23497 days ago1681764863
0x78E33639...3ac4AE36D
0.00448144 ETH
170686882023-04-17 19:54:11497 days ago1681761251
0x78E33639...3ac4AE36D
0.00558138 ETH
170686882023-04-17 19:54:11497 days ago1681761251
0x78E33639...3ac4AE36D
0.00558138 ETH
170686102023-04-17 19:38:35497 days ago1681760315
0x78E33639...3ac4AE36D
0.00642197 ETH
170686102023-04-17 19:38:35497 days ago1681760315
0x78E33639...3ac4AE36D
0.00642197 ETH
170684592023-04-17 19:07:47497 days ago1681758467
0x78E33639...3ac4AE36D
0.01147514 ETH
170684592023-04-17 19:07:47497 days ago1681758467
0x78E33639...3ac4AE36D
0.01147514 ETH
170683252023-04-17 18:40:35497 days ago1681756835
0x78E33639...3ac4AE36D
0.01326371 ETH
170683252023-04-17 18:40:35497 days ago1681756835
0x78E33639...3ac4AE36D
0.01326371 ETH
170682932023-04-17 18:33:59497 days ago1681756439
0x78E33639...3ac4AE36D
0.02215338 ETH
170682932023-04-17 18:33:59497 days ago1681756439
0x78E33639...3ac4AE36D
0.02215338 ETH
170682632023-04-17 18:27:35497 days ago1681756055
0x78E33639...3ac4AE36D
0.02268297 ETH
170682632023-04-17 18:27:35497 days ago1681756055
0x78E33639...3ac4AE36D
0.02268297 ETH
170682592023-04-17 18:26:35497 days ago1681755995
0x78E33639...3ac4AE36D
0.03643619 ETH
170682592023-04-17 18:26:35497 days ago1681755995
0x78E33639...3ac4AE36D
0.03643619 ETH
170682542023-04-17 18:25:35497 days ago1681755935
0x78E33639...3ac4AE36D
0.0199811 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PlagueOfPepe

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

/*
    This is the contract for launch of FLIED LICE (FLICE) token.
    website: https://www.pepeplague.com
    Twitter: https://twitter.com/pepesplague
    Telegram Portal: https://t.me/PLAGUEOFPEPE
*/

//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 PlagueOfPepe 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 = 0x84F3348dc7302119b6b9C751E21287C99871C4DD;
    address private Operator = 0x84F3348dc7302119b6b9C751E21287C99871C4DD;
	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("PLAGUE OF PEPE", "POP") {
        _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
            marketingWallet,
            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% 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;
        tokenLiquidityThreshold = 10_000_000 * 10**decimals();

        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 renouncePOP() 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(1, 0, 0); // Marketing tax of 1%
        sellTaxes = Taxes(1, 0, 0); // Marketing 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":[],"name":"renouncePOP","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":"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"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff0219169083151502179055506000600760176101000a81548160ff02191690831515021790555062000080620007fe60201b60201c565b600a6200008e919062000c64565b620f42406200009e919062000cb5565b600955620000b1620007fe60201b60201c565b600a620000bf919062000c64565b62989680620000cf919062000cb5565b600a55620000e2620007fe60201b60201c565b600a620000f0919062000c64565b624c4b4062000100919062000cb5565b600b5562000113620007fe60201b60201c565b600a62000121919062000c64565b6301312d0062000132919062000cb5565b600c557384f3348dc7302119b6b9c751e21287c99871c4dd600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507384f3348dc7302119b6b9c751e21287c99871c4dd600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060008152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015550506040518060600160405280600081526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155505060405180606001604052806000815260200160008152602001600081525060156000820151816000015560208201518160010155604082015181600201555050348015620002ac57600080fd5b506040518060400160405280600e81526020017f504c41475545204f4620504550450000000000000000000000000000000000008152506040518060400160405280600381526020017f504f50000000000000000000000000000000000000000000000000000000000081525081600390816200032a919062000f70565b5080600490816200033c919062000f70565b5050506200035f620003536200080760201b60201c565b6200080f60201b60201c565b620003c1600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000396620007fe60201b60201c565b600a620003a4919062000c64565b633b9aca00620003b5919062000cb5565b620008d560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044e9190620010c1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dc9190620010c1565b6040518363ffffffff1660e01b8152600401620004fb92919062001104565b6020604051808303816000875af11580156200051b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005419190620010c1565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007f6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200098b60201b60201c565b50506200127a565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200097f919062001142565b60405180910390a35050565b6200099b6200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009c162000aa060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1190620011c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a839062001258565b60405180910390fd5b62000a9d816200080f60201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b585780860481111562000b305762000b2f62000aca565b5b600185161562000b405780820291505b808102905062000b508562000af9565b945062000b10565b94509492505050565b60008262000b73576001905062000c46565b8162000b83576000905062000c46565b816001811462000b9c576002811462000ba75762000bdd565b600191505062000c46565b60ff84111562000bbc5762000bbb62000aca565b5b8360020a91508482111562000bd65762000bd562000aca565b5b5062000c46565b5060208310610133831016604e8410600b841016171562000c175782820a90508381111562000c115762000c1062000aca565b5b62000c46565b62000c26848484600162000b06565b9250905081840481111562000c405762000c3f62000aca565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c718262000c4d565b915062000c7e8362000c57565b925062000cad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b61565b905092915050565b600062000cc28262000c4d565b915062000ccf8362000c4d565b925082820262000cdf8162000c4d565b9150828204841483151762000cf95762000cf862000aca565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d8257607f821691505b60208210810362000d985762000d9762000d3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dc3565b62000e0e868362000dc3565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000e5162000e4b62000e458462000c4d565b62000e26565b62000c4d565b9050919050565b6000819050919050565b62000e6d8362000e30565b62000e8562000e7c8262000e58565b84845462000dd0565b825550505050565b600090565b62000e9c62000e8d565b62000ea981848462000e62565b505050565b5b8181101562000ed15762000ec560008262000e92565b60018101905062000eaf565b5050565b601f82111562000f205762000eea8162000d9e565b62000ef58462000db3565b8101602085101562000f05578190505b62000f1d62000f148562000db3565b83018262000eae565b50505b505050565b600082821c905092915050565b600062000f456000198460080262000f25565b1980831691505092915050565b600062000f60838362000f32565b9150826002028217905092915050565b62000f7b8262000d00565b67ffffffffffffffff81111562000f975762000f9662000d0b565b5b62000fa3825462000d69565b62000fb082828562000ed5565b600060209050601f83116001811462000fe8576000841562000fd3578287015190505b62000fdf858262000f52565b8655506200104f565b601f19841662000ff88662000d9e565b60005b82811015620010225784890151825560018201915060208501945060208101905062000ffb565b868310156200104257848901516200103e601f89168262000f32565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001089826200105c565b9050919050565b6200109b816200107c565b8114620010a757600080fd5b50565b600081519050620010bb8162001090565b92915050565b600060208284031215620010da57620010d962001057565b5b6000620010ea84828501620010aa565b91505092915050565b620010fe816200107c565b82525050565b60006040820190506200111b6000830185620010f3565b6200112a6020830184620010f3565b9392505050565b6200113c8162000c4d565b82525050565b600060208201905062001159600083018462001131565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a86020836200115f565b9150620011b58262001170565b602082019050919050565b60006020820190508181036000830152620011db8162001199565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012406026836200115f565b91506200124d82620011e2565b604082019050919050565b60006020820190508181036000830152620012738162001231565b9050919050565b6150bc806200128a6000396000f3fe6080604052600436106102605760003560e01c806370a08231116101445780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146108d5578063e1b450ad14610912578063f2fde38b1461093b578063f66895a314610964578063f887ea4014610991578063fbe6324e146109bc57610267565b80639e252f00146107ca578063a457c2d7146107f3578063a8aa1b3114610830578063a9059cbb1461085b578063c5d32bb21461089857610267565b8063848b86e311610108578063848b86e3146106cc57806385141a77146106f55780638cd4426d146107205780638da5cb5b146107495780638de890bd1461077457806395d89b411461079f57610267565b806370a08231146105f7578063715018a614610634578063728f8eea1461064b57806375f0a8741461067857806379cc6790146106a357610267565b806340b28c2f116101dd5780634ada218b116101a15780634ada218b146104f55780634e736f22146105205780635331803c14610549578063652e2f041461057657806366a88d96146105a15780636aa5b37f146105cc57610267565b806340b28c2f1461042657806342966c681461044f57806342b6fa111461047857806348c34a60146104a15780634a2b3b13146104cc57610267565b80631c1702f3116102245780631c1702f31461035357806323b872dd1461036a578063313ce567146103a757806339509351146103d25780633b3475d81461040f57610267565b806306fdde031461026c578063095ea7b3146102975780631340538f146102d45780631675d802146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e7565b60405161028e919061365c565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613717565b610a79565b6040516102cb9190613772565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906137b9565b610a97565b005b34801561030957600080fd5b50610312610b30565b60405161031f91906137f5565b60405180910390f35b34801561033457600080fd5b5061033d610b36565b60405161034a91906137f5565b60405180910390f35b34801561035f57600080fd5b50610368610b40565b005b34801561037657600080fd5b50610391600480360381019061038c9190613810565b610cf5565b60405161039e9190613772565b60405180910390f35b3480156103b357600080fd5b506103bc610df6565b6040516103c9919061387f565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613717565b610dff565b6040516104069190613772565b60405180910390f35b34801561041b57600080fd5b50610424610eab565b005b34801561043257600080fd5b5061044d6004803603810190610448919061389a565b611131565b005b34801561045b57600080fd5b50610476600480360381019061047191906138da565b611233565b005b34801561048457600080fd5b5061049f600480360381019061049a91906138da565b611247565b005b3480156104ad57600080fd5b506104b661133d565b6040516104c39190613772565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613907565b611350565b005b34801561050157600080fd5b5061050a611469565b6040516105179190613772565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613907565b61147c565b005b34801561055557600080fd5b5061055e611595565b60405161056d9392919061395a565b60405180910390f35b34801561058257600080fd5b5061058b6115ad565b60405161059891906137f5565b60405180910390f35b3480156105ad57600080fd5b506105b66115b3565b6040516105c391906137f5565b60405180910390f35b3480156105d857600080fd5b506105e16115b9565b6040516105ee91906137f5565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613991565b6115bf565b60405161062b91906137f5565b60405180910390f35b34801561064057600080fd5b50610649611607565b005b34801561065757600080fd5b5061066061168f565b60405161066f9392919061395a565b60405180910390f35b34801561068457600080fd5b5061068d6116a7565b60405161069a91906139cd565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613717565b6116cd565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613991565b6116ed565b005b34801561070157600080fd5b5061070a611830565b60405161071791906139cd565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613717565b611836565b005b34801561075557600080fd5b5061075e61196b565b60405161076b91906139cd565b60405180910390f35b34801561078057600080fd5b50610789611995565b60405161079691906137f5565b60405180910390f35b3480156107ab57600080fd5b506107b461199b565b6040516107c1919061365c565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906138da565b611a2d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613717565b611b29565b6040516108279190613772565b60405180910390f35b34801561083c57600080fd5b50610845611c1d565b60405161085291906139cd565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613717565b611c43565b60405161088f9190613772565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613991565b611c5a565b6040516108cc9190613772565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061389a565b611c7a565b60405161090991906137f5565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613907565b611d01565b005b34801561094757600080fd5b50610962600480360381019061095d9190613991565b611ec3565b005b34801561097057600080fd5b50610979611fba565b6040516109889392919061395a565b60405180910390f35b34801561099d57600080fd5b506109a6611fd2565b6040516109b39190613a47565b60405180910390f35b3480156109c857600080fd5b506109d1611ff8565b6040516109de9190613772565b60405180910390f35b6060600380546109f690613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613a91565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a8d610a8661200b565b8484612013565b6001905092915050565b610a9f61200b565b73ffffffffffffffffffffffffffffffffffffffff16610abd61196b565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613b0e565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610b4861200b565b73ffffffffffffffffffffffffffffffffffffffff16610b6661196b565b73ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613b0e565b60405180910390fd5b600760169054906101000a900460ff1615610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613b7a565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550610c51610df6565b600a610c5d9190613cfc565b62989680610c6b9190613d47565b600981905550604051806060016040528060148152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610d028484846121dc565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4d61200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613dfb565b60405180910390fd5b610dea85610dd961200b565b8584610de59190613e1b565b612013565b60019150509392505050565b60006012905090565b6000610ea1610e0c61200b565b848460016000610e1a61200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e9c9190613e4f565b612013565b6001905092915050565b610eb361200b565b73ffffffffffffffffffffffffffffffffffffffff16610ed161196b565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613b0e565b60405180910390fd5b600760169054906101000a900460ff16610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90613ecf565b60405180910390fd5b600760179054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613f3b565b60405180910390fd5b610fce610b36565b600a81905550610fdc610b36565b600b81905550610fea610b36565b600c81905550604051806060016040528060018152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015590505060405180606001604052806001815260200160008152602001600081525060126000820151816000015560208201518160010155604082015181600201559050506103e861107d610b36565b6110879190613f8a565b600981905550611095611607565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c546040516110e99392919061395a565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b092860006001600060405161112793929190614031565b60405180910390a1565b61113961200b565b73ffffffffffffffffffffffffffffffffffffffff1661115761196b565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613b0e565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61124461123e61200b565b82612a32565b50565b61124f61200b565b73ffffffffffffffffffffffffffffffffffffffff1661126d61196b565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613b0e565b60405180910390fd5b6298968081111580156112d65750600081115b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c906140da565b60405180910390fd5b61131d610df6565b600a6113299190613cfc565b816113349190613d47565b60098190555050565b600760179054906101000a900460ff1681565b61135861200b565b73ffffffffffffffffffffffffffffffffffffffff1661137661196b565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390613b0e565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f60008201518160000155602082015181600101556040820151816002015590505060148183856114199190613e4f565b6114239190613e4f565b1115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614146565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b61148461200b565b73ffffffffffffffffffffffffffffffffffffffff166114a261196b565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613b0e565b60405180910390fd5b604051806060016040528084815260200183815260200182815250601260008201518160000155602082015181600101556040820151816002015590505060318183856115459190613e4f565b61154f9190613e4f565b1115611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906141b2565b60405180910390fd5b505050565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61160f61200b565b73ffffffffffffffffffffffffffffffffffffffff1661162d61196b565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613b0e565b60405180910390fd5b61168d6000612c02565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116df826116d961200b565b83612cc8565b6116e98282612a32565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061421e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906142b0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd9061421e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119239291906142d0565b6020604051808303816000875af1158015611942573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611966919061430e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b6060600480546119aa90613a91565b80601f01602080910402602001604051908101604052809291908181526020018280546119d690613a91565b8015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab49061421e565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b25573d6000803e3d6000fd5b5050565b60008060016000611b3861200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906143ad565b60405180910390fd5b611c12611c0061200b565b858584611c0d9190613e1b565b612013565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c503384846121dc565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d0961200b565b73ffffffffffffffffffffffffffffffffffffffff16611d2761196b565b73ffffffffffffffffffffffffffffffffffffffff1614611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613b0e565b60405180910390fd5b620f4240831015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061443f565b60405180910390fd5b620f4240821015611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e00906144d1565b60405180910390fd5b624c4b40811015611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614563565b60405180910390fd5b611e57610df6565b600a611e639190613cfc565b83611e6e9190613d47565b600a81905550611e7c610df6565b600a611e889190613cfc565b82611e939190613d47565b600b81905550611ea1610df6565b600a611ead9190613cfc565b81611eb89190613d47565b600c81905550505050565b611ecb61200b565b73ffffffffffffffffffffffffffffffffffffffff16611ee961196b565b73ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690613b0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906145f5565b60405180910390fd5b611fb781612c02565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614719565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121cf91906137f5565b60405180910390a3505050565b6000811161221f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612216906147ab565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122c35750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231857600760169054906101000a900460ff16612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e90614817565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156123bf5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d85750600760149054906101000a900460ff16155b1561247b57600a54811115612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990614883565b60405180910390fd5b600c548161242f846115bf565b6124399190613e4f565b111561247a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612471906148ef565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125235750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125795750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125925750600760149054906101000a900460ff16155b1561268b57600b548111156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061495b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461268a57600c548161263e846115bf565b6126489190613e4f565b1115612689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612680906148ef565b60405180910390fd5b5b5b600080600080600061269b6135ab565b600760149054906101000a900460ff16806126ff5750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127535750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127615760009350612908565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361280b576012600001546012600101546127cc9190613e4f565b95508594506012600201549250601260405180606001604052908160008201548152602001600182015481526020016002820154815250509050612907565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036128b557600f60000154600f600101546128769190613e4f565b9550859450600f600201549250600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509050612906565b6015600001546015600101546128cb9190613e4f565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886129169190613d47565b6129209190613f8a565b9350606483886129309190613d47565b61293a9190613f8a565b9150600760159054906101000a900460ff1680156129a65750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156129b6576129b58682612d54565b5b6129d7898984876129c79190613e4f565b8a6129d29190613e1b565b612ef8565b60008211156129eb576129ea8983612a32565b5b6000841115612a27576000861115612a2657600060648789612a0d9190613d47565b612a179190613f8a565b9050612a248a3083612ef8565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a98906149ed565b60405180910390fd5b612aae8261dead8361316a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614a7f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612be891906137f5565b60405180910390a3612bfd8361dead8461316f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cd48484611c7a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d4e5781811015612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790614aeb565b60405180910390fd5b612d4d8484848403612013565b5b50505050565b600760149054906101000a900460ff16612ef4576001600760146101000a81548160ff0219169083151502179055506000820315612ed8576000612d97306115bf565b90506009548110612ed65760016009541115612db35760095490505b6000600284612dc29190613d47565b9050600081846020015184612dd79190613d47565b612de19190613f8a565b905060008184612df19190613e1b565b90506000479050612e0182613174565b60008147612e0f9190613e1b565b90506000876020015186612e239190613e1b565b82612e2e9190613f8a565b90506000886020015182612e429190613d47565b90506000811115612e5857612e5786826133b7565b5b60008960000151600284612e6c9190613d47565b612e769190613d47565b90506000811115612ecd57612ecc81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134b790919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614b7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd90614c0f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305390614ca1565b60405180910390fd5b81816130689190613e1b565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f89190613e4f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315c91906137f5565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff81111561319157613190614cc1565b5b6040519080825280602002602001820160405280156131bf5781602001602082028036833780820191505090505b50905030816000815181106131d7576131d6614cf0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a29190614d34565b816001815181106132b6576132b5614cf0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061331d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612013565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613381959493929190614e1f565b600060405180830381600087803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b505050505050565b6133e430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612013565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161346d96959493929190614e79565b60606040518083038185885af115801561348b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b09190614eef565b5050505050565b804710156134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614f8e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161352090614fdf565b60006040518083038185875af1925050503d806000811461355d576040519150601f19603f3d011682016040523d82523d6000602084013e613562565b606091505b50509050806135a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359d90615066565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156136065780820151818401526020810190506135eb565b60008484015250505050565b6000601f19601f8301169050919050565b600061362e826135cc565b61363881856135d7565b93506136488185602086016135e8565b61365181613612565b840191505092915050565b600060208201905081810360008301526136768184613623565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136ae82613683565b9050919050565b6136be816136a3565b81146136c957600080fd5b50565b6000813590506136db816136b5565b92915050565b6000819050919050565b6136f4816136e1565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000806040838503121561372e5761372d61367e565b5b600061373c858286016136cc565b925050602061374d85828601613702565b9150509250929050565b60008115159050919050565b61376c81613757565b82525050565b60006020820190506137876000830184613763565b92915050565b61379681613757565b81146137a157600080fd5b50565b6000813590506137b38161378d565b92915050565b6000602082840312156137cf576137ce61367e565b5b60006137dd848285016137a4565b91505092915050565b6137ef816136e1565b82525050565b600060208201905061380a60008301846137e6565b92915050565b6000806000606084860312156138295761382861367e565b5b6000613837868287016136cc565b9350506020613848868287016136cc565b925050604061385986828701613702565b9150509250925092565b600060ff82169050919050565b61387981613863565b82525050565b60006020820190506138946000830184613870565b92915050565b600080604083850312156138b1576138b061367e565b5b60006138bf858286016136cc565b92505060206138d0858286016136cc565b9150509250929050565b6000602082840312156138f0576138ef61367e565b5b60006138fe84828501613702565b91505092915050565b6000806000606084860312156139205761391f61367e565b5b600061392e86828701613702565b935050602061393f86828701613702565b925050604061395086828701613702565b9150509250925092565b600060608201905061396f60008301866137e6565b61397c60208301856137e6565b61398960408301846137e6565b949350505050565b6000602082840312156139a7576139a661367e565b5b60006139b5848285016136cc565b91505092915050565b6139c7816136a3565b82525050565b60006020820190506139e260008301846139be565b92915050565b6000819050919050565b6000613a0d613a08613a0384613683565b6139e8565b613683565b9050919050565b6000613a1f826139f2565b9050919050565b6000613a3182613a14565b9050919050565b613a4181613a26565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa957607f821691505b602082108103613abc57613abb613a62565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613af86020836135d7565b9150613b0382613ac2565b602082019050919050565b60006020820190508181036000830152613b2781613aeb565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613b646018836135d7565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613c2057808604811115613bfc57613bfb613b9a565b5b6001851615613c0b5780820291505b8081029050613c1985613bc9565b9450613be0565b94509492505050565b600082613c395760019050613cf5565b81613c475760009050613cf5565b8160018114613c5d5760028114613c6757613c96565b6001915050613cf5565b60ff841115613c7957613c78613b9a565b5b8360020a915084821115613c9057613c8f613b9a565b5b50613cf5565b5060208310610133831016604e8410600b8410161715613ccb5782820a905083811115613cc657613cc5613b9a565b5b613cf5565b613cd88484846001613bd6565b92509050818404811115613cef57613cee613b9a565b5b81810290505b9392505050565b6000613d07826136e1565b9150613d1283613863565b9250613d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c29565b905092915050565b6000613d52826136e1565b9150613d5d836136e1565b9250828202613d6b816136e1565b91508282048414831517613d8257613d81613b9a565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613de56028836135d7565b9150613df082613d89565b604082019050919050565b60006020820190508181036000830152613e1481613dd8565b9050919050565b6000613e26826136e1565b9150613e31836136e1565b9250828203905081811115613e4957613e48613b9a565b5b92915050565b6000613e5a826136e1565b9150613e65836136e1565b9250828201905080821115613e7d57613e7c613b9a565b5b92915050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b6000613eb96015836135d7565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b6000613f256011836135d7565b9150613f3082613eef565b602082019050919050565b60006020820190508181036000830152613f5481613f18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f95826136e1565b9150613fa0836136e1565b925082613fb057613faf613f5b565b5b828204905092915050565b6000819050919050565b6000613fe0613fdb613fd684613fbb565b6139e8565b6136e1565b9050919050565b613ff081613fc5565b82525050565b6000819050919050565b600061401b61401661401184613ff6565b6139e8565b6136e1565b9050919050565b61402b81614000565b82525050565b60006060820190506140466000830186613fe7565b6140536020830185614022565b6140606040830184613fe7565b949350505050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f203125206f6620746f6b656e730000602082015250565b60006140c4603e836135d7565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614130601d836135d7565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b600061419c601d836135d7565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000614208600f836135d7565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061429a6022836135d7565b91506142a58261423e565b604082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b60006040820190506142e560008301856139be565b6142f260208301846137e6565b9392505050565b6000815190506143088161378d565b92915050565b6000602082840312156143245761432361367e565b5b6000614332848285016142f9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143976025836135d7565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006144296029836135d7565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b60006144bb602a836135d7565b91506144c68261445f565b604082019050919050565b600060208201905081810360008301526144ea816144ae565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b600061454d602c836135d7565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145df6026836135d7565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146716024836135d7565b915061467c82614615565b604082019050919050565b600060208201905081810360008301526146a081614664565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147036022836135d7565b915061470e826146a7565b604082019050919050565b60006020820190508181036000830152614732816146f6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006147956029836135d7565b91506147a082614739565b604082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006148016013836135d7565b915061480c826147cb565b602082019050919050565b60006020820190508181036000830152614830816147f4565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b600061486d601d836135d7565b915061487882614837565b602082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006148d96020836135d7565b91506148e4826148a3565b602082019050919050565b60006020820190508181036000830152614908816148cc565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b6000614945601e836135d7565b91506149508261490f565b602082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d76021836135d7565b91506149e28261497b565b604082019050919050565b60006020820190508181036000830152614a06816149ca565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a696022836135d7565b9150614a7482614a0d565b604082019050919050565b60006020820190508181036000830152614a9881614a5c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ad5601d836135d7565b9150614ae082614a9f565b602082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b676025836135d7565b9150614b7282614b0b565b604082019050919050565b60006020820190508181036000830152614b9681614b5a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf96023836135d7565b9150614c0482614b9d565b604082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8b6026836135d7565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d2e816136b5565b92915050565b600060208284031215614d4a57614d4961367e565b5b6000614d5884828501614d1f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d96816136a3565b82525050565b6000614da88383614d8d565b60208301905092915050565b6000602082019050919050565b6000614dcc82614d61565b614dd68185614d6c565b9350614de183614d7d565b8060005b83811015614e12578151614df98882614d9c565b9750614e0483614db4565b925050600181019050614de5565b5085935050505092915050565b600060a082019050614e3460008301886137e6565b614e416020830187613fe7565b8181036040830152614e538186614dc1565b9050614e6260608301856139be565b614e6f60808301846137e6565b9695505050505050565b600060c082019050614e8e60008301896139be565b614e9b60208301886137e6565b614ea86040830187613fe7565b614eb56060830186613fe7565b614ec260808301856139be565b614ecf60a08301846137e6565b979650505050505050565b600081519050614ee9816136eb565b92915050565b600080600060608486031215614f0857614f0761367e565b5b6000614f1686828701614eda565b9350506020614f2786828701614eda565b9250506040614f3886828701614eda565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614f78601d836135d7565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b600081905092915050565b50565b6000614fc9600083614fae565b9150614fd482614fb9565b600082019050919050565b6000614fea82614fbc565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615050603a836135d7565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b905091905056fea2646970667358221220b459f4d51a715281d3ac1861ae7b3e91d4484b30336bd860261b4830175a09bd64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a08231116101445780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e146108d5578063e1b450ad14610912578063f2fde38b1461093b578063f66895a314610964578063f887ea4014610991578063fbe6324e146109bc57610267565b80639e252f00146107ca578063a457c2d7146107f3578063a8aa1b3114610830578063a9059cbb1461085b578063c5d32bb21461089857610267565b8063848b86e311610108578063848b86e3146106cc57806385141a77146106f55780638cd4426d146107205780638da5cb5b146107495780638de890bd1461077457806395d89b411461079f57610267565b806370a08231146105f7578063715018a614610634578063728f8eea1461064b57806375f0a8741461067857806379cc6790146106a357610267565b806340b28c2f116101dd5780634ada218b116101a15780634ada218b146104f55780634e736f22146105205780635331803c14610549578063652e2f041461057657806366a88d96146105a15780636aa5b37f146105cc57610267565b806340b28c2f1461042657806342966c681461044f57806342b6fa111461047857806348c34a60146104a15780634a2b3b13146104cc57610267565b80631c1702f3116102245780631c1702f31461035357806323b872dd1461036a578063313ce567146103a757806339509351146103d25780633b3475d81461040f57610267565b806306fdde031461026c578063095ea7b3146102975780631340538f146102d45780631675d802146102fd57806318160ddd1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e7565b60405161028e919061365c565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613717565b610a79565b6040516102cb9190613772565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906137b9565b610a97565b005b34801561030957600080fd5b50610312610b30565b60405161031f91906137f5565b60405180910390f35b34801561033457600080fd5b5061033d610b36565b60405161034a91906137f5565b60405180910390f35b34801561035f57600080fd5b50610368610b40565b005b34801561037657600080fd5b50610391600480360381019061038c9190613810565b610cf5565b60405161039e9190613772565b60405180910390f35b3480156103b357600080fd5b506103bc610df6565b6040516103c9919061387f565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613717565b610dff565b6040516104069190613772565b60405180910390f35b34801561041b57600080fd5b50610424610eab565b005b34801561043257600080fd5b5061044d6004803603810190610448919061389a565b611131565b005b34801561045b57600080fd5b50610476600480360381019061047191906138da565b611233565b005b34801561048457600080fd5b5061049f600480360381019061049a91906138da565b611247565b005b3480156104ad57600080fd5b506104b661133d565b6040516104c39190613772565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613907565b611350565b005b34801561050157600080fd5b5061050a611469565b6040516105179190613772565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613907565b61147c565b005b34801561055557600080fd5b5061055e611595565b60405161056d9392919061395a565b60405180910390f35b34801561058257600080fd5b5061058b6115ad565b60405161059891906137f5565b60405180910390f35b3480156105ad57600080fd5b506105b66115b3565b6040516105c391906137f5565b60405180910390f35b3480156105d857600080fd5b506105e16115b9565b6040516105ee91906137f5565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613991565b6115bf565b60405161062b91906137f5565b60405180910390f35b34801561064057600080fd5b50610649611607565b005b34801561065757600080fd5b5061066061168f565b60405161066f9392919061395a565b60405180910390f35b34801561068457600080fd5b5061068d6116a7565b60405161069a91906139cd565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613717565b6116cd565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613991565b6116ed565b005b34801561070157600080fd5b5061070a611830565b60405161071791906139cd565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190613717565b611836565b005b34801561075557600080fd5b5061075e61196b565b60405161076b91906139cd565b60405180910390f35b34801561078057600080fd5b50610789611995565b60405161079691906137f5565b60405180910390f35b3480156107ab57600080fd5b506107b461199b565b6040516107c1919061365c565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec91906138da565b611a2d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613717565b611b29565b6040516108279190613772565b60405180910390f35b34801561083c57600080fd5b50610845611c1d565b60405161085291906139cd565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613717565b611c43565b60405161088f9190613772565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613991565b611c5a565b6040516108cc9190613772565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061389a565b611c7a565b60405161090991906137f5565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613907565b611d01565b005b34801561094757600080fd5b50610962600480360381019061095d9190613991565b611ec3565b005b34801561097057600080fd5b50610979611fba565b6040516109889392919061395a565b60405180910390f35b34801561099d57600080fd5b506109a6611fd2565b6040516109b39190613a47565b60405180910390f35b3480156109c857600080fd5b506109d1611ff8565b6040516109de9190613772565b60405180910390f35b6060600380546109f690613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2290613a91565b8015610a6f5780601f10610a4457610100808354040283529160200191610a6f565b820191906000526020600020905b815481529060010190602001808311610a5257829003601f168201915b5050505050905090565b6000610a8d610a8661200b565b8484612013565b6001905092915050565b610a9f61200b565b73ffffffffffffffffffffffffffffffffffffffff16610abd61196b565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613b0e565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610b4861200b565b73ffffffffffffffffffffffffffffffffffffffff16610b6661196b565b73ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613b0e565b60405180910390fd5b600760169054906101000a900460ff1615610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390613b7a565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550610c51610df6565b600a610c5d9190613cfc565b62989680610c6b9190613d47565b600981905550604051806060016040528060148152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610d028484846121dc565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4d61200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613dfb565b60405180910390fd5b610dea85610dd961200b565b8584610de59190613e1b565b612013565b60019150509392505050565b60006012905090565b6000610ea1610e0c61200b565b848460016000610e1a61200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e9c9190613e4f565b612013565b6001905092915050565b610eb361200b565b73ffffffffffffffffffffffffffffffffffffffff16610ed161196b565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613b0e565b60405180910390fd5b600760169054906101000a900460ff16610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90613ecf565b60405180910390fd5b600760179054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613f3b565b60405180910390fd5b610fce610b36565b600a81905550610fdc610b36565b600b81905550610fea610b36565b600c81905550604051806060016040528060018152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015590505060405180606001604052806001815260200160008152602001600081525060126000820151816000015560208201518160010155604082015181600201559050506103e861107d610b36565b6110879190613f8a565b600981905550611095611607565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c546040516110e99392919061395a565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b092860006001600060405161112793929190614031565b60405180910390a1565b61113961200b565b73ffffffffffffffffffffffffffffffffffffffff1661115761196b565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613b0e565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61124461123e61200b565b82612a32565b50565b61124f61200b565b73ffffffffffffffffffffffffffffffffffffffff1661126d61196b565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90613b0e565b60405180910390fd5b6298968081111580156112d65750600081115b611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c906140da565b60405180910390fd5b61131d610df6565b600a6113299190613cfc565b816113349190613d47565b60098190555050565b600760179054906101000a900460ff1681565b61135861200b565b73ffffffffffffffffffffffffffffffffffffffff1661137661196b565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390613b0e565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f60008201518160000155602082015181600101556040820151816002015590505060148183856114199190613e4f565b6114239190613e4f565b1115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614146565b60405180910390fd5b505050565b600760169054906101000a900460ff1681565b61148461200b565b73ffffffffffffffffffffffffffffffffffffffff166114a261196b565b73ffffffffffffffffffffffffffffffffffffffff16146114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613b0e565b60405180910390fd5b604051806060016040528084815260200183815260200182815250601260008201518160000155602082015181600101556040820151816002015590505060318183856115459190613e4f565b61154f9190613e4f565b1115611590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611587906141b2565b60405180910390fd5b505050565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61160f61200b565b73ffffffffffffffffffffffffffffffffffffffff1661162d61196b565b73ffffffffffffffffffffffffffffffffffffffff1614611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613b0e565b60405180910390fd5b61168d6000612c02565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116df826116d961200b565b83612cc8565b6116e98282612a32565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117749061421e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906142b0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd9061421e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119239291906142d0565b6020604051808303816000875af1158015611942573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611966919061430e565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b6060600480546119aa90613a91565b80601f01602080910402602001604051908101604052809291908181526020018280546119d690613a91565b8015611a235780601f106119f857610100808354040283529160200191611a23565b820191906000526020600020905b815481529060010190602001808311611a0657829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab49061421e565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b25573d6000803e3d6000fd5b5050565b60008060016000611b3861200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec906143ad565b60405180910390fd5b611c12611c0061200b565b858584611c0d9190613e1b565b612013565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c503384846121dc565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d0961200b565b73ffffffffffffffffffffffffffffffffffffffff16611d2761196b565b73ffffffffffffffffffffffffffffffffffffffff1614611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7490613b0e565b60405180910390fd5b620f4240831015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061443f565b60405180910390fd5b620f4240821015611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e00906144d1565b60405180910390fd5b624c4b40811015611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614563565b60405180910390fd5b611e57610df6565b600a611e639190613cfc565b83611e6e9190613d47565b600a81905550611e7c610df6565b600a611e889190613cfc565b82611e939190613d47565b600b81905550611ea1610df6565b600a611ead9190613cfc565b81611eb89190613d47565b600c81905550505050565b611ecb61200b565b73ffffffffffffffffffffffffffffffffffffffff16611ee961196b565b73ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3690613b0e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906145f5565b60405180910390fd5b611fb781612c02565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614687565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614719565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121cf91906137f5565b60405180910390a3505050565b6000811161221f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612216906147ab565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122c35750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231857600760169054906101000a900460ff16612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e90614817565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156123bf5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123d85750600760149054906101000a900460ff16155b1561247b57600a54811115612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990614883565b60405180910390fd5b600c548161242f846115bf565b6124399190613e4f565b111561247a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612471906148ef565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125235750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125795750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125925750600760149054906101000a900460ff16155b1561268b57600b548111156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d39061495b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461268a57600c548161263e846115bf565b6126489190613e4f565b1115612689576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612680906148ef565b60405180910390fd5b5b5b600080600080600061269b6135ab565b600760149054906101000a900460ff16806126ff5750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127535750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127615760009350612908565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361280b576012600001546012600101546127cc9190613e4f565b95508594506012600201549250601260405180606001604052908160008201548152602001600182015481526020016002820154815250509050612907565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036128b557600f60000154600f600101546128769190613e4f565b9550859450600f600201549250600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509050612906565b6015600001546015600101546128cb9190613e4f565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886129169190613d47565b6129209190613f8a565b9350606483886129309190613d47565b61293a9190613f8a565b9150600760159054906101000a900460ff1680156129a65750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156129b6576129b58682612d54565b5b6129d7898984876129c79190613e4f565b8a6129d29190613e1b565b612ef8565b60008211156129eb576129ea8983612a32565b5b6000841115612a27576000861115612a2657600060648789612a0d9190613d47565b612a179190613f8a565b9050612a248a3083612ef8565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a98906149ed565b60405180910390fd5b612aae8261dead8361316a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614a7f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612be891906137f5565b60405180910390a3612bfd8361dead8461316f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cd48484611c7a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d4e5781811015612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790614aeb565b60405180910390fd5b612d4d8484848403612013565b5b50505050565b600760149054906101000a900460ff16612ef4576001600760146101000a81548160ff0219169083151502179055506000820315612ed8576000612d97306115bf565b90506009548110612ed65760016009541115612db35760095490505b6000600284612dc29190613d47565b9050600081846020015184612dd79190613d47565b612de19190613f8a565b905060008184612df19190613e1b565b90506000479050612e0182613174565b60008147612e0f9190613e1b565b90506000876020015186612e239190613e1b565b82612e2e9190613f8a565b90506000886020015182612e429190613d47565b90506000811115612e5857612e5786826133b7565b5b60008960000151600284612e6c9190613d47565b612e769190613d47565b90506000811115612ecd57612ecc81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166134b790919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e90614b7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fcd90614c0f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305390614ca1565b60405180910390fd5b81816130689190613e1b565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f89190613e4f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161315c91906137f5565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff81111561319157613190614cc1565b5b6040519080825280602002602001820160405280156131bf5781602001602082028036833780820191505090505b50905030816000815181106131d7576131d6614cf0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a29190614d34565b816001815181106132b6576132b5614cf0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061331d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612013565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613381959493929190614e1f565b600060405180830381600087803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b505050505050565b6133e430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612013565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161346d96959493929190614e79565b60606040518083038185885af115801561348b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134b09190614eef565b5050505050565b804710156134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614f8e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161352090614fdf565b60006040518083038185875af1925050503d806000811461355d576040519150601f19603f3d011682016040523d82523d6000602084013e613562565b606091505b50509050806135a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359d90615066565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156136065780820151818401526020810190506135eb565b60008484015250505050565b6000601f19601f8301169050919050565b600061362e826135cc565b61363881856135d7565b93506136488185602086016135e8565b61365181613612565b840191505092915050565b600060208201905081810360008301526136768184613623565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136ae82613683565b9050919050565b6136be816136a3565b81146136c957600080fd5b50565b6000813590506136db816136b5565b92915050565b6000819050919050565b6136f4816136e1565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000806040838503121561372e5761372d61367e565b5b600061373c858286016136cc565b925050602061374d85828601613702565b9150509250929050565b60008115159050919050565b61376c81613757565b82525050565b60006020820190506137876000830184613763565b92915050565b61379681613757565b81146137a157600080fd5b50565b6000813590506137b38161378d565b92915050565b6000602082840312156137cf576137ce61367e565b5b60006137dd848285016137a4565b91505092915050565b6137ef816136e1565b82525050565b600060208201905061380a60008301846137e6565b92915050565b6000806000606084860312156138295761382861367e565b5b6000613837868287016136cc565b9350506020613848868287016136cc565b925050604061385986828701613702565b9150509250925092565b600060ff82169050919050565b61387981613863565b82525050565b60006020820190506138946000830184613870565b92915050565b600080604083850312156138b1576138b061367e565b5b60006138bf858286016136cc565b92505060206138d0858286016136cc565b9150509250929050565b6000602082840312156138f0576138ef61367e565b5b60006138fe84828501613702565b91505092915050565b6000806000606084860312156139205761391f61367e565b5b600061392e86828701613702565b935050602061393f86828701613702565b925050604061395086828701613702565b9150509250925092565b600060608201905061396f60008301866137e6565b61397c60208301856137e6565b61398960408301846137e6565b949350505050565b6000602082840312156139a7576139a661367e565b5b60006139b5848285016136cc565b91505092915050565b6139c7816136a3565b82525050565b60006020820190506139e260008301846139be565b92915050565b6000819050919050565b6000613a0d613a08613a0384613683565b6139e8565b613683565b9050919050565b6000613a1f826139f2565b9050919050565b6000613a3182613a14565b9050919050565b613a4181613a26565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa957607f821691505b602082108103613abc57613abb613a62565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613af86020836135d7565b9150613b0382613ac2565b602082019050919050565b60006020820190508181036000830152613b2781613aeb565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613b646018836135d7565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613c2057808604811115613bfc57613bfb613b9a565b5b6001851615613c0b5780820291505b8081029050613c1985613bc9565b9450613be0565b94509492505050565b600082613c395760019050613cf5565b81613c475760009050613cf5565b8160018114613c5d5760028114613c6757613c96565b6001915050613cf5565b60ff841115613c7957613c78613b9a565b5b8360020a915084821115613c9057613c8f613b9a565b5b50613cf5565b5060208310610133831016604e8410600b8410161715613ccb5782820a905083811115613cc657613cc5613b9a565b5b613cf5565b613cd88484846001613bd6565b92509050818404811115613cef57613cee613b9a565b5b81810290505b9392505050565b6000613d07826136e1565b9150613d1283613863565b9250613d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c29565b905092915050565b6000613d52826136e1565b9150613d5d836136e1565b9250828202613d6b816136e1565b91508282048414831517613d8257613d81613b9a565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613de56028836135d7565b9150613df082613d89565b604082019050919050565b60006020820190508181036000830152613e1481613dd8565b9050919050565b6000613e26826136e1565b9150613e31836136e1565b9250828203905081811115613e4957613e48613b9a565b5b92915050565b6000613e5a826136e1565b9150613e65836136e1565b9250828201905080821115613e7d57613e7c613b9a565b5b92915050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b6000613eb96015836135d7565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b6000613f256011836135d7565b9150613f3082613eef565b602082019050919050565b60006020820190508181036000830152613f5481613f18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f95826136e1565b9150613fa0836136e1565b925082613fb057613faf613f5b565b5b828204905092915050565b6000819050919050565b6000613fe0613fdb613fd684613fbb565b6139e8565b6136e1565b9050919050565b613ff081613fc5565b82525050565b6000819050919050565b600061401b61401661401184613ff6565b6139e8565b6136e1565b9050919050565b61402b81614000565b82525050565b60006060820190506140466000830186613fe7565b6140536020830185614022565b6140606040830184613fe7565b949350505050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f203125206f6620746f6b656e730000602082015250565b60006140c4603e836135d7565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614130601d836135d7565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4d757374206b656570206665657320617420343925206f72206c657373000000600082015250565b600061419c601d836135d7565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000614208600f836135d7565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061429a6022836135d7565b91506142a58261423e565b604082019050919050565b600060208201905081810360008301526142c98161428d565b9050919050565b60006040820190506142e560008301856139be565b6142f260208301846137e6565b9392505050565b6000815190506143088161378d565b92915050565b6000602082840312156143245761432361367e565b5b6000614332848285016142f9565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143976025836135d7565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006144296029836135d7565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b60006144bb602a836135d7565b91506144c68261445f565b604082019050919050565b600060208201905081810360008301526144ea816144ae565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b600061454d602c836135d7565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145df6026836135d7565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146716024836135d7565b915061467c82614615565b604082019050919050565b600060208201905081810360008301526146a081614664565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147036022836135d7565b915061470e826146a7565b604082019050919050565b60006020820190508181036000830152614732816146f6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006147956029836135d7565b91506147a082614739565b604082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006148016013836135d7565b915061480c826147cb565b602082019050919050565b60006020820190508181036000830152614830816147f4565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b600061486d601d836135d7565b915061487882614837565b602082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006148d96020836135d7565b91506148e4826148a3565b602082019050919050565b60006020820190508181036000830152614908816148cc565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b6000614945601e836135d7565b91506149508261490f565b602082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d76021836135d7565b91506149e28261497b565b604082019050919050565b60006020820190508181036000830152614a06816149ca565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a696022836135d7565b9150614a7482614a0d565b604082019050919050565b60006020820190508181036000830152614a9881614a5c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ad5601d836135d7565b9150614ae082614a9f565b602082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b676025836135d7565b9150614b7282614b0b565b604082019050919050565b60006020820190508181036000830152614b9681614b5a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf96023836135d7565b9150614c0482614b9d565b604082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8b6026836135d7565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614d2e816136b5565b92915050565b600060208284031215614d4a57614d4961367e565b5b6000614d5884828501614d1f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d96816136a3565b82525050565b6000614da88383614d8d565b60208301905092915050565b6000602082019050919050565b6000614dcc82614d61565b614dd68185614d6c565b9350614de183614d7d565b8060005b83811015614e12578151614df98882614d9c565b9750614e0483614db4565b925050600181019050614de5565b5085935050505092915050565b600060a082019050614e3460008301886137e6565b614e416020830187613fe7565b8181036040830152614e538186614dc1565b9050614e6260608301856139be565b614e6f60808301846137e6565b9695505050505050565b600060c082019050614e8e60008301896139be565b614e9b60208301886137e6565b614ea86040830187613fe7565b614eb56060830186613fe7565b614ec260808301856139be565b614ecf60a08301846137e6565b979650505050505050565b600081519050614ee9816136eb565b92915050565b600080600060608486031215614f0857614f0761367e565b5b6000614f1686828701614eda565b9350506020614f2786828701614eda565b9250506040614f3886828701614eda565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614f78601d836135d7565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b600081905092915050565b50565b6000614fc9600083614fae565b9150614fd482614fb9565b600082019050919050565b6000614fea82614fbc565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615050603a836135d7565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b905091905056fea2646970667358221220b459f4d51a715281d3ac1861ae7b3e91d4484b30336bd860261b4830175a09bd64736f6c63430008130033

Deployed Bytecode Sourcemap

16086:12851:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18445:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25364:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16446:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3704:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25894:361;;;;;;;;;;;;;:::i;:::-;;18614:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3546:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19070:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27810:702;;;;;;;;;;;;;:::i;:::-;;26263:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15505:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25524:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16370:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26692:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16329:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26986:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17153:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16583:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16646:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16520:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3875:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13789:94;;;;;;;;;;;;;:::i;:::-;;17065:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16714:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15915:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26426:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16869:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28692:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13566:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16407:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2803:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28520:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19326:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16218:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19744:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17205:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4494:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27284:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13891:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16190:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16284:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2584:100;2638:13;2671:5;2664:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:100;:::o;18445:161::-;18520:4;18537:39;18546:12;:10;:12::i;:::-;18560:7;18569:6;18537:8;:39::i;:::-;18594:4;18587:11;;18445:161;;;;:::o;25364:152::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25503:5:::1;25482:18;;:26;;;;;;;;;;;;;;;;;;25364:152:::0;:::o;16446:67::-;;;;:::o;3704:108::-;3765:7;3792:12;;3785:19;;3704:108;:::o;25894:361::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25957:14:::1;;;;;;;;;;;25956:15;25948:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26028:4;26011:14;;:21;;;;;;;;;;;;;;;;;;26064:4;26043:18;;:25;;;;;;;;;;;;;;;;;;26097:12;26079:15;:30;;;;26163:10;:8;:10::i;:::-;26159:2;:14;;;;:::i;:::-;26146:10;:27;;;;:::i;:::-;26120:23;:53;;;;26194:15;;;;;;;;26200:2;26194:15;;;;26204:1;26194:15;;;;26207:1;26194:15;;::::0;26186:5:::1;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;26232:15;;;;;;;;26238:2;26232:15;;;;26242:1;26232:15;;;;26245:1;26232:15;;::::0;26220:9:::1;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;25894:361::o:0;18614:448::-;18746:4;18763:36;18773:6;18781:9;18792:6;18763:9;:36::i;:::-;18812:24;18839:11;:19;18851:6;18839:19;;;;;;;;;;;;;;;:33;18859:12;:10;:12::i;:::-;18839:33;;;;;;;;;;;;;;;;18812:60;;18911:6;18891:16;:26;;18883:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18973:57;18982:6;18990:12;:10;:12::i;:::-;19023:6;19004:16;:25;;;;:::i;:::-;18973:8;:57::i;:::-;19050:4;19043:11;;;18614:448;;;;;:::o;3546:93::-;3604:5;3629:2;3622:9;;3546:93;:::o;19070:248::-;19186:4;19208:80;19217:12;:10;:12::i;:::-;19231:7;19277:10;19240:11;:25;19252:12;:10;:12::i;:::-;19240:25;;;;;;;;;;;;;;;:34;19266:7;19240:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19208:8;:80::i;:::-;19306:4;19299:11;;19070:248;;;;:::o;27810:702::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:14:::1;;;;;;;;;;;27863:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27931:8;;;;;;;;;;;27930:9;27922:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;27986:13;:11;:13::i;:::-;27972:11;:27;;;;28043:13;:11;:13::i;:::-;28028:12;:28;;;;28102:13;:11;:13::i;:::-;28085:14;:30;;;;28154:14;;;;;;;;28160:1;28154:14;;;;28163:1;28154:14;;;;28166:1;28154:14;;::::0;28146:5:::1;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;28214:14;;;;;;;;28220:1;28214:14;;;;28223:1;28214:14;;;;28226:1;28214:14;;::::0;28202:9:::1;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;28306:4;28290:13;:11;:13::i;:::-;:20;;;;:::i;:::-;28264:23;:46;;;;28347:19;:17;:19::i;:::-;28390:4;28379:8;;:15;;;;;;;;;;;;;;;;;;28412:55;28425:11;;28438:12;;28452:14;;28412:55;;;;;;;;:::i;:::-;;;;;;;;28483:21;28496:1;28499;28502;28483:21;;;;;;;;:::i;:::-;;;;;;;;27810:702::o:0;26263:155::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26375:9:::1;26358:6;;:27;;;;;;;;;;;;;;;;;;26403:7;26396:4;;:14;;;;;;;;;;;;;;;;;;26263:155:::0;;:::o;15505:91::-;15561:27;15567:12;:10;:12::i;:::-;15581:6;15561:5;:27::i;:::-;15505:91;:::o;25524:305::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25662:10:::1;25648;:24;;:42;;;;;25689:1;25676:10;:14;25648:42;25640:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25811:10;:8;:10::i;:::-;25807:2;:14;;;;:::i;:::-;25794:10;:27;;;;:::i;:::-;25768:23;:53;;;;25524:305:::0;:::o;16370:28::-;;;;;;;;;;;;;:::o;26692:286::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26840:37:::1;;;;;;;;26846:10;26840:37;;;;26858:10;26840:37;;;;26871:5;26840:37;;::::0;26832:5:::1;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;26934:2;26924:5;26910:10;26897;:23;;;;:::i;:::-;:32;;;;:::i;:::-;26896:40;;26888:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26692:286:::0;;;:::o;16329:34::-;;;;;;;;;;;;;:::o;26986:290::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27139:37:::1;;;;;;;;27145:10;27139:37;;;;27157:10;27139:37;;;;27170:5;27139:37;;::::0;27127:9:::1;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;27232:2;27222:5;27209:10;27196;:23;;;;:::i;:::-;:31;;;;:::i;:::-;27195:39;;27187:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26986:290:::0;;;:::o;17153:43::-;;;;;;;;;;;;;;;;;;;:::o;16583:56::-;;;;:::o;16646:59::-;;;;:::o;16520: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;17065:35::-;;;;;;;;;;;;;;;;;;;:::o;16714: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;26426:258::-;26516:8;;;;;;;;;;;26502:22;;:10;:22;;;26494:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26591:1;26563:30;;:16;:30;;;26555:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26660:16;26642:15;;:34;;;;;;;;;;;;;;;;;;26426:258;:::o;16869:79::-;16906:42;16869:79;:::o;28692:187::-;28789:8;;;;;;;;;;;28775:22;;:10;:22;;;28767:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28835:8;28828:25;;;28854:8;;;;;;;;;;;28864:6;28828:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28692:187;;:::o;13566:87::-;13612:7;13639:6;;;;;;;;;;;13632:13;;13566:87;:::o;16407:30::-;;;;:::o;2803:104::-;2859:13;2892:7;2885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:104;:::o;28520:164::-;28600:8;;;;;;;;;;;28586:22;;:10;:22;;;28578:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28647:8;;;;;;;;;;;28639:26;;:37;28666:9;28639:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28520:164;:::o;19326:410::-;19447:4;19469:24;19496:11;:25;19508:12;:10;:12::i;:::-;19496:25;;;;;;;;;;;;;;;:34;19522:7;19496:34;;;;;;;;;;;;;;;;19469:61;;19569:15;19549:16;:35;;19541:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19637:67;19646:12;:10;:12::i;:::-;19660:7;19688:15;19669:16;:34;;;;:::i;:::-;19637:8;:67::i;:::-;19724:4;19717:11;;;19326:410;;;;:::o;16218:19::-;;;;;;;;;;;;;:::o;19744:165::-;19822:4;19839:40;19849:10;19861:9;19872:6;19839:9;:40::i;:::-;19897:4;19890:11;;19744:165;;;;:::o;17205:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4494:201::-;4628:7;4660:11;:18;4672:5;4660:18;;;;;;;;;;;;;;;:27;4679:7;4660:27;;;;;;;;;;;;;;;;4653:34;;4494:201;;;;:::o;27284:518::-;13712:12;:10;:12::i;:::-;13701:23;;:7;:5;:7::i;:::-;:23;;;13693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27410:9:::1;27400:6;:19;;27392:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27495:9;27484:7;:20;;27476:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27583:9;27570;:22;;27562:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27679:10;:8;:10::i;:::-;27675:2;:14;;;;:::i;:::-;27666:6;:23;;;;:::i;:::-;27652:11;:37;;;;27729:10;:8;:10::i;:::-;27725:2;:14;;;;:::i;:::-;27715:7;:24;;;;:::i;:::-;27700:12;:39;;;;27783:10;:8;:10::i;:::-;27779:2;:14;;;;:::i;:::-;27767:9;:26;;;;:::i;:::-;27750:14;:43;;;;27284: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;17107:39::-;;;;;;;;;;;;;;;;;;;:::o;16190:21::-;;;;;;;;;;;;;:::o;16284: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;19917:2939::-;20067:1;20058:6;:10;20050:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20132:9;:17;20142:6;20132:17;;;;;;;;;;;;;;;;;;;;;;;;;20131:18;:43;;;;;20154:9;:20;20164:9;20154:20;;;;;;;;;;;;;;;;;;;;;;;;;20153:21;20131:43;20127:122;;;20199:14;;;;;;;;;;;20191:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;20127:122;20275:4;;;;;;;;;;;20265:14;;:6;:14;;;:39;;;;;20284:9;:20;20294:9;20284:20;;;;;;;;;;;;;;;;;;;;;;;;;20283:21;20265:39;:54;;;;;20309:10;;;;;;;;;;;20308:11;20265:54;20261:306;;;20354:11;;20344:6;:21;;20336:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20473:14;;20463:6;20440:20;20450:9;20440;:20::i;:::-;:29;;;;:::i;:::-;:47;;20414:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20261:306;20607:4;;;;;;;;;;;20597:14;;:6;:14;;;;:39;;;;;20616:9;:20;20626:9;20616:20;;;;;;;;;;;;;;;;;;;;;;;;;20615:21;20597:39;:61;;;;;20641:9;:17;20651:6;20641:17;;;;;;;;;;;;;;;;;;;;;;;;;20640:18;20597:61;:76;;;;;20663:10;;;;;;;;;;;20662:11;20597:76;20579:423;;;20718:12;;20708:6;:22;;20700:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20797:4;;;;;;;;;;;20784:17;;:9;:17;;;20780:211;;20885:14;;20875:6;20852:20;20862:9;20852;:20::i;:::-;:29;;;;:::i;:::-;:47;;20822:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;20780:211;20579:423;21014:15;21040:14;21065:11;21087:15;21113:18;21142:25;;:::i;:::-;21255:10;;;;;;;;;;;:31;;;;21269:9;:17;21279:6;21269:17;;;;;;;;;;;;;;;;;;;;;;;;;21255:31;:55;;;;21290:9;:20;21300:9;21290:20;;;;;;;;;;;;;;;;;;;;;;;;;21255:55;21251:847;;;21331:1;21325:7;;21251:847;;;21396:4;;;;;;;;;;;21383:17;;:9;:17;;;21379:719;;21483:9;:19;;;21444:9;:19;;;:58;;;;:::i;:::-;21417:85;;21526:7;21517:16;;21558:9;:14;;;21548:24;;21602:9;21587:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21379:719;;;21643:4;;;;;;;;;;;21633:14;;:6;:14;;;21629:469;;21726:5;:15;;;21691:5;:15;;;:50;;;;:::i;:::-;21664:77;;21765:7;21756:16;;21797:5;:10;;;21787:20;;21837:5;21822:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21629:469;;;21945:13;:23;;;21902:13;:23;;;:66;;;;:::i;:::-;21875:93;;21993:7;21984:16;;22025:13;:18;;;22015:28;;22073:13;22058:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21629:469;21379:719;21251:847;22136:3;22126:6;22117;:15;;;;:::i;:::-;22116:23;;;;:::i;:::-;22110:29;;22184:3;22173:7;22164:6;:16;;;;:::i;:::-;22163:24;;;;:::i;:::-;22150:37;;22301:18;;;;;;;;;;;:36;;;;;22333:4;;;;;;;;;;;22323:14;;:6;:14;;;;22301:36;22297:72;;;22339:30;22347:7;22356:12;22339:7;:30::i;:::-;22297:72;22411:63;22427:6;22435:9;22462:10;22456:3;:16;;;;:::i;:::-;22446:6;:27;;;;:::i;:::-;22411:15;:63::i;:::-;22529:1;22516:10;:14;22513:77;;;22547:31;22559:6;22567:10;22547:11;:31::i;:::-;22513:77;22610:1;22604:3;:7;22600:249;;;22686:1;22676:7;:11;22672:164;;;22708:17;22749:3;22738:7;22729:6;:16;;;;:::i;:::-;22728:24;;;;:::i;:::-;22708:44;;22771:49;22787:6;22803:4;22810:9;22771:15;:49::i;:::-;22689:147;22672:164;22600:249;20039:2817;;;;;;19917: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;22864:1437::-;17696:10;;;;;;;;;;;17691:110;;17736:4;17723:10;;:17;;;;;;;;;;;;;;;;;;22969:1:::1;22958:7;:12:::0;22955:49;22986:7:::1;22955:49;23016:23;23042:24;23060:4;23042:9;:24::i;:::-;23016:50;;23100:23;;23081:15;:42;23077:1217;;23170:1;23144:23;;:27;23140:109;;;23210:23;;23192:41;;23140:109;23320:19;23352:1;23342:7;:11;;;;:::i;:::-;23320:33;;23368:32;23462:11;23422:9;:19;;;23404:15;:37;;;;:::i;:::-;23403:70;;;;:::i;:::-;23368:105;;23488:14;23523:24;23505:15;:42;;;;:::i;:::-;23488:59;;23564:22;23589:21;23564:46;;23627:24;23644:6;23627:16;:24::i;:::-;23668:20;23715:14;23691:21;:38;;;;:::i;:::-;23668:61;;23744:19;23796:9;:19;;;23782:11;:33;;;;:::i;:::-;23766:12;:50;;;;:::i;:::-;23744:72;;23831:29;23877:9;:19;;;23863:11;:33;;;;:::i;:::-;23831:65;;23941:1;23917:21;:25;23913:172;;;24008:61;24021:24;24047:21;24008:12;:61::i;:::-;23913:172;24101:20;24142:9;:19;;;24138:1;24124:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;24101:60;;24195:1;24180:12;:16;24176:105;;;24217:48;24252:12;24225:15;;;;;;;;;;;24217:34;;;;:48;;;;:::i;:::-;24176:105;23125:1169;;;;;;;;23077:1217;22942:1359;17755:1;17784:5:::0;17771:10;;:18;;;;;;;;;;;;;;;;;;17691:110;22864: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;24309:534::-;24435:21;24473:1;24459:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24435:40;;24504:4;24486;24491:1;24486:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24530:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24520:4;24525:1;24520:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24556:53;24573:4;24588:6;;;;;;;;;;;24597:11;24556:8;:53::i;:::-;24648:6;;;;;;;;;;;:57;;;24720:11;24746:1;24762:4;24789;24809:15;24648:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24364:479;24309:534;:::o;24851:505::-;24999:53;25016:4;25031:6;;;;;;;;;;;25040:11;24999:8;:53::i;:::-;25095:6;;;;;;;;;;;:22;;;25126:9;25160:4;25180:11;25206:1;25249;25292:15;;;;;;;;;;;25322;25095:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24851:505;;:::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:174::-;10573:26;10569:1;10561:6;10557:14;10550:50;10433:174;:::o;10613:366::-;10755:3;10776:67;10840:2;10835:3;10776:67;:::i;:::-;10769:74;;10852:93;10941:3;10852:93;:::i;:::-;10970:2;10965:3;10961:12;10954:19;;10613:366;;;:::o;10985:419::-;11151:4;11189:2;11178:9;11174:18;11166:26;;11238:9;11232:4;11228:20;11224:1;11213:9;11209:17;11202:47;11266:131;11392:4;11266:131;:::i;:::-;11258:139;;10985:419;;;:::o;11410:180::-;11458:77;11455:1;11448:88;11555:4;11552:1;11545:15;11579:4;11576:1;11569:15;11596:102;11638:8;11685:5;11682:1;11678:13;11657:34;;11596:102;;;:::o;11704:848::-;11765:5;11772:4;11796:6;11787:15;;11820:5;11811:14;;11834:712;11855:1;11845:8;11842:15;11834:712;;;11950:4;11945:3;11941:14;11935:4;11932:24;11929:50;;;11959:18;;:::i;:::-;11929:50;12009:1;11999:8;11995:16;11992:451;;;12424:4;12417:5;12413:16;12404:25;;11992:451;12474:4;12468;12464:15;12456:23;;12504:32;12527:8;12504:32;:::i;:::-;12492:44;;11834:712;;;11704:848;;;;;;;:::o;12558:1073::-;12612:5;12803:8;12793:40;;12824:1;12815:10;;12826:5;;12793:40;12852:4;12842:36;;12869:1;12860:10;;12871:5;;12842:36;12938:4;12986:1;12981:27;;;;13022:1;13017:191;;;;12931:277;;12981:27;12999:1;12990:10;;13001:5;;;13017:191;13062:3;13052:8;13049:17;13046:43;;;13069:18;;:::i;:::-;13046:43;13118:8;13115:1;13111:16;13102:25;;13153:3;13146:5;13143:14;13140:40;;;13160:18;;:::i;:::-;13140:40;13193:5;;;12931:277;;13317:2;13307:8;13304:16;13298:3;13292:4;13289:13;13285:36;13267:2;13257:8;13254:16;13249:2;13243:4;13240:12;13236:35;13220:111;13217:246;;;13373:8;13367:4;13363:19;13354:28;;13408:3;13401:5;13398:14;13395:40;;;13415:18;;:::i;:::-;13395:40;13448:5;;13217:246;13488:42;13526:3;13516:8;13510:4;13507:1;13488:42;:::i;:::-;13473:57;;;;13562:4;13557:3;13553:14;13546:5;13543:25;13540:51;;;13571:18;;:::i;:::-;13540:51;13620:4;13613:5;13609:16;13600:25;;12558:1073;;;;;;:::o;13637:281::-;13695:5;13719:23;13737:4;13719:23;:::i;:::-;13711:31;;13763:25;13779:8;13763:25;:::i;:::-;13751:37;;13807:104;13844:66;13834:8;13828:4;13807:104;:::i;:::-;13798:113;;13637:281;;;;:::o;13924:410::-;13964:7;13987:20;14005:1;13987:20;:::i;:::-;13982:25;;14021:20;14039:1;14021:20;:::i;:::-;14016:25;;14076:1;14073;14069:9;14098:30;14116:11;14098:30;:::i;:::-;14087:41;;14277:1;14268:7;14264:15;14261:1;14258:22;14238:1;14231:9;14211:83;14188:139;;14307:18;;:::i;:::-;14188:139;13972:362;13924:410;;;;:::o;14340:227::-;14480:34;14476:1;14468:6;14464:14;14457:58;14549:10;14544:2;14536:6;14532:15;14525:35;14340:227;:::o;14573:366::-;14715:3;14736:67;14800:2;14795:3;14736:67;:::i;:::-;14729:74;;14812:93;14901:3;14812:93;:::i;:::-;14930:2;14925:3;14921:12;14914:19;;14573:366;;;:::o;14945:419::-;15111:4;15149:2;15138:9;15134:18;15126:26;;15198:9;15192:4;15188:20;15184:1;15173:9;15169:17;15162:47;15226:131;15352:4;15226:131;:::i;:::-;15218:139;;14945:419;;;:::o;15370:194::-;15410:4;15430:20;15448:1;15430:20;:::i;:::-;15425:25;;15464:20;15482:1;15464:20;:::i;:::-;15459:25;;15508:1;15505;15501:9;15493:17;;15532:1;15526:4;15523:11;15520:37;;;15537:18;;:::i;:::-;15520:37;15370:194;;;;:::o;15570:191::-;15610:3;15629:20;15647:1;15629:20;:::i;:::-;15624:25;;15663:20;15681:1;15663:20;:::i;:::-;15658:25;;15706:1;15703;15699:9;15692:16;;15727:3;15724:1;15721:10;15718:36;;;15734:18;;:::i;:::-;15718:36;15570:191;;;;:::o;15767:171::-;15907:23;15903:1;15895:6;15891:14;15884:47;15767:171;:::o;15944:366::-;16086:3;16107:67;16171:2;16166:3;16107:67;:::i;:::-;16100:74;;16183:93;16272:3;16183:93;:::i;:::-;16301:2;16296:3;16292:12;16285:19;;15944:366;;;:::o;16316:419::-;16482:4;16520:2;16509:9;16505:18;16497:26;;16569:9;16563:4;16559:20;16555:1;16544:9;16540:17;16533:47;16597:131;16723:4;16597:131;:::i;:::-;16589:139;;16316:419;;;:::o;16741:167::-;16881:19;16877:1;16869:6;16865:14;16858:43;16741:167;:::o;16914:366::-;17056:3;17077:67;17141:2;17136:3;17077:67;:::i;:::-;17070:74;;17153:93;17242:3;17153:93;:::i;:::-;17271:2;17266:3;17262:12;17255:19;;16914:366;;;:::o;17286:419::-;17452:4;17490:2;17479:9;17475:18;17467:26;;17539:9;17533:4;17529:20;17525:1;17514:9;17510:17;17503:47;17567:131;17693:4;17567:131;:::i;:::-;17559:139;;17286:419;;;:::o;17711:180::-;17759:77;17756:1;17749:88;17856:4;17853:1;17846:15;17880:4;17877:1;17870:15;17897:185;17937:1;17954:20;17972:1;17954:20;:::i;:::-;17949:25;;17988:20;18006:1;17988:20;:::i;:::-;17983:25;;18027:1;18017:35;;18032:18;;:::i;:::-;18017:35;18074:1;18071;18067:9;18062:14;;17897:185;;;;:::o;18088:85::-;18133:7;18162:5;18151:16;;18088:85;;;:::o;18179:158::-;18237:9;18270:61;18288:42;18297:32;18323:5;18297:32;:::i;:::-;18288:42;:::i;:::-;18270:61;:::i;:::-;18257:74;;18179:158;;;:::o;18343:147::-;18438:45;18477:5;18438:45;:::i;:::-;18433:3;18426:58;18343:147;;:::o;18496:85::-;18541:7;18570:5;18559:16;;18496:85;;;:::o;18587:158::-;18645:9;18678:61;18696:42;18705:32;18731:5;18705:32;:::i;:::-;18696:42;:::i;:::-;18678:61;:::i;:::-;18665:74;;18587:158;;;:::o;18751:147::-;18846:45;18885:5;18846:45;:::i;:::-;18841:3;18834:58;18751:147;;:::o;18904:490::-;19077:4;19115:2;19104:9;19100:18;19092:26;;19128:79;19204:1;19193:9;19189:17;19180:6;19128:79;:::i;:::-;19217:80;19293:2;19282:9;19278:18;19269:6;19217:80;:::i;:::-;19307;19383:2;19372:9;19368:18;19359:6;19307:80;:::i;:::-;18904:490;;;;;;:::o;19400:249::-;19540:34;19536:1;19528:6;19524:14;19517:58;19609:32;19604:2;19596:6;19592:15;19585:57;19400:249;:::o;19655:366::-;19797:3;19818:67;19882:2;19877:3;19818:67;:::i;:::-;19811:74;;19894:93;19983:3;19894:93;:::i;:::-;20012:2;20007:3;20003:12;19996:19;;19655:366;;;:::o;20027:419::-;20193:4;20231:2;20220:9;20216:18;20208:26;;20280:9;20274:4;20270:20;20266:1;20255:9;20251:17;20244:47;20308:131;20434:4;20308:131;:::i;:::-;20300:139;;20027:419;;;:::o;20452:179::-;20592:31;20588:1;20580:6;20576:14;20569:55;20452:179;:::o;20637:366::-;20779:3;20800:67;20864:2;20859:3;20800:67;:::i;:::-;20793:74;;20876:93;20965:3;20876:93;:::i;:::-;20994:2;20989:3;20985:12;20978:19;;20637:366;;;:::o;21009:419::-;21175:4;21213:2;21202:9;21198:18;21190:26;;21262:9;21256:4;21252:20;21248:1;21237:9;21233:17;21226:47;21290:131;21416:4;21290:131;:::i;:::-;21282:139;;21009:419;;;:::o;21434:179::-;21574:31;21570:1;21562:6;21558:14;21551:55;21434:179;:::o;21619:366::-;21761:3;21782:67;21846:2;21841:3;21782:67;:::i;:::-;21775:74;;21858:93;21947:3;21858:93;:::i;:::-;21976:2;21971:3;21967:12;21960:19;;21619:366;;;:::o;21991:419::-;22157:4;22195:2;22184:9;22180:18;22172:26;;22244:9;22238:4;22234:20;22230:1;22219:9;22215:17;22208:47;22272:131;22398:4;22272:131;:::i;:::-;22264:139;;21991:419;;;:::o;22416:165::-;22556:17;22552:1;22544:6;22540:14;22533:41;22416:165;:::o;22587:366::-;22729:3;22750:67;22814:2;22809:3;22750:67;:::i;:::-;22743:74;;22826:93;22915:3;22826:93;:::i;:::-;22944:2;22939:3;22935:12;22928:19;;22587:366;;;:::o;22959:419::-;23125:4;23163:2;23152:9;23148:18;23140:26;;23212:9;23206:4;23202:20;23198:1;23187:9;23183:17;23176:47;23240:131;23366:4;23240:131;:::i;:::-;23232:139;;22959:419;;;:::o;23384:221::-;23524:34;23520:1;23512:6;23508:14;23501:58;23593:4;23588:2;23580:6;23576:15;23569:29;23384:221;:::o;23611:366::-;23753:3;23774:67;23838:2;23833:3;23774:67;:::i;:::-;23767:74;;23850:93;23939:3;23850:93;:::i;:::-;23968:2;23963:3;23959:12;23952:19;;23611:366;;;:::o;23983:419::-;24149:4;24187:2;24176:9;24172:18;24164:26;;24236:9;24230:4;24226:20;24222:1;24211:9;24207:17;24200:47;24264:131;24390:4;24264:131;:::i;:::-;24256:139;;23983:419;;;:::o;24408:332::-;24529:4;24567:2;24556:9;24552:18;24544:26;;24580:71;24648:1;24637:9;24633:17;24624:6;24580:71;:::i;:::-;24661:72;24729:2;24718:9;24714:18;24705:6;24661:72;:::i;:::-;24408:332;;;;;:::o;24746:137::-;24800:5;24831:6;24825:13;24816:22;;24847:30;24871:5;24847:30;:::i;:::-;24746:137;;;;:::o;24889:345::-;24956:6;25005:2;24993:9;24984:7;24980:23;24976:32;24973:119;;;25011:79;;:::i;:::-;24973:119;25131:1;25156:61;25209:7;25200:6;25189:9;25185:22;25156:61;:::i;:::-;25146:71;;25102:125;24889:345;;;;:::o;25240:224::-;25380:34;25376:1;25368:6;25364:14;25357:58;25449:7;25444:2;25436:6;25432:15;25425:32;25240:224;:::o;25470:366::-;25612:3;25633:67;25697:2;25692:3;25633:67;:::i;:::-;25626:74;;25709:93;25798:3;25709:93;:::i;:::-;25827:2;25822:3;25818:12;25811:19;;25470:366;;;:::o;25842:419::-;26008:4;26046:2;26035:9;26031:18;26023:26;;26095:9;26089:4;26085:20;26081:1;26070:9;26066:17;26059:47;26123:131;26249:4;26123:131;:::i;:::-;26115:139;;25842:419;;;:::o;26267:228::-;26407:34;26403:1;26395:6;26391:14;26384:58;26476:11;26471:2;26463:6;26459:15;26452:36;26267:228;:::o;26501:366::-;26643:3;26664:67;26728:2;26723:3;26664:67;:::i;:::-;26657:74;;26740:93;26829:3;26740:93;:::i;:::-;26858:2;26853:3;26849:12;26842:19;;26501:366;;;:::o;26873:419::-;27039:4;27077:2;27066:9;27062:18;27054:26;;27126:9;27120:4;27116:20;27112:1;27101:9;27097:17;27090:47;27154:131;27280:4;27154:131;:::i;:::-;27146:139;;26873:419;;;:::o;27298:229::-;27438:34;27434:1;27426:6;27422:14;27415:58;27507:12;27502:2;27494:6;27490:15;27483:37;27298:229;:::o;27533:366::-;27675:3;27696:67;27760:2;27755:3;27696:67;:::i;:::-;27689:74;;27772:93;27861:3;27772:93;:::i;:::-;27890:2;27885:3;27881:12;27874:19;;27533:366;;;:::o;27905:419::-;28071:4;28109:2;28098:9;28094:18;28086:26;;28158:9;28152:4;28148:20;28144:1;28133:9;28129:17;28122:47;28186:131;28312:4;28186:131;:::i;:::-;28178:139;;27905:419;;;:::o;28330:231::-;28470:34;28466:1;28458:6;28454:14;28447:58;28539:14;28534:2;28526:6;28522:15;28515:39;28330:231;:::o;28567:366::-;28709:3;28730:67;28794:2;28789:3;28730:67;:::i;:::-;28723:74;;28806:93;28895:3;28806:93;:::i;:::-;28924:2;28919:3;28915:12;28908:19;;28567:366;;;:::o;28939:419::-;29105:4;29143:2;29132:9;29128:18;29120:26;;29192:9;29186:4;29182:20;29178:1;29167:9;29163:17;29156:47;29220:131;29346:4;29220:131;:::i;:::-;29212:139;;28939:419;;;:::o;29364:225::-;29504:34;29500:1;29492:6;29488:14;29481:58;29573:8;29568:2;29560:6;29556:15;29549:33;29364:225;:::o;29595:366::-;29737:3;29758:67;29822:2;29817:3;29758:67;:::i;:::-;29751:74;;29834:93;29923:3;29834:93;:::i;:::-;29952:2;29947:3;29943:12;29936:19;;29595:366;;;:::o;29967:419::-;30133:4;30171:2;30160:9;30156:18;30148:26;;30220:9;30214:4;30210:20;30206:1;30195:9;30191:17;30184:47;30248:131;30374:4;30248:131;:::i;:::-;30240:139;;29967:419;;;:::o;30392:223::-;30532:34;30528:1;30520:6;30516:14;30509:58;30601:6;30596:2;30588:6;30584:15;30577:31;30392:223;:::o;30621:366::-;30763:3;30784:67;30848:2;30843:3;30784:67;:::i;:::-;30777:74;;30860:93;30949:3;30860:93;:::i;:::-;30978:2;30973:3;30969:12;30962:19;;30621:366;;;:::o;30993:419::-;31159:4;31197:2;31186:9;31182:18;31174:26;;31246:9;31240:4;31236:20;31232:1;31221:9;31217:17;31210:47;31274:131;31400:4;31274:131;:::i;:::-;31266:139;;30993:419;;;:::o;31418:221::-;31558:34;31554:1;31546:6;31542:14;31535:58;31627:4;31622:2;31614:6;31610:15;31603:29;31418:221;:::o;31645:366::-;31787:3;31808:67;31872:2;31867:3;31808:67;:::i;:::-;31801:74;;31884:93;31973:3;31884:93;:::i;:::-;32002:2;31997:3;31993:12;31986:19;;31645:366;;;:::o;32017:419::-;32183:4;32221:2;32210:9;32206:18;32198:26;;32270:9;32264:4;32260:20;32256:1;32245:9;32241:17;32234:47;32298:131;32424:4;32298:131;:::i;:::-;32290:139;;32017:419;;;:::o;32442:228::-;32582:34;32578:1;32570:6;32566:14;32559:58;32651:11;32646:2;32638:6;32634:15;32627:36;32442:228;:::o;32676:366::-;32818:3;32839:67;32903:2;32898:3;32839:67;:::i;:::-;32832:74;;32915:93;33004:3;32915:93;:::i;:::-;33033:2;33028:3;33024:12;33017:19;;32676:366;;;:::o;33048:419::-;33214:4;33252:2;33241:9;33237:18;33229:26;;33301:9;33295:4;33291:20;33287:1;33276:9;33272:17;33265:47;33329:131;33455:4;33329:131;:::i;:::-;33321:139;;33048:419;;;:::o;33473:169::-;33613:21;33609:1;33601:6;33597:14;33590:45;33473:169;:::o;33648:366::-;33790:3;33811:67;33875:2;33870:3;33811:67;:::i;:::-;33804:74;;33887:93;33976:3;33887:93;:::i;:::-;34005:2;34000:3;33996:12;33989:19;;33648:366;;;:::o;34020:419::-;34186:4;34224:2;34213:9;34209:18;34201:26;;34273:9;34267:4;34263:20;34259:1;34248:9;34244:17;34237:47;34301:131;34427:4;34301:131;:::i;:::-;34293:139;;34020:419;;;:::o;34445:179::-;34585:31;34581:1;34573:6;34569:14;34562:55;34445:179;:::o;34630:366::-;34772:3;34793:67;34857:2;34852:3;34793:67;:::i;:::-;34786:74;;34869:93;34958:3;34869:93;:::i;:::-;34987:2;34982:3;34978:12;34971:19;;34630:366;;;:::o;35002:419::-;35168:4;35206:2;35195:9;35191:18;35183:26;;35255:9;35249:4;35245:20;35241:1;35230:9;35226:17;35219:47;35283:131;35409:4;35283:131;:::i;:::-;35275:139;;35002:419;;;:::o;35427:182::-;35567:34;35563:1;35555:6;35551:14;35544:58;35427:182;:::o;35615:366::-;35757:3;35778:67;35842:2;35837:3;35778:67;:::i;:::-;35771:74;;35854:93;35943:3;35854:93;:::i;:::-;35972:2;35967:3;35963:12;35956:19;;35615:366;;;:::o;35987:419::-;36153:4;36191:2;36180:9;36176:18;36168:26;;36240:9;36234:4;36230:20;36226:1;36215:9;36211:17;36204:47;36268:131;36394:4;36268:131;:::i;:::-;36260:139;;35987:419;;;:::o;36412:180::-;36552:32;36548:1;36540:6;36536:14;36529:56;36412:180;:::o;36598:366::-;36740:3;36761:67;36825:2;36820:3;36761:67;:::i;:::-;36754:74;;36837:93;36926:3;36837:93;:::i;:::-;36955:2;36950:3;36946:12;36939:19;;36598:366;;;:::o;36970:419::-;37136:4;37174:2;37163:9;37159:18;37151:26;;37223:9;37217:4;37213:20;37209:1;37198:9;37194:17;37187:47;37251:131;37377:4;37251:131;:::i;:::-;37243:139;;36970:419;;;:::o;37395:220::-;37535:34;37531:1;37523:6;37519:14;37512:58;37604:3;37599:2;37591:6;37587:15;37580:28;37395:220;:::o;37621:366::-;37763:3;37784:67;37848:2;37843:3;37784:67;:::i;:::-;37777:74;;37860:93;37949:3;37860:93;:::i;:::-;37978:2;37973:3;37969:12;37962:19;;37621:366;;;:::o;37993:419::-;38159:4;38197:2;38186:9;38182:18;38174:26;;38246:9;38240:4;38236:20;38232:1;38221:9;38217:17;38210:47;38274:131;38400:4;38274:131;:::i;:::-;38266:139;;37993:419;;;:::o;38418:221::-;38558:34;38554:1;38546:6;38542:14;38535:58;38627:4;38622:2;38614:6;38610:15;38603:29;38418:221;:::o;38645:366::-;38787:3;38808:67;38872:2;38867:3;38808:67;:::i;:::-;38801:74;;38884:93;38973:3;38884:93;:::i;:::-;39002:2;38997:3;38993:12;38986:19;;38645:366;;;:::o;39017:419::-;39183:4;39221:2;39210:9;39206:18;39198:26;;39270:9;39264:4;39260:20;39256:1;39245:9;39241:17;39234:47;39298:131;39424:4;39298:131;:::i;:::-;39290:139;;39017:419;;;:::o;39442:179::-;39582:31;39578:1;39570:6;39566:14;39559:55;39442:179;:::o;39627:366::-;39769:3;39790:67;39854:2;39849:3;39790:67;:::i;:::-;39783:74;;39866:93;39955:3;39866:93;:::i;:::-;39984:2;39979:3;39975:12;39968:19;;39627:366;;;:::o;39999:419::-;40165:4;40203:2;40192:9;40188:18;40180:26;;40252:9;40246:4;40242:20;40238:1;40227:9;40223:17;40216:47;40280:131;40406:4;40280:131;:::i;:::-;40272:139;;39999:419;;;:::o;40424:224::-;40564:34;40560:1;40552:6;40548:14;40541:58;40633:7;40628:2;40620:6;40616:15;40609:32;40424:224;:::o;40654:366::-;40796:3;40817:67;40881:2;40876:3;40817:67;:::i;:::-;40810:74;;40893:93;40982:3;40893:93;:::i;:::-;41011:2;41006:3;41002:12;40995:19;;40654:366;;;:::o;41026:419::-;41192:4;41230:2;41219:9;41215:18;41207:26;;41279:9;41273:4;41269:20;41265:1;41254:9;41250:17;41243:47;41307:131;41433:4;41307:131;:::i;:::-;41299:139;;41026:419;;;:::o;41451:222::-;41591:34;41587:1;41579:6;41575:14;41568:58;41660:5;41655:2;41647:6;41643:15;41636:30;41451:222;:::o;41679:366::-;41821:3;41842:67;41906:2;41901:3;41842:67;:::i;:::-;41835:74;;41918:93;42007:3;41918:93;:::i;:::-;42036:2;42031:3;42027:12;42020:19;;41679:366;;;:::o;42051:419::-;42217:4;42255:2;42244:9;42240:18;42232:26;;42304:9;42298:4;42294:20;42290:1;42279:9;42275:17;42268:47;42332:131;42458:4;42332:131;:::i;:::-;42324:139;;42051:419;;;:::o;42476:225::-;42616:34;42612:1;42604:6;42600:14;42593:58;42685:8;42680:2;42672:6;42668:15;42661:33;42476:225;:::o;42707:366::-;42849:3;42870:67;42934:2;42929:3;42870:67;:::i;:::-;42863:74;;42946:93;43035:3;42946:93;:::i;:::-;43064:2;43059:3;43055:12;43048:19;;42707:366;;;:::o;43079:419::-;43245:4;43283:2;43272:9;43268:18;43260:26;;43332:9;43326:4;43322:20;43318:1;43307:9;43303:17;43296:47;43360:131;43486:4;43360:131;:::i;:::-;43352:139;;43079:419;;;:::o;43504:180::-;43552:77;43549:1;43542:88;43649:4;43646:1;43639:15;43673:4;43670:1;43663:15;43690:180;43738:77;43735:1;43728:88;43835:4;43832:1;43825:15;43859:4;43856:1;43849:15;43876:143;43933:5;43964:6;43958:13;43949:22;;43980:33;44007:5;43980:33;:::i;:::-;43876:143;;;;:::o;44025:351::-;44095:6;44144:2;44132:9;44123:7;44119:23;44115:32;44112:119;;;44150:79;;:::i;:::-;44112:119;44270:1;44295:64;44351:7;44342:6;44331:9;44327:22;44295:64;:::i;:::-;44285:74;;44241:128;44025:351;;;;:::o;44382:114::-;44449:6;44483:5;44477:12;44467:22;;44382:114;;;:::o;44502:184::-;44601:11;44635:6;44630:3;44623:19;44675:4;44670:3;44666:14;44651:29;;44502:184;;;;:::o;44692:132::-;44759:4;44782:3;44774:11;;44812:4;44807:3;44803:14;44795:22;;44692:132;;;:::o;44830:108::-;44907:24;44925:5;44907:24;:::i;:::-;44902:3;44895:37;44830:108;;:::o;44944:179::-;45013:10;45034:46;45076:3;45068:6;45034:46;:::i;:::-;45112:4;45107:3;45103:14;45089:28;;44944:179;;;;:::o;45129:113::-;45199:4;45231;45226:3;45222:14;45214:22;;45129:113;;;:::o;45278:732::-;45397:3;45426:54;45474:5;45426:54;:::i;:::-;45496:86;45575:6;45570:3;45496:86;:::i;:::-;45489:93;;45606:56;45656:5;45606:56;:::i;:::-;45685:7;45716:1;45701:284;45726:6;45723:1;45720:13;45701:284;;;45802:6;45796:13;45829:63;45888:3;45873:13;45829:63;:::i;:::-;45822:70;;45915:60;45968:6;45915:60;:::i;:::-;45905:70;;45761:224;45748:1;45745;45741:9;45736:14;;45701:284;;;45705:14;46001:3;45994:10;;45402:608;;;45278:732;;;;:::o;46016:831::-;46279:4;46317:3;46306:9;46302:19;46294:27;;46331:71;46399:1;46388:9;46384:17;46375:6;46331:71;:::i;:::-;46412:80;46488:2;46477:9;46473:18;46464:6;46412:80;:::i;:::-;46539:9;46533:4;46529:20;46524:2;46513:9;46509:18;46502:48;46567:108;46670:4;46661:6;46567:108;:::i;:::-;46559:116;;46685:72;46753:2;46742:9;46738:18;46729:6;46685:72;:::i;:::-;46767:73;46835:3;46824:9;46820:19;46811:6;46767:73;:::i;:::-;46016:831;;;;;;;;:::o;46853:807::-;47102:4;47140:3;47129:9;47125:19;47117:27;;47154:71;47222:1;47211:9;47207:17;47198:6;47154:71;:::i;:::-;47235:72;47303:2;47292:9;47288:18;47279:6;47235:72;:::i;:::-;47317:80;47393:2;47382:9;47378:18;47369:6;47317:80;:::i;:::-;47407;47483:2;47472:9;47468:18;47459:6;47407:80;:::i;:::-;47497:73;47565:3;47554:9;47550:19;47541:6;47497:73;:::i;:::-;47580;47648:3;47637:9;47633:19;47624:6;47580:73;:::i;:::-;46853:807;;;;;;;;;:::o;47666:143::-;47723:5;47754:6;47748:13;47739:22;;47770:33;47797:5;47770:33;:::i;:::-;47666:143;;;;:::o;47815:663::-;47903:6;47911;47919;47968:2;47956:9;47947:7;47943:23;47939:32;47936:119;;;47974:79;;:::i;:::-;47936:119;48094:1;48119:64;48175:7;48166:6;48155:9;48151:22;48119:64;:::i;:::-;48109:74;;48065:128;48232:2;48258:64;48314:7;48305:6;48294:9;48290:22;48258:64;:::i;:::-;48248:74;;48203:129;48371:2;48397:64;48453:7;48444:6;48433:9;48429:22;48397:64;:::i;:::-;48387:74;;48342:129;47815:663;;;;;:::o;48484:179::-;48624:31;48620:1;48612:6;48608:14;48601:55;48484:179;:::o;48669:366::-;48811:3;48832:67;48896:2;48891:3;48832:67;:::i;:::-;48825:74;;48908:93;48997:3;48908:93;:::i;:::-;49026:2;49021:3;49017:12;49010:19;;48669:366;;;:::o;49041:419::-;49207:4;49245:2;49234:9;49230:18;49222:26;;49294:9;49288:4;49284:20;49280:1;49269:9;49265:17;49258:47;49322:131;49448:4;49322:131;:::i;:::-;49314:139;;49041:419;;;:::o;49466:147::-;49567:11;49604:3;49589:18;;49466:147;;;;:::o;49619:114::-;;:::o;49739:398::-;49898:3;49919:83;50000:1;49995:3;49919:83;:::i;:::-;49912:90;;50011:93;50100:3;50011:93;:::i;:::-;50129:1;50124:3;50120:11;50113:18;;49739:398;;;:::o;50143:379::-;50327:3;50349:147;50492:3;50349:147;:::i;:::-;50342:154;;50513:3;50506:10;;50143:379;;;:::o;50528:245::-;50668:34;50664:1;50656:6;50652:14;50645:58;50737:28;50732:2;50724:6;50720:15;50713:53;50528:245;:::o;50779:366::-;50921:3;50942:67;51006:2;51001:3;50942:67;:::i;:::-;50935:74;;51018:93;51107:3;51018:93;:::i;:::-;51136:2;51131:3;51127:12;51120:19;;50779:366;;;:::o;51151:419::-;51317:4;51355:2;51344:9;51340:18;51332:26;;51404:9;51398:4;51394:20;51390:1;51379:9;51375:17;51368:47;51432:131;51558:4;51432:131;:::i;:::-;51424:139;;51151:419;;;:::o

Swarm Source

ipfs://b459f4d51a715281d3ac1861ae7b3e91d4484b30336bd860261b4830175a09bd

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.