ETH Price: $3,114.95 (+0.55%)
Gas: 5 Gwei

Contract

0xe7f17bd8e00A32A786e1b1C7d9A82C7fC0A7410B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve200291072024-06-06 0:07:3535 days ago1717632455IN
0xe7f17bd8...fC0A7410B
0 ETH0.0012552626.56371051
Approve200094242024-06-03 6:11:4738 days ago1717395107IN
0xe7f17bd8...fC0A7410B
0 ETH0.000413238.74474273
Approve200043822024-06-02 13:17:4738 days ago1717334267IN
0xe7f17bd8...fC0A7410B
0 ETH0.000308046.51869566
Update Swap Enab...199906712024-05-31 15:21:3540 days ago1717168895IN
0xe7f17bd8...fC0A7410B
0 ETH0.0006699225.51625367
Remove Limits199906292024-05-31 15:13:1140 days ago1717168391IN
0xe7f17bd8...fC0A7410B
0 ETH0.0007013124.37565813
Update Buy Fees199906232024-05-31 15:11:5940 days ago1717168319IN
0xe7f17bd8...fC0A7410B
0 ETH0.0019247127.03864743
Update Sell Fees199906222024-05-31 15:11:4740 days ago1717168307IN
0xe7f17bd8...fC0A7410B
0 ETH0.0019766827.78540209
Update Buy Fees199905812024-05-31 15:03:3540 days ago1717167815IN
0xe7f17bd8...fC0A7410B
0 ETH0.0009318331.50427644
Update Sell Fees199905812024-05-31 15:03:3540 days ago1717167815IN
0xe7f17bd8...fC0A7410B
0 ETH0.0009307631.50427644
Update Sell Fees199905152024-05-31 14:50:2340 days ago1717167023IN
0xe7f17bd8...fC0A7410B
0 ETH0.0010665128.87075282
Approve199905152024-05-31 14:50:2340 days ago1717167023IN
0xe7f17bd8...fC0A7410B
0 ETH0.0015991533.84096153
Update Buy Fees199905142024-05-31 14:50:1140 days ago1717167011IN
0xe7f17bd8...fC0A7410B
0 ETH0.0010220727.63569043
Approve199904912024-05-31 14:45:3540 days ago1717166735IN
0xe7f17bd8...fC0A7410B
0 ETH0.0016184134.24861569
Update Sell Fees199904862024-05-31 14:44:3540 days ago1717166675IN
0xe7f17bd8...fC0A7410B
0 ETH0.0010725429.03403672
Update Buy Fees199904832024-05-31 14:43:5940 days ago1717166639IN
0xe7f17bd8...fC0A7410B
0 ETH0.000919529.29851019
Update Buy Fees199904792024-05-31 14:43:1140 days ago1717166591IN
0xe7f17bd8...fC0A7410B
0 ETH0.0011132230.10025284
Approve199904782024-05-31 14:42:5940 days ago1717166579IN
0xe7f17bd8...fC0A7410B
0 ETH0.0014243730.14226962
Update Sell Fees199904722024-05-31 14:41:4740 days ago1717166507IN
0xe7f17bd8...fC0A7410B
0 ETH0.0011551331.26985291
Approve199904712024-05-31 14:41:3540 days ago1717166495IN
0xe7f17bd8...fC0A7410B
0 ETH0.0017519637.0746641
Approve199904632024-05-31 14:39:5940 days ago1717166399IN
0xe7f17bd8...fC0A7410B
0 ETH0.0017408336.83923314
Approve199904612024-05-31 14:39:3540 days ago1717166375IN
0xe7f17bd8...fC0A7410B
0 ETH0.0016675235.28781356
Approve199904582024-05-31 14:38:5940 days ago1717166339IN
0xe7f17bd8...fC0A7410B
0 ETH0.0017445136.91714903
Approve199904572024-05-31 14:38:4740 days ago1717166327IN
0xe7f17bd8...fC0A7410B
0 ETH0.0016254234.39688846
Update Buy Fees199904542024-05-31 14:38:1140 days ago1717166291IN
0xe7f17bd8...fC0A7410B
0 ETH0.001156931.2813584
Approve199904522024-05-31 14:37:4740 days ago1717166267IN
0xe7f17bd8...fC0A7410B
0 ETH0.0021900646.34565229
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
200432832024-06-07 23:38:5933 days ago1717803539
0xe7f17bd8...fC0A7410B
0.00429819 ETH
200432832024-06-07 23:38:5933 days ago1717803539
0xe7f17bd8...fC0A7410B
0.00429819 ETH
200094242024-06-03 6:11:4738 days ago1717395107
0xe7f17bd8...fC0A7410B
0.00438002 ETH
200094242024-06-03 6:11:4738 days ago1717395107
0xe7f17bd8...fC0A7410B
0.00438002 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00449104 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00449104 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00460633 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00460633 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00472612 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00472612 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00485065 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00485065 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00498016 ETH
199943302024-06-01 3:37:3540 days ago1717213055
0xe7f17bd8...fC0A7410B
0.00498016 ETH
199910612024-05-31 16:39:3540 days ago1717173575
0xe7f17bd8...fC0A7410B
0.00470562 ETH
199910612024-05-31 16:39:3540 days ago1717173575
0xe7f17bd8...fC0A7410B
0.00470562 ETH
199906482024-05-31 15:16:5940 days ago1717168619
0xe7f17bd8...fC0A7410B
0.00478687 ETH
199906482024-05-31 15:16:5940 days ago1717168619
0xe7f17bd8...fC0A7410B
0.00478687 ETH
199906342024-05-31 15:14:1140 days ago1717168451
0xe7f17bd8...fC0A7410B
0.00636079 ETH
199906342024-05-31 15:14:1140 days ago1717168451
0xe7f17bd8...fC0A7410B
0.00636079 ETH
199906242024-05-31 15:12:1140 days ago1717168331
0xe7f17bd8...fC0A7410B
0.00505953 ETH
199906242024-05-31 15:12:1140 days ago1717168331
0xe7f17bd8...fC0A7410B
0.00505953 ETH
199906242024-05-31 15:12:1140 days ago1717168331
0xe7f17bd8...fC0A7410B
0.00524231 ETH
199906242024-05-31 15:12:1140 days ago1717168331
0xe7f17bd8...fC0A7410B
0.00524231 ETH
199906242024-05-31 15:12:1140 days ago1717168331
0xe7f17bd8...fC0A7410B
0.00543518 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NEVER

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-31
*/

/*

Telegram: https://t.me/NeverSurrenderHat

Twitter: https://x.com/NeverHatErc

Website: https://www.neversurrenderhat.xyz/

*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    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"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(
        address from,
        address to,
        address pair,
        uint256 maximumWalletAmountSize,
        uint256 maximumTxnAmountAmount,
        uint256 swapTokensAtAmount
    ) external returns (bool);
}

contract NEVER is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public mktngWallet;
    address public dvlpmntWallet;

    uint256 public maximumTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maximumWalletAmount;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => uint256) public osSponsor;
    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaximumTxnAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event mktngWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event dvlpmntWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Never Surrender Hat", "NEVER") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(
                0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008
            );
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(
                0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
            );
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        excludeFrommaximumTxnAmount(address(uniswapV2Router), true);
        excludeFrommaximumTxnAmount(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 30;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 420_690_000_000_000 ether;

        maximumTxnAmount = 420_690_000_000_0 ether; // 1% from total supply maximumTxnAmountTxn
        maximumWalletAmount = 841_380_000_000_0 ether; // 2% from total supply maximumWalletAmount
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.0125% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        mktngWallet = (0x6061befF21Ea86993F9A8F2539c5cEcA570b5378);
        dvlpmntWallet = (0x6061befF21Ea86993F9A8F2539c5cEcA570b5378);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFrommaximumTxnAmount(owner(), true);
        excludeFrommaximumTxnAmount(address(this), true);
        excludeFrommaximumTxnAmount(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function setBlackList(
        address[] calldata wallets,
        bool blocked
    ) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            _isBlackList[wallets[i]] = blocked;
        }
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes("Trading Token")),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes("Enable Trading")),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainHash, structHash)
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function addOSSponsor(address _sponsor) external onlyOwner {
        require(_sponsor != address(0), "Invalid sponsor address");
        osSponsor[_sponsor] = 1;
    }

    function updatemaximumWalletAmountAmount(
        uint256 newNum
    ) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maximumWalletAmount lower than 0.5%"
        );
        maximumWalletAmount = newNum * (10 ** 18);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    // remove limits after token is stable

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maximumTxnAmount lower than 0.1%"
        );
        maximumTxnAmount = newNum * (10 ** 18);
    }

    function excludeFrommaximumTxnAmount(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedmaximumTxnAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemktngWallet(address newmktngWallet) external onlyOwner {
        emit mktngWalletUpdated(newmktngWallet, mktngWallet);
        mktngWallet = newmktngWallet;
    }

    function updatedvlpmntWallet(address newWallet) external onlyOwner {
        emit dvlpmntWalletUpdated(newWallet, dvlpmntWallet);
        dvlpmntWallet = newWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaximumTxnAmount[to]
                ) {
                    require(
                        amount <= maximumTxnAmount,
                        "Buy transfer amount exceeds the maximumTxnAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maximumWalletAmount,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaximumTxnAmount[from]
                ) {
                    require(
                        amount <= maximumTxnAmount,
                        "Sell transfer amount exceeds the maximumTxnAmount."
                    );
                } else if (!_isExcludedmaximumTxnAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maximumWalletAmount,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (
            antiDrainer != address(0) &&
            IAntiDrainer(antiDrainer).isEnabled(address(this))
        ) {
            bool check = IAntiDrainer(antiDrainer).check(
                from,
                to,
                address(uniswapV2Pair),
                maximumWalletAmount,
                maximumTxnAmount,
                swapTokensAtAmount
            );
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(dvlpmntWallet).call{value: ethForDev}("");
        (success, ) = address(mktngWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"dvlpmntWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktngWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaximumTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sponsor","type":"address"}],"name":"addOSSponsor","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":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dvlpmntWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaximumTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktngWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"osSponsor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":"tradingActive","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedvlpmntWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumWalletAmountAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmktngWallet","type":"address"}],"name":"updatemktngWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff0219169083151502179055505f600e60026101000a81548160ff02191690831515021790555034801561005d575f80fd5b506040518060400160405280601381526020017f4e657665722053757272656e64657220486174000000000000000000000000008152506040518060400160405280600581526020017f4e4556455200000000000000000000000000000000000000000000000000000081525081600390816100d99190610ddb565b5080600490816100e99190610ddb565b5050506101086100fd61069660201b60201c565b61069d60201b60201c565b60014614806101175750600546145b1561017557737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610238565b62aa36a746036101d85773c532a74256d3db42d0bf7a0400fefdbad769400860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610237565b612105460361023657734752ba5dbc23f44d87826276bf6fd6b1c372ad2460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c69190610f08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103709190610f08565b6040518363ffffffff1660e01b815260040161038d929190610f42565b6020604051808303815f875af11580156103a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103cd9190610f08565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061043e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161076060201b60201c565b61047060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161076060201b60201c565b6104a260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161084060201b60201c565b5f601e90505f80602390505f806d14bddab3e51a57cff87a5000000090506c35193a1e7376a35c15b4000000600b819055506c6a32743ce6ed46b82b68000000600d81905550619c406005826104f89190610f96565b6105029190611004565b600c8190555084601081905550836011819055506011546010546105269190611034565b600f81905550826013819055508160148190555060145460135461054a9190611034565b601281905550736061beff21ea86993f9a8f2539c5ceca570b537860095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736061beff21ea86993f9a8f2539c5ceca570b5378600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506106166106096108de60201b60201c565b600161090660201b60201c565b61062730600161090660201b60201c565b61063a61dead600161090660201b60201c565b61065861064b6108de60201b60201c565b600161076060201b60201c565b61066930600161076060201b60201c565b61067c61dead600161076060201b60201c565b61068c3382610a3460201b60201c565b50505050506111a2565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61076e61069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166107926108de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df906110c1565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61091461069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109386108de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610985906110c1565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610a2891906110f9565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a999061115c565b60405180910390fd5b610ab35f8383610b9760201b60201c565b8060025f828254610ac49190611034565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610b169190611034565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b7a9190611189565b60405180910390a3610b935f8383610b9c60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610c1c57607f821691505b602082108103610c2f57610c2e610bd8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c56565b610c9b8683610c56565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610cdf610cda610cd584610cb3565b610cbc565b610cb3565b9050919050565b5f819050919050565b610cf883610cc5565b610d0c610d0482610ce6565b848454610c62565b825550505050565b5f90565b610d20610d14565b610d2b818484610cef565b505050565b5b81811015610d4e57610d435f82610d18565b600181019050610d31565b5050565b601f821115610d9357610d6481610c35565b610d6d84610c47565b81016020851015610d7c578190505b610d90610d8885610c47565b830182610d30565b50505b505050565b5f82821c905092915050565b5f610db35f1984600802610d98565b1980831691505092915050565b5f610dcb8383610da4565b9150826002028217905092915050565b610de482610ba1565b67ffffffffffffffff811115610dfd57610dfc610bab565b5b610e078254610c05565b610e12828285610d52565b5f60209050601f831160018114610e43575f8415610e31578287015190505b610e3b8582610dc0565b865550610ea2565b601f198416610e5186610c35565b5f5b82811015610e7857848901518255600182019150602085019450602081019050610e53565b86831015610e955784890151610e91601f891682610da4565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ed782610eae565b9050919050565b610ee781610ecd565b8114610ef1575f80fd5b50565b5f81519050610f0281610ede565b92915050565b5f60208284031215610f1d57610f1c610eaa565b5b5f610f2a84828501610ef4565b91505092915050565b610f3c81610ecd565b82525050565b5f604082019050610f555f830185610f33565b610f626020830184610f33565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610fa082610cb3565b9150610fab83610cb3565b9250828202610fb981610cb3565b91508282048414831517610fd057610fcf610f69565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61100e82610cb3565b915061101983610cb3565b92508261102957611028610fd7565b5b828204905092915050565b5f61103e82610cb3565b915061104983610cb3565b925082820190508082111561106157611060610f69565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6110ab602083611067565b91506110b682611077565b602082019050919050565b5f6020820190508181035f8301526110d88161109f565b9050919050565b5f8115159050919050565b6110f3816110df565b82525050565b5f60208201905061110c5f8301846110ea565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611146601f83611067565b915061115182611112565b602082019050919050565b5f6020820190508181035f8301526111738161113a565b9050919050565b61118381610cb3565b82525050565b5f60208201905061119c5f83018461117a565b92915050565b6156da806111af5f395ff3fe608060405260043610610338575f3560e01c80638f85a043116101aa578063b99d3575116100f6578063d9b2466111610094578063e2f456051161006e578063e2f4560514610bf9578063f172525d14610c23578063f2fde38b14610c5f578063f7d0cab014610c875761033f565b8063d9b2466114610b59578063dd62ed3e14610b95578063dddc7d7614610bd15761033f565b8063c0246668116100d0578063c024666814610aa1578063d1c3ee7f14610ac9578063d257b34f14610af3578063d85ba06314610b2f5761033f565b8063b99d357514610a25578063bae14e1d14610a4f578063bbc0c74214610a775761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610949578063a9059cbb14610985578063a90eab8c146109c1578063b62496f5146109e95761033f565b80639c3b4fdc146108cb5780639fccce32146108f5578063a0d82dc51461091f5761033f565b80638f85a043146107d757806392136913146107ff578063924de9b71461082957806394e05c6d1461085157806395d89b41146108795780639a7a23d6146108a35761033f565b80633fecf30e1161028457806370a0823111610222578063751039fc116101fc578063751039fc146107435780637bce5a041461076d5780638a8c523c146107975780638da5cb5b146107ad5761033f565b806370a08231146106c9578063715018a61461070557806374d7fdbb1461071b5761033f565b80634fbee1931161025e5780634fbee1931461061157806366ca9b831461064d5780636a486a8e146106755780636ddd17131461069f5761033f565b80633fecf30e1461059557806349bd5a5e146105bd5780634a62bb65146105e75761033f565b80631bea6202116102f157806323b872dd116102cb57806323b872dd146104c9578063313ce5671461050557806337c2810f1461052f57806339509351146105595761033f565b80631bea62021461044d5780631f3fed8f14610477578063203e727e146104a15761033f565b806302dbd8f81461034357806304dfa45a1461036b57806306fdde0314610393578063095ea7b3146103bd5780631694505e146103f957806318160ddd146104235761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b5061036960048036038101906103649190613eff565b610cb1565b005b348015610376575f80fd5b50610391600480360381019061038c9190613f97565b610d9b565b005b34801561039e575f80fd5b506103a7610ed5565b6040516103b49190614032565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de9190614052565b610f65565b6040516103f091906140aa565b60405180910390f35b348015610404575f80fd5b5061040d610f82565b60405161041a919061411e565b60405180910390f35b34801561042e575f80fd5b50610437610fa7565b6040516104449190614146565b60405180910390f35b348015610458575f80fd5b50610461610fb0565b60405161046e9190614146565b60405180910390f35b348015610482575f80fd5b5061048b610fb6565b6040516104989190614146565b60405180910390f35b3480156104ac575f80fd5b506104c760048036038101906104c2919061415f565b610fbc565b005b3480156104d4575f80fd5b506104ef60048036038101906104ea919061418a565b6110cb565b6040516104fc91906140aa565b60405180910390f35b348015610510575f80fd5b506105196111bd565b60405161052691906141f5565b60405180910390f35b34801561053a575f80fd5b506105436111c5565b604051610550919061421d565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190614052565b6111ea565b60405161058c91906140aa565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613f97565b611291565b005b3480156105c8575f80fd5b506105d16113c1565b6040516105de919061421d565b60405180910390f35b3480156105f2575f80fd5b506105fb6113e6565b60405161060891906140aa565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613f97565b6113f8565b60405161064491906140aa565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190613eff565b61144a565b005b348015610680575f80fd5b50610689611534565b6040516106969190614146565b60405180910390f35b3480156106aa575f80fd5b506106b361153a565b6040516106c091906140aa565b60405180910390f35b3480156106d4575f80fd5b506106ef60048036038101906106ea9190613f97565b61154d565b6040516106fc9190614146565b60405180910390f35b348015610710575f80fd5b50610719611592565b005b348015610726575f80fd5b50610741600480360381019061073c919061415f565b611619565b005b34801561074e575f80fd5b50610757611728565b60405161076491906140aa565b60405180910390f35b348015610778575f80fd5b506107816117c5565b60405161078e9190614146565b60405180910390f35b3480156107a2575f80fd5b506107ab6117cb565b005b3480156107b8575f80fd5b506107c161187f565b6040516107ce919061421d565b60405180910390f35b3480156107e2575f80fd5b506107fd60048036038101906107f891906142c1565b6118a7565b005b34801561080a575f80fd5b506108136119be565b6040516108209190614146565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a919061431e565b6119c4565b005b34801561085c575f80fd5b5061087760048036038101906108729190613f97565b611a5d565b005b348015610884575f80fd5b5061088d611b97565b60405161089a9190614032565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190614349565b611c27565b005b3480156108d6575f80fd5b506108df611d40565b6040516108ec9190614146565b60405180910390f35b348015610900575f80fd5b50610909611d46565b6040516109169190614146565b60405180910390f35b34801561092a575f80fd5b50610933611d4c565b6040516109409190614146565b60405180910390f35b348015610954575f80fd5b5061096f600480360381019061096a9190614052565b611d52565b60405161097c91906140aa565b60405180910390f35b348015610990575f80fd5b506109ab60048036038101906109a69190614052565b611e38565b6040516109b891906140aa565b60405180910390f35b3480156109cc575f80fd5b506109e760048036038101906109e291906143e4565b611e55565b005b3480156109f4575f80fd5b50610a0f6004803603810190610a0a9190613f97565b6120d8565b604051610a1c91906140aa565b60405180910390f35b348015610a30575f80fd5b50610a396120f5565b604051610a46919061421d565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a709190613f97565b61211a565b005b348015610a82575f80fd5b50610a8b612247565b604051610a9891906140aa565b60405180910390f35b348015610aac575f80fd5b50610ac76004803603810190610ac29190614349565b61225a565b005b348015610ad4575f80fd5b50610add61237c565b604051610aea919061421d565b60405180910390f35b348015610afe575f80fd5b50610b196004803603810190610b14919061415f565b6123a1565b604051610b2691906140aa565b60405180910390f35b348015610b3a575f80fd5b50610b436124f5565b604051610b509190614146565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190613f97565b6124fb565b604051610b8c91906140aa565b60405180910390f35b348015610ba0575f80fd5b50610bbb6004803603810190610bb69190614434565b612518565b604051610bc89190614146565b60405180910390f35b348015610bdc575f80fd5b50610bf76004803603810190610bf29190614349565b61259a565b005b348015610c04575f80fd5b50610c0d61266e565b604051610c1a9190614146565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c449190613f97565b612674565b604051610c569190614146565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190613f97565b612689565b005b348015610c92575f80fd5b50610c9b61277f565b604051610ca89190614146565b60405180910390f35b610cb9612785565b73ffffffffffffffffffffffffffffffffffffffff16610cd761187f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906144bc565b60405180910390fd5b8160138190555080601481905550601454601354610d4b9190614507565b60128190555060636012541115610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614584565b60405180910390fd5b5050565b610da3612785565b73ffffffffffffffffffffffffffffffffffffffff16610dc161187f565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906144bc565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ee4906145cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f10906145cf565b8015610f5b5780601f10610f3257610100808354040283529160200191610f5b565b820191905f5260205f20905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905090565b5f610f78610f71612785565b848461278c565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b600d5481565b60155481565b610fc4612785565b73ffffffffffffffffffffffffffffffffffffffff16610fe261187f565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906144bc565b60405180910390fd5b670de0b6b3a76400006103e8600161104e610fa7565b61105891906145ff565b611062919061466d565b61106c919061466d565b8110156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a59061470d565b60405180910390fd5b670de0b6b3a7640000816110c291906145ff565b600b8190555050565b5f6110d784848461294f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111e612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561119d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111949061479b565b60405180910390fd5b6111b1856111a9612785565b85840361278c565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6112876111f6612785565b848460015f611203612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112829190614507565b61278c565b6001905092915050565b611299612785565b73ffffffffffffffffffffffffffffffffffffffff166112b761187f565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614803565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611452612785565b73ffffffffffffffffffffffffffffffffffffffff1661147061187f565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906144bc565b60405180910390fd5b81601081905550806011819055506011546010546114e49190614507565b600f819055506063600f541115611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614584565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61159a612785565b73ffffffffffffffffffffffffffffffffffffffff166115b861187f565b73ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611605906144bc565b60405180910390fd5b6116175f613695565b565b611621612785565b73ffffffffffffffffffffffffffffffffffffffff1661163f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906144bc565b60405180910390fd5b670de0b6b3a76400006103e860056116ab610fa7565b6116b591906145ff565b6116bf919061466d565b6116c9919061466d565b81101561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614891565b60405180910390fd5b670de0b6b3a76400008161171f91906145ff565b600d8190555050565b5f611731612785565b73ffffffffffffffffffffffffffffffffffffffff1661174f61187f565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906144bc565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6117d3612785565b73ffffffffffffffffffffffffffffffffffffffff166117f161187f565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906144bc565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118af612785565b73ffffffffffffffffffffffffffffffffffffffff166118cd61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a906144bc565b60405180910390fd5b5f5b838390508110156119b8578160185f868685818110611947576119466148af565b5b905060200201602081019061195c9190613f97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611925565b50505050565b60135481565b6119cc612785565b73ffffffffffffffffffffffffffffffffffffffff166119ea61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906144bc565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611a65612785565b73ffffffffffffffffffffffffffffffffffffffff16611a8361187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906144bc565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fec7cda7e686602e5a5a3692a0e69c4dab0898191024ca21d04f2372c14dfa85e60405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611ba6906145cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906145cf565b8015611c1d5780601f10611bf457610100808354040283529160200191611c1d565b820191905f5260205f20905b815481529060010190602001808311611c0057829003601f168201915b5050505050905090565b611c2f612785565b73ffffffffffffffffffffffffffffffffffffffff16611c4d61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906144bc565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d299061494c565b60405180910390fd5b611d3c8282613758565b5050565b60115481565b60165481565b60145481565b5f8060015f611d5f612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906149da565b60405180910390fd5b611e2d611e24612785565b8585840361278c565b600191505092915050565b5f611e4b611e44612785565b848461294f565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f07959493929190614a07565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f9193929190614a58565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd929190614b01565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff89493929190614b37565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c61187f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614bc4565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b601b602052805f5260405f205f915054906101000a900460ff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612122612785565b73ffffffffffffffffffffffffffffffffffffffff1661214061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614c2c565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612262612785565b73ffffffffffffffffffffffffffffffffffffffff1661228061187f565b73ffffffffffffffffffffffffffffffffffffffff16146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906144bc565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161237091906140aa565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6123aa612785565b73ffffffffffffffffffffffffffffffffffffffff166123c861187f565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906144bc565b60405180910390fd5b620186a0600161242c610fa7565b61243691906145ff565b612440919061466d565b821015612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614cba565b60405180910390fd5b6103e8600561248f610fa7565b61249991906145ff565b6124a3919061466d565b8211156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614d48565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b601a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a2612785565b73ffffffffffffffffffffffffffffffffffffffff166125c061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906144bc565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6017602052805f5260405f205f915090505481565b612691612785565b73ffffffffffffffffffffffffffffffffffffffff166126af61187f565b73ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614dd6565b60405180910390fd5b61277c81613695565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614e64565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614ef2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129429190614146565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614f80565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a229061500e565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615076565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b36906150de565b60405180910390fd5b5f8103612b5657612b5183835f6137f6565b613690565b600e5f9054906101000a900460ff161561303a57612b7261187f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be05750612bb061187f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c52575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6b5750600860149054906101000a900460ff16155b1561303957600e60019054906101000a900460ff16612d5f5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d1f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590615146565b60405180910390fd5b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfc5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600b54811115612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906151d4565b60405180910390fd5b600d54612e528361154d565b82612e5d9190614507565b1115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e959061523c565b60405180910390fd5b613038565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f405750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f8f57600b54811115612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81906152ca565b60405180910390fd5b613037565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661303657600d54612fe98361154d565b82612ff49190614507565b1115613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302c9061523c565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561312c575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016130ec919061421d565b602060405180830381865afa158015613107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312b91906152fc565b5b15613241575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016131bd96959493929190615327565b6020604051808303815f875af11580156131d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fd91906152fc565b90508061323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906153d0565b60405180910390fd5b505b5f61324b3061154d565b90505f600c54821015905080801561326f5750600e60029054906101000a900460ff165b80156132885750600860149054906101000a900460ff16155b80156132da5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561332d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613380575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c3576001600860146101000a81548160ff0219169083151502179055506133a8613a6b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613472575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561347b575f90505b5f811561368057601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d957505f601254115b156135715761350660646134f860125488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90506012546014548261351991906145ff565b613523919061466d565b60165f8282546135339190614507565b925050819055506012546013548261354b91906145ff565b613555919061466d565b60155f8282546135659190614507565b9250508190555061365d565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135c857505f600f54115b1561365c576135f560646135e7600f5488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050600f546011548261360891906145ff565b613612919061466d565b60165f8282546136229190614507565b92505081905550600f546010548261363a91906145ff565b613644919061466d565b60155f8282546136549190614507565b925050819055505b5b5f811115613671576136708730836137f6565b5b808561367d91906153ee565b94505b61368b8787876137f6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f80565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c99061500e565b60405180910390fd5b6138dd838383613c6f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395790615491565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139ee9190614507565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a529190614146565b60405180910390a3613a65848484613c74565b50505050565b5f613a753061154d565b90505f601654601554613a889190614507565b90505f80831480613a9857505f82145b15613aa557505050613c43565b6014600c54613ab491906145ff565b831115613acd576014600c54613aca91906145ff565b92505b5f479050613ada84613c79565b5f613aee8247613eaf90919063ffffffff16565b90505f613b1885613b0a60165485613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b6d906154dc565b5f6040518083038185875af1925050503d805f8114613ba7576040519150601f19603f3d011682016040523d82523d5f602084013e613bac565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bf7906154dc565b5f6040518083038185875af1925050503d805f8114613c31576040519150601f19603f3d011682016040523d82523d5f602084013e613c36565b606091505b5050809450505050505050505b565b5f8183613c5291906145ff565b905092915050565b5f8183613c67919061466d565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613c9557613c946154f0565b5b604051908082528060200260200182016040528015613cc35781602001602082028036833780820191505090505b50905030815f81518110613cda57613cd96148af565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613da29190615531565b81600181518110613db657613db56148af565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1c3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e7e95949392919061564c565b5f604051808303815f87803b158015613e95575f80fd5b505af1158015613ea7573d5f803e3d5ffd5b505050505050565b5f8183613ebc91906153ee565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b613ede81613ecc565b8114613ee8575f80fd5b50565b5f81359050613ef981613ed5565b92915050565b5f8060408385031215613f1557613f14613ec4565b5b5f613f2285828601613eeb565b9250506020613f3385828601613eeb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6682613f3d565b9050919050565b613f7681613f5c565b8114613f80575f80fd5b50565b5f81359050613f9181613f6d565b92915050565b5f60208284031215613fac57613fab613ec4565b5b5f613fb984828501613f83565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61400482613fc2565b61400e8185613fcc565b935061401e818560208601613fdc565b61402781613fea565b840191505092915050565b5f6020820190508181035f83015261404a8184613ffa565b905092915050565b5f806040838503121561406857614067613ec4565b5b5f61407585828601613f83565b925050602061408685828601613eeb565b9150509250929050565b5f8115159050919050565b6140a481614090565b82525050565b5f6020820190506140bd5f83018461409b565b92915050565b5f819050919050565b5f6140e66140e16140dc84613f3d565b6140c3565b613f3d565b9050919050565b5f6140f7826140cc565b9050919050565b5f614108826140ed565b9050919050565b614118816140fe565b82525050565b5f6020820190506141315f83018461410f565b92915050565b61414081613ecc565b82525050565b5f6020820190506141595f830184614137565b92915050565b5f6020828403121561417457614173613ec4565b5b5f61418184828501613eeb565b91505092915050565b5f805f606084860312156141a1576141a0613ec4565b5b5f6141ae86828701613f83565b93505060206141bf86828701613f83565b92505060406141d086828701613eeb565b9150509250925092565b5f60ff82169050919050565b6141ef816141da565b82525050565b5f6020820190506142085f8301846141e6565b92915050565b61421781613f5c565b82525050565b5f6020820190506142305f83018461420e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261425757614256614236565b5b8235905067ffffffffffffffff8111156142745761427361423a565b5b6020830191508360208202830111156142905761428f61423e565b5b9250929050565b6142a081614090565b81146142aa575f80fd5b50565b5f813590506142bb81614297565b92915050565b5f805f604084860312156142d8576142d7613ec4565b5b5f84013567ffffffffffffffff8111156142f5576142f4613ec8565b5b61430186828701614242565b93509350506020614314868287016142ad565b9150509250925092565b5f6020828403121561433357614332613ec4565b5b5f614340848285016142ad565b91505092915050565b5f806040838503121561435f5761435e613ec4565b5b5f61436c85828601613f83565b925050602061437d858286016142ad565b9150509250929050565b614390816141da565b811461439a575f80fd5b50565b5f813590506143ab81614387565b92915050565b5f819050919050565b6143c3816143b1565b81146143cd575f80fd5b50565b5f813590506143de816143ba565b92915050565b5f805f606084860312156143fb576143fa613ec4565b5b5f6144088682870161439d565b9350506020614419868287016143d0565b925050604061442a868287016143d0565b9150509250925092565b5f806040838503121561444a57614449613ec4565b5b5f61445785828601613f83565b925050602061446885828601613f83565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144a6602083613fcc565b91506144b182614472565b602082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61451182613ecc565b915061451c83613ecc565b9250828201905080821115614534576145336144da565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f61456e601d83613fcc565b91506145798261453a565b602082019050919050565b5f6020820190508181035f83015261459b81614562565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806145e657607f821691505b6020821081036145f9576145f86145a2565b5b50919050565b5f61460982613ecc565b915061461483613ecc565b925082820261462281613ecc565b91508282048414831517614639576146386144da565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61467782613ecc565b915061468283613ecc565b92508261469257614691614640565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d54786e416d6f756e74206c6f77655f8201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b5f6146f7602b83613fcc565b91506147028261469d565b604082019050919050565b5f6020820190508181035f830152614724816146eb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614785602883613fcc565b91506147908261472b565b604082019050919050565b5f6020820190508181035f8301526147b281614779565b9050919050565b7f496e76616c69642073706f6e736f7220616464726573730000000000000000005f82015250565b5f6147ed601783613fcc565b91506147f8826147b9565b602082019050919050565b5f6020820190508181035f83015261481a816147e1565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d6f756e74206c5f8201527f6f776572207468616e20302e3525000000000000000000000000000000000000602082015250565b5f61487b602e83613fcc565b915061488682614821565b604082019050919050565b5f6020820190508181035f8301526148a88161486f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614936603983613fcc565b9150614941826148dc565b604082019050919050565b5f6020820190508181035f8301526149638161492a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149c4602583613fcc565b91506149cf8261496a565b604082019050919050565b5f6020820190508181035f8301526149f1816149b8565b9050919050565b614a01816143b1565b82525050565b5f60a082019050614a1a5f8301886149f8565b614a2760208301876149f8565b614a3460408301866149f8565b614a416060830185614137565b614a4e608083018461420e565b9695505050505050565b5f606082019050614a6b5f8301866149f8565b614a7860208301856149f8565b614a856040830184614137565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614acb600283614a8d565b9150614ad682614a97565b600282019050919050565b5f819050919050565b614afb614af6826143b1565b614ae1565b82525050565b5f614b0b82614abf565b9150614b178285614aea565b602082019150614b278284614aea565b6020820191508190509392505050565b5f608082019050614b4a5f8301876149f8565b614b5760208301866141e6565b614b6460408301856149f8565b614b7160608301846149f8565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614bae601183613fcc565b9150614bb982614b7a565b602082019050919050565b5f6020820190508181035f830152614bdb81614ba2565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f614c16601483613fcc565b9150614c2182614be2565b602082019050919050565b5f6020820190508181035f830152614c4381614c0a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614ca4603583613fcc565b9150614caf82614c4a565b604082019050919050565b5f6020820190508181035f830152614cd181614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d32603483613fcc565b9150614d3d82614cd8565b604082019050919050565b5f6020820190508181035f830152614d5f81614d26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dc0602683613fcc565b9150614dcb82614d66565b604082019050919050565b5f6020820190508181035f830152614ded81614db4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e4e602483613fcc565b9150614e5982614df4565b604082019050919050565b5f6020820190508181035f830152614e7b81614e42565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614edc602283613fcc565b9150614ee782614e82565b604082019050919050565b5f6020820190508181035f830152614f0981614ed0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614f6a602583613fcc565b9150614f7582614f10565b604082019050919050565b5f6020820190508181035f830152614f9781614f5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614ff8602383613fcc565b915061500382614f9e565b604082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f615060601183613fcc565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6150c8600f83613fcc565b91506150d382615094565b602082019050919050565b5f6020820190508181035f8301526150f5816150bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615130601683613fcc565b915061513b826150fc565b602082019050919050565b5f6020820190508181035f83015261515d81615124565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178696d756d54786e416d6f756e742e000000000000000000000000000000602082015250565b5f6151be603183613fcc565b91506151c982615164565b604082019050919050565b5f6020820190508181035f8301526151eb816151b2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615226601383613fcc565b9150615231826151f2565b602082019050919050565b5f6020820190508181035f8301526152538161521a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178696d756d54786e416d6f756e742e0000000000000000000000000000602082015250565b5f6152b4603283613fcc565b91506152bf8261525a565b604082019050919050565b5f6020820190508181035f8301526152e1816152a8565b9050919050565b5f815190506152f681614297565b92915050565b5f6020828403121561531157615310613ec4565b5b5f61531e848285016152e8565b91505092915050565b5f60c08201905061533a5f83018961420e565b615347602083018861420e565b615354604083018761420e565b6153616060830186614137565b61536e6080830185614137565b61537b60a0830184614137565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f6153ba601483613fcc565b91506153c582615386565b602082019050919050565b5f6020820190508181035f8301526153e7816153ae565b9050919050565b5f6153f882613ecc565b915061540383613ecc565b925082820390508181111561541b5761541a6144da565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61547b602683613fcc565b915061548682615421565b604082019050919050565b5f6020820190508181035f8301526154a88161546f565b9050919050565b5f81905092915050565b50565b5f6154c75f836154af565b91506154d2826154b9565b5f82019050919050565b5f6154e6826154bc565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061552b81613f6d565b92915050565b5f6020828403121561554657615545613ec4565b5b5f6155538482850161551d565b91505092915050565b5f819050919050565b5f61557f61557a6155758461555c565b6140c3565b613ecc565b9050919050565b61558f81615565565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155c781613f5c565b82525050565b5f6155d883836155be565b60208301905092915050565b5f602082019050919050565b5f6155fa82615595565b615604818561559f565b935061560f836155af565b805f5b8381101561563f57815161562688826155cd565b9750615631836155e4565b925050600181019050615612565b5085935050505092915050565b5f60a08201905061565f5f830188614137565b61566c6020830187615586565b818103604083015261567e81866155f0565b905061568d606083018561420e565b61569a6080830184614137565b969550505050505056fea26469706673582212205b600aa2f3707c195cd8a67bfdb3755b344385c5e340571e6fbb7d1c4dfb4a5464736f6c63430008190033

Deployed Bytecode

0x608060405260043610610338575f3560e01c80638f85a043116101aa578063b99d3575116100f6578063d9b2466111610094578063e2f456051161006e578063e2f4560514610bf9578063f172525d14610c23578063f2fde38b14610c5f578063f7d0cab014610c875761033f565b8063d9b2466114610b59578063dd62ed3e14610b95578063dddc7d7614610bd15761033f565b8063c0246668116100d0578063c024666814610aa1578063d1c3ee7f14610ac9578063d257b34f14610af3578063d85ba06314610b2f5761033f565b8063b99d357514610a25578063bae14e1d14610a4f578063bbc0c74214610a775761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610949578063a9059cbb14610985578063a90eab8c146109c1578063b62496f5146109e95761033f565b80639c3b4fdc146108cb5780639fccce32146108f5578063a0d82dc51461091f5761033f565b80638f85a043146107d757806392136913146107ff578063924de9b71461082957806394e05c6d1461085157806395d89b41146108795780639a7a23d6146108a35761033f565b80633fecf30e1161028457806370a0823111610222578063751039fc116101fc578063751039fc146107435780637bce5a041461076d5780638a8c523c146107975780638da5cb5b146107ad5761033f565b806370a08231146106c9578063715018a61461070557806374d7fdbb1461071b5761033f565b80634fbee1931161025e5780634fbee1931461061157806366ca9b831461064d5780636a486a8e146106755780636ddd17131461069f5761033f565b80633fecf30e1461059557806349bd5a5e146105bd5780634a62bb65146105e75761033f565b80631bea6202116102f157806323b872dd116102cb57806323b872dd146104c9578063313ce5671461050557806337c2810f1461052f57806339509351146105595761033f565b80631bea62021461044d5780631f3fed8f14610477578063203e727e146104a15761033f565b806302dbd8f81461034357806304dfa45a1461036b57806306fdde0314610393578063095ea7b3146103bd5780631694505e146103f957806318160ddd146104235761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b5061036960048036038101906103649190613eff565b610cb1565b005b348015610376575f80fd5b50610391600480360381019061038c9190613f97565b610d9b565b005b34801561039e575f80fd5b506103a7610ed5565b6040516103b49190614032565b60405180910390f35b3480156103c8575f80fd5b506103e360048036038101906103de9190614052565b610f65565b6040516103f091906140aa565b60405180910390f35b348015610404575f80fd5b5061040d610f82565b60405161041a919061411e565b60405180910390f35b34801561042e575f80fd5b50610437610fa7565b6040516104449190614146565b60405180910390f35b348015610458575f80fd5b50610461610fb0565b60405161046e9190614146565b60405180910390f35b348015610482575f80fd5b5061048b610fb6565b6040516104989190614146565b60405180910390f35b3480156104ac575f80fd5b506104c760048036038101906104c2919061415f565b610fbc565b005b3480156104d4575f80fd5b506104ef60048036038101906104ea919061418a565b6110cb565b6040516104fc91906140aa565b60405180910390f35b348015610510575f80fd5b506105196111bd565b60405161052691906141f5565b60405180910390f35b34801561053a575f80fd5b506105436111c5565b604051610550919061421d565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190614052565b6111ea565b60405161058c91906140aa565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b69190613f97565b611291565b005b3480156105c8575f80fd5b506105d16113c1565b6040516105de919061421d565b60405180910390f35b3480156105f2575f80fd5b506105fb6113e6565b60405161060891906140aa565b60405180910390f35b34801561061c575f80fd5b5061063760048036038101906106329190613f97565b6113f8565b60405161064491906140aa565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190613eff565b61144a565b005b348015610680575f80fd5b50610689611534565b6040516106969190614146565b60405180910390f35b3480156106aa575f80fd5b506106b361153a565b6040516106c091906140aa565b60405180910390f35b3480156106d4575f80fd5b506106ef60048036038101906106ea9190613f97565b61154d565b6040516106fc9190614146565b60405180910390f35b348015610710575f80fd5b50610719611592565b005b348015610726575f80fd5b50610741600480360381019061073c919061415f565b611619565b005b34801561074e575f80fd5b50610757611728565b60405161076491906140aa565b60405180910390f35b348015610778575f80fd5b506107816117c5565b60405161078e9190614146565b60405180910390f35b3480156107a2575f80fd5b506107ab6117cb565b005b3480156107b8575f80fd5b506107c161187f565b6040516107ce919061421d565b60405180910390f35b3480156107e2575f80fd5b506107fd60048036038101906107f891906142c1565b6118a7565b005b34801561080a575f80fd5b506108136119be565b6040516108209190614146565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a919061431e565b6119c4565b005b34801561085c575f80fd5b5061087760048036038101906108729190613f97565b611a5d565b005b348015610884575f80fd5b5061088d611b97565b60405161089a9190614032565b60405180910390f35b3480156108ae575f80fd5b506108c960048036038101906108c49190614349565b611c27565b005b3480156108d6575f80fd5b506108df611d40565b6040516108ec9190614146565b60405180910390f35b348015610900575f80fd5b50610909611d46565b6040516109169190614146565b60405180910390f35b34801561092a575f80fd5b50610933611d4c565b6040516109409190614146565b60405180910390f35b348015610954575f80fd5b5061096f600480360381019061096a9190614052565b611d52565b60405161097c91906140aa565b60405180910390f35b348015610990575f80fd5b506109ab60048036038101906109a69190614052565b611e38565b6040516109b891906140aa565b60405180910390f35b3480156109cc575f80fd5b506109e760048036038101906109e291906143e4565b611e55565b005b3480156109f4575f80fd5b50610a0f6004803603810190610a0a9190613f97565b6120d8565b604051610a1c91906140aa565b60405180910390f35b348015610a30575f80fd5b50610a396120f5565b604051610a46919061421d565b60405180910390f35b348015610a5a575f80fd5b50610a756004803603810190610a709190613f97565b61211a565b005b348015610a82575f80fd5b50610a8b612247565b604051610a9891906140aa565b60405180910390f35b348015610aac575f80fd5b50610ac76004803603810190610ac29190614349565b61225a565b005b348015610ad4575f80fd5b50610add61237c565b604051610aea919061421d565b60405180910390f35b348015610afe575f80fd5b50610b196004803603810190610b14919061415f565b6123a1565b604051610b2691906140aa565b60405180910390f35b348015610b3a575f80fd5b50610b436124f5565b604051610b509190614146565b60405180910390f35b348015610b64575f80fd5b50610b7f6004803603810190610b7a9190613f97565b6124fb565b604051610b8c91906140aa565b60405180910390f35b348015610ba0575f80fd5b50610bbb6004803603810190610bb69190614434565b612518565b604051610bc89190614146565b60405180910390f35b348015610bdc575f80fd5b50610bf76004803603810190610bf29190614349565b61259a565b005b348015610c04575f80fd5b50610c0d61266e565b604051610c1a9190614146565b60405180910390f35b348015610c2e575f80fd5b50610c496004803603810190610c449190613f97565b612674565b604051610c569190614146565b60405180910390f35b348015610c6a575f80fd5b50610c856004803603810190610c809190613f97565b612689565b005b348015610c92575f80fd5b50610c9b61277f565b604051610ca89190614146565b60405180910390f35b610cb9612785565b73ffffffffffffffffffffffffffffffffffffffff16610cd761187f565b73ffffffffffffffffffffffffffffffffffffffff1614610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d24906144bc565b60405180910390fd5b8160138190555080601481905550601454601354610d4b9190614507565b60128190555060636012541115610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614584565b60405180910390fd5b5050565b610da3612785565b73ffffffffffffffffffffffffffffffffffffffff16610dc161187f565b73ffffffffffffffffffffffffffffffffffffffff1614610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906144bc565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3de051b4d5ce18dec98386d8ec6a614ddd4c62f083cf99955b678ec978aa310160405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ee4906145cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f10906145cf565b8015610f5b5780601f10610f3257610100808354040283529160200191610f5b565b820191905f5260205f20905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905090565b5f610f78610f71612785565b848461278c565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b600d5481565b60155481565b610fc4612785565b73ffffffffffffffffffffffffffffffffffffffff16610fe261187f565b73ffffffffffffffffffffffffffffffffffffffff1614611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906144bc565b60405180910390fd5b670de0b6b3a76400006103e8600161104e610fa7565b61105891906145ff565b611062919061466d565b61106c919061466d565b8110156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a59061470d565b60405180910390fd5b670de0b6b3a7640000816110c291906145ff565b600b8190555050565b5f6110d784848461294f565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111e612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561119d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111949061479b565b60405180910390fd5b6111b1856111a9612785565b85840361278c565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6112876111f6612785565b848460015f611203612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112829190614507565b61278c565b6001905092915050565b611299612785565b73ffffffffffffffffffffffffffffffffffffffff166112b761187f565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614803565b60405180910390fd5b600160175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611452612785565b73ffffffffffffffffffffffffffffffffffffffff1661147061187f565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906144bc565b60405180910390fd5b81601081905550806011819055506011546010546114e49190614507565b600f819055506063600f541115611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614584565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61159a612785565b73ffffffffffffffffffffffffffffffffffffffff166115b861187f565b73ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611605906144bc565b60405180910390fd5b6116175f613695565b565b611621612785565b73ffffffffffffffffffffffffffffffffffffffff1661163f61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906144bc565b60405180910390fd5b670de0b6b3a76400006103e860056116ab610fa7565b6116b591906145ff565b6116bf919061466d565b6116c9919061466d565b81101561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614891565b60405180910390fd5b670de0b6b3a76400008161171f91906145ff565b600d8190555050565b5f611731612785565b73ffffffffffffffffffffffffffffffffffffffff1661174f61187f565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906144bc565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6117d3612785565b73ffffffffffffffffffffffffffffffffffffffff166117f161187f565b73ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e906144bc565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118af612785565b73ffffffffffffffffffffffffffffffffffffffff166118cd61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a906144bc565b60405180910390fd5b5f5b838390508110156119b8578160185f868685818110611947576119466148af565b5b905060200201602081019061195c9190613f97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611925565b50505050565b60135481565b6119cc612785565b73ffffffffffffffffffffffffffffffffffffffff166119ea61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906144bc565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611a65612785565b73ffffffffffffffffffffffffffffffffffffffff16611a8361187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad0906144bc565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fec7cda7e686602e5a5a3692a0e69c4dab0898191024ca21d04f2372c14dfa85e60405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611ba6906145cf565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906145cf565b8015611c1d5780601f10611bf457610100808354040283529160200191611c1d565b820191905f5260205f20905b815481529060010190602001808311611c0057829003601f168201915b5050505050905090565b611c2f612785565b73ffffffffffffffffffffffffffffffffffffffff16611c4d61187f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9a906144bc565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d299061494c565b60405180910390fd5b611d3c8282613758565b5050565b60115481565b60165481565b60145481565b5f8060015f611d5f612785565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906149da565b60405180910390fd5b611e2d611e24612785565b8585840361278c565b600191505092915050565b5f611e4b611e44612785565b848461294f565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f07959493929190614a07565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f9193929190614a58565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd929190614b01565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff89493929190614b37565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c61187f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209090614bc4565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b601b602052805f5260405f205f915054906101000a900460ff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612122612785565b73ffffffffffffffffffffffffffffffffffffffff1661214061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90614c2c565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b612262612785565b73ffffffffffffffffffffffffffffffffffffffff1661228061187f565b73ffffffffffffffffffffffffffffffffffffffff16146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906144bc565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161237091906140aa565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6123aa612785565b73ffffffffffffffffffffffffffffffffffffffff166123c861187f565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906144bc565b60405180910390fd5b620186a0600161242c610fa7565b61243691906145ff565b612440919061466d565b821015612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614cba565b60405180910390fd5b6103e8600561248f610fa7565b61249991906145ff565b6124a3919061466d565b8211156124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614d48565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b601a602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a2612785565b73ffffffffffffffffffffffffffffffffffffffff166125c061187f565b73ffffffffffffffffffffffffffffffffffffffff1614612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906144bc565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600c5481565b6017602052805f5260405f205f915090505481565b612691612785565b73ffffffffffffffffffffffffffffffffffffffff166126af61187f565b73ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906144bc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614dd6565b60405180910390fd5b61277c81613695565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190614e64565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90614ef2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129429190614146565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614f80565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a229061500e565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615076565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b36906150de565b60405180910390fd5b5f8103612b5657612b5183835f6137f6565b613690565b600e5f9054906101000a900460ff161561303a57612b7261187f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612be05750612bb061187f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c52575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6b5750600860149054906101000a900460ff16155b1561303957600e60019054906101000a900460ff16612d5f5760195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d1f575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5590615146565b60405180910390fd5b5b601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfc5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ea357600b54811115612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d906151d4565b60405180910390fd5b600d54612e528361154d565b82612e5d9190614507565b1115612e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e959061523c565b60405180910390fd5b613038565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f405750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f8f57600b54811115612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f81906152ca565b60405180910390fd5b613037565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661303657600d54612fe98361154d565b82612ff49190614507565b1115613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302c9061523c565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561312c575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016130ec919061421d565b602060405180830381865afa158015613107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312b91906152fc565b5b15613241575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016131bd96959493929190615327565b6020604051808303815f875af11580156131d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fd91906152fc565b90508061323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906153d0565b60405180910390fd5b505b5f61324b3061154d565b90505f600c54821015905080801561326f5750600e60029054906101000a900460ff165b80156132885750600860149054906101000a900460ff16155b80156132da5750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561332d575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613380575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156133c3576001600860146101000a81548160ff0219169083151502179055506133a8613a6b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613472575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561347b575f90505b5f811561368057601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d957505f601254115b156135715761350660646134f860125488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90506012546014548261351991906145ff565b613523919061466d565b60165f8282546135339190614507565b925050819055506012546013548261354b91906145ff565b613555919061466d565b60155f8282546135659190614507565b9250508190555061365d565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135c857505f600f54115b1561365c576135f560646135e7600f5488613c4590919063ffffffff16565b613c5a90919063ffffffff16565b9050600f546011548261360891906145ff565b613612919061466d565b60165f8282546136229190614507565b92505081905550600f546010548261363a91906145ff565b613644919061466d565b60155f8282546136549190614507565b925050819055505b5b5f811115613671576136708730836137f6565b5b808561367d91906153ee565b94505b61368b8787876137f6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385b90614f80565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c99061500e565b60405180910390fd5b6138dd838383613c6f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395790615491565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546139ee9190614507565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a529190614146565b60405180910390a3613a65848484613c74565b50505050565b5f613a753061154d565b90505f601654601554613a889190614507565b90505f80831480613a9857505f82145b15613aa557505050613c43565b6014600c54613ab491906145ff565b831115613acd576014600c54613aca91906145ff565b92505b5f479050613ada84613c79565b5f613aee8247613eaf90919063ffffffff16565b90505f613b1885613b0a60165485613c4590919063ffffffff16565b613c5a90919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613b6d906154dc565b5f6040518083038185875af1925050503d805f8114613ba7576040519150601f19603f3d011682016040523d82523d5f602084013e613bac565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bf7906154dc565b5f6040518083038185875af1925050503d805f8114613c31576040519150601f19603f3d011682016040523d82523d5f602084013e613c36565b606091505b5050809450505050505050505b565b5f8183613c5291906145ff565b905092915050565b5f8183613c67919061466d565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613c9557613c946154f0565b5b604051908082528060200260200182016040528015613cc35781602001602082028036833780820191505090505b50905030815f81518110613cda57613cd96148af565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613da29190615531565b81600181518110613db657613db56148af565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e1c3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461278c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e7e95949392919061564c565b5f604051808303815f87803b158015613e95575f80fd5b505af1158015613ea7573d5f803e3d5ffd5b505050505050565b5f8183613ebc91906153ee565b905092915050565b5f80fd5b5f80fd5b5f819050919050565b613ede81613ecc565b8114613ee8575f80fd5b50565b5f81359050613ef981613ed5565b92915050565b5f8060408385031215613f1557613f14613ec4565b5b5f613f2285828601613eeb565b9250506020613f3385828601613eeb565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6682613f3d565b9050919050565b613f7681613f5c565b8114613f80575f80fd5b50565b5f81359050613f9181613f6d565b92915050565b5f60208284031215613fac57613fab613ec4565b5b5f613fb984828501613f83565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61400482613fc2565b61400e8185613fcc565b935061401e818560208601613fdc565b61402781613fea565b840191505092915050565b5f6020820190508181035f83015261404a8184613ffa565b905092915050565b5f806040838503121561406857614067613ec4565b5b5f61407585828601613f83565b925050602061408685828601613eeb565b9150509250929050565b5f8115159050919050565b6140a481614090565b82525050565b5f6020820190506140bd5f83018461409b565b92915050565b5f819050919050565b5f6140e66140e16140dc84613f3d565b6140c3565b613f3d565b9050919050565b5f6140f7826140cc565b9050919050565b5f614108826140ed565b9050919050565b614118816140fe565b82525050565b5f6020820190506141315f83018461410f565b92915050565b61414081613ecc565b82525050565b5f6020820190506141595f830184614137565b92915050565b5f6020828403121561417457614173613ec4565b5b5f61418184828501613eeb565b91505092915050565b5f805f606084860312156141a1576141a0613ec4565b5b5f6141ae86828701613f83565b93505060206141bf86828701613f83565b92505060406141d086828701613eeb565b9150509250925092565b5f60ff82169050919050565b6141ef816141da565b82525050565b5f6020820190506142085f8301846141e6565b92915050565b61421781613f5c565b82525050565b5f6020820190506142305f83018461420e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261425757614256614236565b5b8235905067ffffffffffffffff8111156142745761427361423a565b5b6020830191508360208202830111156142905761428f61423e565b5b9250929050565b6142a081614090565b81146142aa575f80fd5b50565b5f813590506142bb81614297565b92915050565b5f805f604084860312156142d8576142d7613ec4565b5b5f84013567ffffffffffffffff8111156142f5576142f4613ec8565b5b61430186828701614242565b93509350506020614314868287016142ad565b9150509250925092565b5f6020828403121561433357614332613ec4565b5b5f614340848285016142ad565b91505092915050565b5f806040838503121561435f5761435e613ec4565b5b5f61436c85828601613f83565b925050602061437d858286016142ad565b9150509250929050565b614390816141da565b811461439a575f80fd5b50565b5f813590506143ab81614387565b92915050565b5f819050919050565b6143c3816143b1565b81146143cd575f80fd5b50565b5f813590506143de816143ba565b92915050565b5f805f606084860312156143fb576143fa613ec4565b5b5f6144088682870161439d565b9350506020614419868287016143d0565b925050604061442a868287016143d0565b9150509250925092565b5f806040838503121561444a57614449613ec4565b5b5f61445785828601613f83565b925050602061446885828601613f83565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6144a6602083613fcc565b91506144b182614472565b602082019050919050565b5f6020820190508181035f8301526144d38161449a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61451182613ecc565b915061451c83613ecc565b9250828201905080821115614534576145336144da565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c6573730000005f82015250565b5f61456e601d83613fcc565b91506145798261453a565b602082019050919050565b5f6020820190508181035f83015261459b81614562565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806145e657607f821691505b6020821081036145f9576145f86145a2565b5b50919050565b5f61460982613ecc565b915061461483613ecc565b925082820261462281613ecc565b91508282048414831517614639576146386144da565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61467782613ecc565b915061468283613ecc565b92508261469257614691614640565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d54786e416d6f756e74206c6f77655f8201527f72207468616e20302e3125000000000000000000000000000000000000000000602082015250565b5f6146f7602b83613fcc565b91506147028261469d565b604082019050919050565b5f6020820190508181035f830152614724816146eb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614785602883613fcc565b91506147908261472b565b604082019050919050565b5f6020820190508181035f8301526147b281614779565b9050919050565b7f496e76616c69642073706f6e736f7220616464726573730000000000000000005f82015250565b5f6147ed601783613fcc565b91506147f8826147b9565b602082019050919050565b5f6020820190508181035f83015261481a816147e1565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d6f756e74206c5f8201527f6f776572207468616e20302e3525000000000000000000000000000000000000602082015250565b5f61487b602e83613fcc565b915061488682614821565b604082019050919050565b5f6020820190508181035f8301526148a88161486f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614936603983613fcc565b9150614941826148dc565b604082019050919050565b5f6020820190508181035f8301526149638161492a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149c4602583613fcc565b91506149cf8261496a565b604082019050919050565b5f6020820190508181035f8301526149f1816149b8565b9050919050565b614a01816143b1565b82525050565b5f60a082019050614a1a5f8301886149f8565b614a2760208301876149f8565b614a3460408301866149f8565b614a416060830185614137565b614a4e608083018461420e565b9695505050505050565b5f606082019050614a6b5f8301866149f8565b614a7860208301856149f8565b614a856040830184614137565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614acb600283614a8d565b9150614ad682614a97565b600282019050919050565b5f819050919050565b614afb614af6826143b1565b614ae1565b82525050565b5f614b0b82614abf565b9150614b178285614aea565b602082019150614b278284614aea565b6020820191508190509392505050565b5f608082019050614b4a5f8301876149f8565b614b5760208301866141e6565b614b6460408301856149f8565b614b7160608301846149f8565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614bae601183613fcc565b9150614bb982614b7a565b602082019050919050565b5f6020820190508181035f830152614bdb81614ba2565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f614c16601483613fcc565b9150614c2182614be2565b602082019050919050565b5f6020820190508181035f830152614c4381614c0a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614ca4603583613fcc565b9150614caf82614c4a565b604082019050919050565b5f6020820190508181035f830152614cd181614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614d32603483613fcc565b9150614d3d82614cd8565b604082019050919050565b5f6020820190508181035f830152614d5f81614d26565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614dc0602683613fcc565b9150614dcb82614d66565b604082019050919050565b5f6020820190508181035f830152614ded81614db4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614e4e602483613fcc565b9150614e5982614df4565b604082019050919050565b5f6020820190508181035f830152614e7b81614e42565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614edc602283613fcc565b9150614ee782614e82565b604082019050919050565b5f6020820190508181035f830152614f0981614ed0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614f6a602583613fcc565b9150614f7582614f10565b604082019050919050565b5f6020820190508181035f830152614f9781614f5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614ff8602383613fcc565b915061500382614f9e565b604082019050919050565b5f6020820190508181035f83015261502581614fec565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f615060601183613fcc565b915061506b8261502c565b602082019050919050565b5f6020820190508181035f83015261508d81615054565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6150c8600f83613fcc565b91506150d382615094565b602082019050919050565b5f6020820190508181035f8301526150f5816150bc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615130601683613fcc565b915061513b826150fc565b602082019050919050565b5f6020820190508181035f83015261515d81615124565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178696d756d54786e416d6f756e742e000000000000000000000000000000602082015250565b5f6151be603183613fcc565b91506151c982615164565b604082019050919050565b5f6020820190508181035f8301526151eb816151b2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615226601383613fcc565b9150615231826151f2565b602082019050919050565b5f6020820190508181035f8301526152538161521a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178696d756d54786e416d6f756e742e0000000000000000000000000000602082015250565b5f6152b4603283613fcc565b91506152bf8261525a565b604082019050919050565b5f6020820190508181035f8301526152e1816152a8565b9050919050565b5f815190506152f681614297565b92915050565b5f6020828403121561531157615310613ec4565b5b5f61531e848285016152e8565b91505092915050565b5f60c08201905061533a5f83018961420e565b615347602083018861420e565b615354604083018761420e565b6153616060830186614137565b61536e6080830185614137565b61537b60a0830184614137565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f6153ba601483613fcc565b91506153c582615386565b602082019050919050565b5f6020820190508181035f8301526153e7816153ae565b9050919050565b5f6153f882613ecc565b915061540383613ecc565b925082820390508181111561541b5761541a6144da565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61547b602683613fcc565b915061548682615421565b604082019050919050565b5f6020820190508181035f8301526154a88161546f565b9050919050565b5f81905092915050565b50565b5f6154c75f836154af565b91506154d2826154b9565b5f82019050919050565b5f6154e6826154bc565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061552b81613f6d565b92915050565b5f6020828403121561554657615545613ec4565b5b5f6155538482850161551d565b91505092915050565b5f819050919050565b5f61557f61557a6155758461555c565b6140c3565b613ecc565b9050919050565b61558f81615565565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6155c781613f5c565b82525050565b5f6155d883836155be565b60208301905092915050565b5f602082019050919050565b5f6155fa82615595565b615604818561559f565b935061560f836155af565b805f5b8381101561563f57815161562688826155cd565b9750615631836155e4565b925050600181019050615612565b5085935050505092915050565b5f60a08201905061565f5f830188614137565b61566c6020830187615586565b818103604083015261567e81866155f0565b905061568d606083018561420e565b61569a6080830184614137565b969550505050505056fea26469706673582212205b600aa2f3707c195cd8a67bfdb3755b344385c5e340571e6fbb7d1c4dfb4a5464736f6c63430008190033

Deployed Bytecode Sourcemap

15810:15207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23646:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24858:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2910:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3890:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15885:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3231:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16181:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16555:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22679:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4092:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3130:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15968:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4629:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21458:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15933:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21948:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23327:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16448:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16304:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3347:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;937:103;;;;;;;;;;;;;:::i;:::-;;21636:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20301:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16378:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19941:112;;;;;;;;;;;;;:::i;:::-;;714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20061:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16483:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23219:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24670:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3018:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24162:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16415:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16595:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16521:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4927:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3498:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20430:1020;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16861:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16033:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19751:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16264:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16066:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22190:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16344:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16793:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3706:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22956:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16141:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16631:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1048:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16103:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:318;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:13:::1;23765:16;:32;;;;23821:7;23808:10;:20;;;;23874:10;;23855:16;;:29;;;;:::i;:::-;23839:13;:45;;;;23920:2;23903:13;;:19;;23895:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23646:318:::0;;:::o;24858:173::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24973:13:::1;;;;;;;;;;;24941:46;;24962:9;24941:46;;;;;;;;;;;;25014:9;24998:13;;:25;;;;;;;;;;;;;;;;;;24858:173:::0;:::o;2910:100::-;2964:13;2997:5;2990:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2910:100;:::o;3890:194::-;3998:4;4015:39;4024:12;:10;:12::i;:::-;4038:7;4047:6;4015:8;:39::i;:::-;4072:4;4065:11;;3890:194;;;;:::o;15885:41::-;;;;;;;;;;;;;:::o;3231:108::-;3292:7;3319:12;;3312:19;;3231:108;:::o;16181:34::-;;;;:::o;16555:33::-;;;;:::o;22679:269::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22816:4:::1;22808;22803:1;22787:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22786:26;;;;:::i;:::-;22785:35;;;;:::i;:::-;22775:6;:45;;22753:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;22931:8;22921:6;:19;;;;:::i;:::-;22902:16;:38;;;;22679:269:::0;:::o;4092:529::-;4232:4;4249:36;4259:6;4267:9;4278:6;4249:9;:36::i;:::-;4298:24;4325:11;:19;4337:6;4325:19;;;;;;;;;;;;;;;:33;4345:12;:10;:12::i;:::-;4325:33;;;;;;;;;;;;;;;;4298:60;;4411:6;4391:16;:26;;4369:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4521:57;4530:6;4538:12;:10;:12::i;:::-;4571:6;4552:16;:25;4521:8;:57::i;:::-;4609:4;4602:11;;;4092:529;;;;;:::o;3130:93::-;3188:5;3213:2;3206:9;;3130:93;:::o;15968:26::-;;;;;;;;;;;;;:::o;4629:290::-;4742:4;4759:130;4782:12;:10;:12::i;:::-;4809:7;4868:10;4831:11;:25;4843:12;:10;:12::i;:::-;4831:25;;;;;;;;;;;;;;;:34;4857:7;4831:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4759:8;:130::i;:::-;4907:4;4900:11;;4629:290;;;;:::o;21458:170::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21556:1:::1;21536:22;;:8;:22;;::::0;21528:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21619:1;21597:9;:19;21607:8;21597:19;;;;;;;;;;;;;;;:23;;;;21458:170:::0;:::o;15933:28::-;;;;;;;;;;;;;:::o;16224:33::-;;;;;;;;;;;;;:::o;21948:126::-;22014:4;22038:19;:28;22058:7;22038:28;;;;;;;;;;;;;;;;;;;;;;;;;22031:35;;21948:126;;;:::o;23327:311::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23463:13:::1;23445:15;:31;;;;23499:7;23487:9;:19;;;;23550:9;;23532:15;;:27;;;;:::i;:::-;23517:12;:42;;;;23594:2;23578:12;;:18;;23570:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23327:311:::0;;:::o;16448:28::-;;;;:::o;16304:31::-;;;;;;;;;;;;;:::o;3347:143::-;3437:7;3464:9;:18;3474:7;3464:18;;;;;;;;;;;;;;;;3457:25;;3347:143;;;:::o;937:103::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1002:30:::1;1029:1;1002:18;:30::i;:::-;937:103::o:0;21636:304::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21802:4:::1;21794;21789:1;21773:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21772:26;;;;:::i;:::-;21771:35;;;;:::i;:::-;21761:6;:45;;21739:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21923:8;21913:6;:19;;;;:::i;:::-;21891;:41;;;;21636:304:::0;:::o;20301:121::-;20353:4;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20387:5:::1;20370:14;;:22;;;;;;;;;;;;;;;;;;20410:4;20403:11;;20301:121:::0;:::o;16378:30::-;;;;:::o;19941:112::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20012:4:::1;19996:13;;:20;;;;;;;;;;;;;;;;;;20041:4;20027:11;;:18;;;;;;;;;;;;;;;;;;19941:112::o:0;714:87::-;760:7;787:6;;;;;;;;;;;780:13;;714:87;:::o;20061:232::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20185:9:::1;20180:106;20204:7;;:14;;20200:1;:18;20180:106;;;20267:7;20240:12;:24;20253:7;;20261:1;20253:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20240:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20220:3;;;;;;;20180:106;;;;20061:232:::0;;;:::o;16483:31::-;;;;:::o;23219:100::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23304:7:::1;23290:11;;:21;;;;;;;;;;;;;;;;;;23219:100:::0;:::o;24670:180::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24791:11:::1;;;;;;;;;;;24756:47;;24775:14;24756:47;;;;;;;;;;;;24828:14;24814:11;;:28;;;;;;;;;;;;;;;;;;24670:180:::0;:::o;3018:104::-;3074:13;3107:7;3100:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:104;:::o;24162:306::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24308:13:::1;;;;;;;;;;;24300:21;;:4;:21;;::::0;24278:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24419:41;24448:4;24454:5;24419:28;:41::i;:::-;24162:306:::0;;:::o;16415:24::-;;;;:::o;16595:27::-;;;;:::o;16521:25::-;;;;:::o;4927:475::-;5045:4;5062:24;5089:11;:25;5101:12;:10;:12::i;:::-;5089:25;;;;;;;;;;;;;;;:34;5115:7;5089:34;;;;;;;;;;;;;;;;5062:61;;5176:15;5156:16;:35;;5134:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5292:67;5301:12;:10;:12::i;:::-;5315:7;5343:15;5324:16;:34;5292:8;:67::i;:::-;5390:4;5383:11;;;4927:475;;;;:::o;3498:200::-;3609:4;3626:42;3636:12;:10;:12::i;:::-;3650:9;3661:6;3626:9;:42::i;:::-;3686:4;3679:11;;3498:200;;;;:::o;20430:1020::-;20514:18;20588:135;20752:22;;;;;;;;;;;;;;;;;20742:33;;;;;;20804:10;;;;;;;;;;;;;;;;;20794:21;;;;;;20834:13;20874:4;20559:335;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20535:370;;;;;;20514:391;;20918:18;20992:49;21070:23;;;;;;;;;;;;;;;;;21060:34;;;;;;21121:1;20963:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20939:210;;;;;;20918:231;;21162:14;21232:10;21244;21203:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21179:87;;;;;;21162:104;;21279:14;21296:26;21306:6;21314:1;21317;21320;21296:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21279:43;;21351:7;:5;:7::i;:::-;21341:17;;:6;:17;;;21333:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21409:4;21393:13;;:20;;;;;;;;;;;;;;;;;;21438:4;21424:11;;:18;;;;;;;;;;;;;;;;;;20503:947;;;;20430:1020;;;:::o;16861:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16033:26::-;;;;;;;;;;;;;:::o;19751:182::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19859:3:::1;19835:28;;:12;:28;;::::0;19827:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19913:12;19899:11;;:26;;;;;;;;;;;;;;;;;;19751:182:::0;:::o;16264:33::-;;;;;;;;;;;;;:::o;23972:182::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24088:8:::1;24057:19;:28;24077:7;24057:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24128:7;24112:34;;;24137:8;24112:34;;;;;;:::i;:::-;;;;;;;;23972:182:::0;;:::o;16066:28::-;;;;;;;;;;;;;:::o;22190:481::-;22287:4;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22361:6:::1;22356:1;22340:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22339:28;;;;:::i;:::-;22326:9;:41;;22304:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;22516:4;22511:1;22495:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22494:26;;;;:::i;:::-;22481:9;:39;;22459:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;22632:9;22611:18;:30;;;;22659:4;22652:11;;22190:481:::0;;;:::o;16344:27::-;;;;:::o;16793:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;3706:176::-;3820:7;3847:11;:18;3859:5;3847:18;;;;;;;;;;;;;;;:27;3866:7;3847:27;;;;;;;;;;;;;;;;3840:34;;3706:176;;;;:::o;22956:167::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23111:4:::1;23073:27;:35;23101:6;23073:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;22956:167:::0;;:::o;16141:33::-;;;;:::o;16631:44::-;;;;;;;;;;;;;;;;;:::o;1048:238::-;860:12;:10;:12::i;:::-;849:23;;:7;:5;:7::i;:::-;:23;;;841:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1171:1:::1;1151:22;;:8;:22;;::::0;1129:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1250:28;1269:8;1250:18;:28::i;:::-;1048:238:::0;:::o;16103:31::-;;;;:::o;235:98::-;288:7;315:10;308:17;;235:98;:::o;7194:380::-;7347:1;7330:19;;:5;:19;;;7322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7428:1;7409:21;;:7;:21;;;7401:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7512:6;7482:11;:18;7494:5;7482:18;;;;;;;;;;;;;;;:27;7501:7;7482:27;;;;;;;;;;;;;;;:36;;;;7550:7;7534:32;;7543:5;7534:32;;;7559:6;7534:32;;;;;;:::i;:::-;;;;;;;;7194:380;;;:::o;25039:4327::-;25187:1;25171:18;;:4;:18;;;25163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25264:1;25250:16;;:2;:16;;;25242:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25326:12;:18;25339:4;25326:18;;;;;;;;;;;;;;;;;;;;;;;;;25325:19;25317:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;25386:12;:16;25399:2;25386:16;;;;;;;;;;;;;;;;;;;;;;;;;25385:17;25377:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25449:1;25439:6;:11;25435:93;;25467:28;25483:4;25489:2;25493:1;25467:15;:28::i;:::-;25510:7;;25435:93;25544:14;;;;;;;;;;;25540:1686;;;25605:7;:5;:7::i;:::-;25597:15;;:4;:15;;;;:49;;;;;25639:7;:5;:7::i;:::-;25633:13;;:2;:13;;;;25597:49;:86;;;;;25681:1;25667:16;;:2;:16;;;;25597:86;:128;;;;;25718:6;25704:21;;:2;:21;;;;25597:128;:158;;;;;25747:8;;;;;;;;;;;25746:9;25597:158;25575:1640;;;25795:13;;;;;;;;;;;25790:223;;25867:19;:25;25887:4;25867:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25896:19;:23;25916:2;25896:23;;;;;;;;;;;;;;;;;;;;;;;;;25867:52;25833:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25790:223;26087:25;:31;26113:4;26087:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26144:27;:31;26172:2;26144:31;;;;;;;;;;;;;;;;;;;;;;;;;26143:32;26087:88;26061:1139;;;26262:16;;26252:6;:26;;26218:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;26462:19;;26445:13;26455:2;26445:9;:13::i;:::-;26436:6;:22;;;;:::i;:::-;:45;;26402:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;26061:1139;;;26650:25;:29;26676:2;26650:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26705:27;:33;26733:4;26705:33;;;;;;;;;;;;;;;;;;;;;;;;;26704:34;26650:88;26624:576;;;26825:16;;26815:6;:26;;26781:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;26624:576;;;26974:27;:31;27002:2;26974:31;;;;;;;;;;;;;;;;;;;;;;;;;26969:231;;27090:19;;27073:13;27083:2;27073:9;:13::i;:::-;27064:6;:22;;;;:::i;:::-;:45;;27030:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;26969:231;26624:576;26061:1139;25575:1640;25540:1686;27279:1;27256:25;;:11;;;;;;;;;;;:25;;;;:92;;;;;27311:11;;;;;;;;;;;27298:35;;;27342:4;27298:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27256:92;27238:456;;;27375:10;27401:11;;;;;;;;;;;27388:31;;;27438:4;27461:2;27490:13;;;;;;;;;;;27523:19;;27561:16;;27596:18;;27388:241;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27375:254;;27652:5;27644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27360:334;27238:456;27706:28;27737:24;27755:4;27737:9;:24::i;:::-;27706:55;;27772:12;27811:18;;27787:20;:42;;27772:57;;27858:7;:35;;;;;27882:11;;;;;;;;;;;27858:35;:61;;;;;27911:8;;;;;;;;;;;27910:9;27858:61;:107;;;;;27936:25;:29;27962:2;27936:29;;;;;;;;;;;;;;;;;;;;;;;;;27858:107;:150;;;;;27983:19;:25;28003:4;27983:25;;;;;;;;;;;;;;;;;;;;;;;;;27982:26;27858:150;:191;;;;;28026:19;:23;28046:2;28026:23;;;;;;;;;;;;;;;;;;;;;;;;;28025:24;27858:191;27840:319;;;28087:4;28076:8;;:15;;;;;;;;;;;;;;;;;;28106:10;:8;:10::i;:::-;28142:5;28131:8;;:16;;;;;;;;;;;;;;;;;;27840:319;28171:12;28187:8;;;;;;;;;;;28186:9;28171:24;;28297:19;:25;28317:4;28297:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28326:19;:23;28346:2;28326:23;;;;;;;;;;;;;;;;;;;;;;;;;28297:52;28293:100;;;28376:5;28366:15;;28293:100;28405:12;28510:7;28506:807;;;28562:25;:29;28588:2;28562:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28611:1;28595:13;;:17;28562:50;28558:606;;;28640:34;28670:3;28640:25;28651:13;;28640:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28633:41;;28731:13;;28717:10;;28710:4;:17;;;;:::i;:::-;28709:35;;;;:::i;:::-;28693:12;;:51;;;;;;;:::i;:::-;;;;;;;;28813:13;;28793:16;;28786:4;:23;;;;:::i;:::-;28785:41;;;;:::i;:::-;28763:18;;:63;;;;;;;:::i;:::-;;;;;;;;28558:606;;;28888:25;:31;28914:4;28888:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28938:1;28923:12;;:16;28888:51;28884:280;;;28967:33;28996:3;28967:24;28978:12;;28967:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;28960:40;;29056:12;;29043:9;;29036:4;:16;;;;:::i;:::-;29035:33;;;;:::i;:::-;29019:12;;:49;;;;;;;:::i;:::-;;;;;;;;29136:12;;29117:15;;29110:4;:22;;;;:::i;:::-;29109:39;;;;:::i;:::-;29087:18;;:61;;;;;;;:::i;:::-;;;;;;;;28884:280;28558:606;29191:1;29184:4;:8;29180:91;;;29213:42;29229:4;29243;29250;29213:15;:42::i;:::-;29180:91;29297:4;29287:14;;;;;:::i;:::-;;;28506:807;29325:33;29341:4;29347:2;29351:6;29325:15;:33::i;:::-;25152:4214;;;;25039:4327;;;;:::o;1294:191::-;1368:16;1387:6;;;;;;;;;;;1368:25;;1413:8;1404:6;;:17;;;;;;;;;;;;;;;;;;1468:8;1437:40;;1458:8;1437:40;;;;;;;;;;;;1357:128;1294:191;:::o;24476:186::-;24593:5;24559:25;:31;24585:4;24559:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24648:5;24614:40;;24642:4;24614:40;;;;;;;;;;;;24476:186;;:::o;5410:770::-;5568:1;5550:20;;:6;:20;;;5542:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5652:1;5631:23;;:9;:23;;;5623:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5707:47;5728:6;5736:9;5747:6;5707:20;:47::i;:::-;5767:21;5791:9;:17;5801:6;5791:17;;;;;;;;;;;;;;;;5767:41;;5858:6;5841:13;:23;;5819:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6002:6;5986:13;:22;5966:9;:17;5976:6;5966:17;;;;;;;;;;;;;;;:42;;;;6054:6;6030:9;:20;6040:9;6030:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6095:9;6078:35;;6087:6;6078:35;;;6106:6;6078:35;;;;;;:::i;:::-;;;;;;;;6126:46;6146:6;6154:9;6165:6;6126:19;:46::i;:::-;5531:649;5410:770;;;:::o;30086:928::-;30125:23;30151:24;30169:4;30151:9;:24::i;:::-;30125:50;;30186:25;30235:12;;30214:18;;:33;;;;:::i;:::-;30186:61;;30258:12;30306:1;30287:15;:20;:46;;;;30332:1;30311:17;:22;30287:46;30283:85;;;30350:7;;;;;30283:85;30423:2;30402:18;;:23;;;;:::i;:::-;30384:15;:41;30380:115;;;30481:2;30460:18;;:23;;;;:::i;:::-;30442:41;;30380:115;30507:25;30535:21;30507:49;;30567:33;30584:15;30567:16;:33::i;:::-;30613:18;30634:44;30660:17;30634:21;:25;;:44;;;;:::i;:::-;30613:65;;30689:17;30709:51;30742:17;30709:28;30724:12;;30709:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30689:71;;30794:1;30773:18;:22;;;;30821:1;30806:12;:16;;;;30857:13;;;;;;;;;;;30849:27;;30884:9;30849:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30835:63;;;;;30931:11;;;;;;;;;;;30923:25;;30956:21;30923:83;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30909:97;;;;;30114:900;;;;;;30086:928;:::o;9323:98::-;9381:7;9412:1;9408;:5;;;;:::i;:::-;9401:12;;9323:98;;;;:::o;9429:::-;9487:7;9518:1;9514;:5;;;;:::i;:::-;9507:12;;9429:98;;;;:::o;7582:125::-;;;;:::o;7715:124::-;;;;:::o;29489:589::-;29615:21;29653:1;29639:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29615:40;;29684:4;29666;29671:1;29666:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29710:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29700:4;29705:1;29700:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29745:62;29762:4;29777:15;;;;;;;;;;;29795:11;29745:8;:62::i;:::-;29846:15;;;;;;;;;;;:66;;;29927:11;29953:1;29997:4;30024;30044:15;29846:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29544:534;29489:589;:::o;9217:98::-;9275:7;9306:1;9302;:5;;;;:::i;:::-;9295:12;;9217:98;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:122::-;1477:24;1495:5;1477:24;:::i;:::-;1470:5;1467:35;1457:63;;1516:1;1513;1506:12;1457:63;1404:122;:::o;1532:139::-;1578:5;1616:6;1603:20;1594:29;;1632:33;1659:5;1632:33;:::i;:::-;1532:139;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:99::-;2064:6;2098:5;2092:12;2082:22;;2012:99;;;:::o;2117:169::-;2201:11;2235:6;2230:3;2223:19;2275:4;2270:3;2266:14;2251:29;;2117:169;;;;:::o;2292:139::-;2381:6;2376:3;2371;2365:23;2422:1;2413:6;2408:3;2404:16;2397:27;2292:139;;;:::o;2437:102::-;2478:6;2529:2;2525:7;2520:2;2513:5;2509:14;2505:28;2495:38;;2437:102;;;:::o;2545:377::-;2633:3;2661:39;2694:5;2661:39;:::i;:::-;2716:71;2780:6;2775:3;2716:71;:::i;:::-;2709:78;;2796:65;2854:6;2849:3;2842:4;2835:5;2831:16;2796:65;:::i;:::-;2886:29;2908:6;2886:29;:::i;:::-;2881:3;2877:39;2870:46;;2637:285;2545:377;;;;:::o;2928:313::-;3041:4;3079:2;3068:9;3064:18;3056:26;;3128:9;3122:4;3118:20;3114:1;3103:9;3099:17;3092:47;3156:78;3229:4;3220:6;3156:78;:::i;:::-;3148:86;;2928:313;;;;:::o;3247:474::-;3315:6;3323;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3625:2;3651:53;3696:7;3687:6;3676:9;3672:22;3651:53;:::i;:::-;3641:63;;3596:118;3247:474;;;;;:::o;3727:90::-;3761:7;3804:5;3797:13;3790:21;3779:32;;3727:90;;;:::o;3823:109::-;3904:21;3919:5;3904:21;:::i;:::-;3899:3;3892:34;3823:109;;:::o;3938:210::-;4025:4;4063:2;4052:9;4048:18;4040:26;;4076:65;4138:1;4127:9;4123:17;4114:6;4076:65;:::i;:::-;3938:210;;;;:::o;4154:60::-;4182:3;4203:5;4196:12;;4154:60;;;:::o;4220:142::-;4270:9;4303:53;4321:34;4330:24;4348:5;4330:24;:::i;:::-;4321:34;:::i;:::-;4303:53;:::i;:::-;4290:66;;4220:142;;;:::o;4368:126::-;4418:9;4451:37;4482:5;4451:37;:::i;:::-;4438:50;;4368:126;;;:::o;4500:153::-;4577:9;4610:37;4641:5;4610:37;:::i;:::-;4597:50;;4500:153;;;:::o;4659:185::-;4773:64;4831:5;4773:64;:::i;:::-;4768:3;4761:77;4659:185;;:::o;4850:276::-;4970:4;5008:2;4997:9;4993:18;4985:26;;5021:98;5116:1;5105:9;5101:17;5092:6;5021:98;:::i;:::-;4850:276;;;;:::o;5132:118::-;5219:24;5237:5;5219:24;:::i;:::-;5214:3;5207:37;5132:118;;:::o;5256:222::-;5349:4;5387:2;5376:9;5372:18;5364:26;;5400:71;5468:1;5457:9;5453:17;5444:6;5400:71;:::i;:::-;5256:222;;;;:::o;5484:329::-;5543:6;5592:2;5580:9;5571:7;5567:23;5563:32;5560:119;;;5598:79;;:::i;:::-;5560:119;5718:1;5743:53;5788:7;5779:6;5768:9;5764:22;5743:53;:::i;:::-;5733:63;;5689:117;5484:329;;;;:::o;5819:619::-;5896:6;5904;5912;5961:2;5949:9;5940:7;5936:23;5932:32;5929:119;;;5967:79;;:::i;:::-;5929:119;6087:1;6112:53;6157:7;6148:6;6137:9;6133:22;6112:53;:::i;:::-;6102:63;;6058:117;6214:2;6240:53;6285:7;6276:6;6265:9;6261:22;6240:53;:::i;:::-;6230:63;;6185:118;6342:2;6368:53;6413:7;6404:6;6393:9;6389:22;6368:53;:::i;:::-;6358:63;;6313:118;5819:619;;;;;:::o;6444:86::-;6479:7;6519:4;6512:5;6508:16;6497:27;;6444:86;;;:::o;6536:112::-;6619:22;6635:5;6619:22;:::i;:::-;6614:3;6607:35;6536:112;;:::o;6654:214::-;6743:4;6781:2;6770:9;6766:18;6758:26;;6794:67;6858:1;6847:9;6843:17;6834:6;6794:67;:::i;:::-;6654:214;;;;:::o;6874:118::-;6961:24;6979:5;6961:24;:::i;:::-;6956:3;6949:37;6874:118;;:::o;6998:222::-;7091:4;7129:2;7118:9;7114:18;7106:26;;7142:71;7210:1;7199:9;7195:17;7186:6;7142:71;:::i;:::-;6998:222;;;;:::o;7226:117::-;7335:1;7332;7325:12;7349:117;7458:1;7455;7448:12;7472:117;7581:1;7578;7571:12;7612:568;7685:8;7695:6;7745:3;7738:4;7730:6;7726:17;7722:27;7712:122;;7753:79;;:::i;:::-;7712:122;7866:6;7853:20;7843:30;;7896:18;7888:6;7885:30;7882:117;;;7918:79;;:::i;:::-;7882:117;8032:4;8024:6;8020:17;8008:29;;8086:3;8078:4;8070:6;8066:17;8056:8;8052:32;8049:41;8046:128;;;8093:79;;:::i;:::-;8046:128;7612:568;;;;;:::o;8186:116::-;8256:21;8271:5;8256:21;:::i;:::-;8249:5;8246:32;8236:60;;8292:1;8289;8282:12;8236:60;8186:116;:::o;8308:133::-;8351:5;8389:6;8376:20;8367:29;;8405:30;8429:5;8405:30;:::i;:::-;8308:133;;;;:::o;8447:698::-;8539:6;8547;8555;8604:2;8592:9;8583:7;8579:23;8575:32;8572:119;;;8610:79;;:::i;:::-;8572:119;8758:1;8747:9;8743:17;8730:31;8788:18;8780:6;8777:30;8774:117;;;8810:79;;:::i;:::-;8774:117;8923:80;8995:7;8986:6;8975:9;8971:22;8923:80;:::i;:::-;8905:98;;;;8701:312;9052:2;9078:50;9120:7;9111:6;9100:9;9096:22;9078:50;:::i;:::-;9068:60;;9023:115;8447:698;;;;;:::o;9151:323::-;9207:6;9256:2;9244:9;9235:7;9231:23;9227:32;9224:119;;;9262:79;;:::i;:::-;9224:119;9382:1;9407:50;9449:7;9440:6;9429:9;9425:22;9407:50;:::i;:::-;9397:60;;9353:114;9151:323;;;;:::o;9480:468::-;9545:6;9553;9602:2;9590:9;9581:7;9577:23;9573:32;9570:119;;;9608:79;;:::i;:::-;9570:119;9728:1;9753:53;9798:7;9789:6;9778:9;9774:22;9753:53;:::i;:::-;9743:63;;9699:117;9855:2;9881:50;9923:7;9914:6;9903:9;9899:22;9881:50;:::i;:::-;9871:60;;9826:115;9480:468;;;;;:::o;9954:118::-;10025:22;10041:5;10025:22;:::i;:::-;10018:5;10015:33;10005:61;;10062:1;10059;10052:12;10005:61;9954:118;:::o;10078:135::-;10122:5;10160:6;10147:20;10138:29;;10176:31;10201:5;10176:31;:::i;:::-;10078:135;;;;:::o;10219:77::-;10256:7;10285:5;10274:16;;10219:77;;;:::o;10302:122::-;10375:24;10393:5;10375:24;:::i;:::-;10368:5;10365:35;10355:63;;10414:1;10411;10404:12;10355:63;10302:122;:::o;10430:139::-;10476:5;10514:6;10501:20;10492:29;;10530:33;10557:5;10530:33;:::i;:::-;10430:139;;;;:::o;10575:615::-;10650:6;10658;10666;10715:2;10703:9;10694:7;10690:23;10686:32;10683:119;;;10721:79;;:::i;:::-;10683:119;10841:1;10866:51;10909:7;10900:6;10889:9;10885:22;10866:51;:::i;:::-;10856:61;;10812:115;10966:2;10992:53;11037:7;11028:6;11017:9;11013:22;10992:53;:::i;:::-;10982:63;;10937:118;11094:2;11120:53;11165:7;11156:6;11145:9;11141:22;11120:53;:::i;:::-;11110:63;;11065:118;10575:615;;;;;:::o;11196:474::-;11264:6;11272;11321:2;11309:9;11300:7;11296:23;11292:32;11289:119;;;11327:79;;:::i;:::-;11289:119;11447:1;11472:53;11517:7;11508:6;11497:9;11493:22;11472:53;:::i;:::-;11462:63;;11418:117;11574:2;11600:53;11645:7;11636:6;11625:9;11621:22;11600:53;:::i;:::-;11590:63;;11545:118;11196:474;;;;;:::o;11676:182::-;11816:34;11812:1;11804:6;11800:14;11793:58;11676:182;:::o;11864:366::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:419::-;12402:4;12440:2;12429:9;12425:18;12417:26;;12489:9;12483:4;12479:20;12475:1;12464:9;12460:17;12453:47;12517:131;12643:4;12517:131;:::i;:::-;12509:139;;12236:419;;;:::o;12661:180::-;12709:77;12706:1;12699:88;12806:4;12803:1;12796:15;12830:4;12827:1;12820:15;12847:191;12887:3;12906:20;12924:1;12906:20;:::i;:::-;12901:25;;12940:20;12958:1;12940:20;:::i;:::-;12935:25;;12983:1;12980;12976:9;12969:16;;13004:3;13001:1;12998:10;12995:36;;;13011:18;;:::i;:::-;12995:36;12847:191;;;;:::o;13044:179::-;13184:31;13180:1;13172:6;13168:14;13161:55;13044:179;:::o;13229:366::-;13371:3;13392:67;13456:2;13451:3;13392:67;:::i;:::-;13385:74;;13468:93;13557:3;13468:93;:::i;:::-;13586:2;13581:3;13577:12;13570:19;;13229:366;;;:::o;13601:419::-;13767:4;13805:2;13794:9;13790:18;13782:26;;13854:9;13848:4;13844:20;13840:1;13829:9;13825:17;13818:47;13882:131;14008:4;13882:131;:::i;:::-;13874:139;;13601:419;;;:::o;14026:180::-;14074:77;14071:1;14064:88;14171:4;14168:1;14161:15;14195:4;14192:1;14185:15;14212:320;14256:6;14293:1;14287:4;14283:12;14273:22;;14340:1;14334:4;14330:12;14361:18;14351:81;;14417:4;14409:6;14405:17;14395:27;;14351:81;14479:2;14471:6;14468:14;14448:18;14445:38;14442:84;;14498:18;;:::i;:::-;14442:84;14263:269;14212:320;;;:::o;14538:410::-;14578:7;14601:20;14619:1;14601:20;:::i;:::-;14596:25;;14635:20;14653:1;14635:20;:::i;:::-;14630:25;;14690:1;14687;14683:9;14712:30;14730:11;14712:30;:::i;:::-;14701:41;;14891:1;14882:7;14878:15;14875:1;14872:22;14852:1;14845:9;14825:83;14802:139;;14921:18;;:::i;:::-;14802:139;14586:362;14538:410;;;;:::o;14954:180::-;15002:77;14999:1;14992:88;15099:4;15096:1;15089:15;15123:4;15120:1;15113:15;15140:185;15180:1;15197:20;15215:1;15197:20;:::i;:::-;15192:25;;15231:20;15249:1;15231:20;:::i;:::-;15226:25;;15270:1;15260:35;;15275:18;;:::i;:::-;15260:35;15317:1;15314;15310:9;15305:14;;15140:185;;;;:::o;15331:230::-;15471:34;15467:1;15459:6;15455:14;15448:58;15540:13;15535:2;15527:6;15523:15;15516:38;15331:230;:::o;15567:366::-;15709:3;15730:67;15794:2;15789:3;15730:67;:::i;:::-;15723:74;;15806:93;15895:3;15806:93;:::i;:::-;15924:2;15919:3;15915:12;15908:19;;15567:366;;;:::o;15939:419::-;16105:4;16143:2;16132:9;16128:18;16120:26;;16192:9;16186:4;16182:20;16178:1;16167:9;16163:17;16156:47;16220:131;16346:4;16220:131;:::i;:::-;16212:139;;15939:419;;;:::o;16364:227::-;16504:34;16500:1;16492:6;16488:14;16481:58;16573:10;16568:2;16560:6;16556:15;16549:35;16364:227;:::o;16597:366::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16597:366;;;:::o;16969:419::-;17135:4;17173:2;17162:9;17158:18;17150:26;;17222:9;17216:4;17212:20;17208:1;17197:9;17193:17;17186:47;17250:131;17376:4;17250:131;:::i;:::-;17242:139;;16969:419;;;:::o;17394:173::-;17534:25;17530:1;17522:6;17518:14;17511:49;17394:173;:::o;17573:366::-;17715:3;17736:67;17800:2;17795:3;17736:67;:::i;:::-;17729:74;;17812:93;17901:3;17812:93;:::i;:::-;17930:2;17925:3;17921:12;17914:19;;17573:366;;;:::o;17945:419::-;18111:4;18149:2;18138:9;18134:18;18126:26;;18198:9;18192:4;18188:20;18184:1;18173:9;18169:17;18162:47;18226:131;18352:4;18226:131;:::i;:::-;18218:139;;17945:419;;;:::o;18370:233::-;18510:34;18506:1;18498:6;18494:14;18487:58;18579:16;18574:2;18566:6;18562:15;18555:41;18370:233;:::o;18609:366::-;18751:3;18772:67;18836:2;18831:3;18772:67;:::i;:::-;18765:74;;18848:93;18937:3;18848:93;:::i;:::-;18966:2;18961:3;18957:12;18950:19;;18609:366;;;:::o;18981:419::-;19147:4;19185:2;19174:9;19170:18;19162:26;;19234:9;19228:4;19224:20;19220:1;19209:9;19205:17;19198:47;19262:131;19388:4;19262:131;:::i;:::-;19254:139;;18981:419;;;:::o;19406:180::-;19454:77;19451:1;19444:88;19551:4;19548:1;19541:15;19575:4;19572:1;19565:15;19592:244;19732:34;19728:1;19720:6;19716:14;19709:58;19801:27;19796:2;19788:6;19784:15;19777:52;19592:244;:::o;19842:366::-;19984:3;20005:67;20069:2;20064:3;20005:67;:::i;:::-;19998:74;;20081:93;20170:3;20081:93;:::i;:::-;20199:2;20194:3;20190:12;20183:19;;19842:366;;;:::o;20214:419::-;20380:4;20418:2;20407:9;20403:18;20395:26;;20467:9;20461:4;20457:20;20453:1;20442:9;20438:17;20431:47;20495:131;20621:4;20495:131;:::i;:::-;20487:139;;20214:419;;;:::o;20639:224::-;20779:34;20775:1;20767:6;20763:14;20756:58;20848:7;20843:2;20835:6;20831:15;20824:32;20639:224;:::o;20869:366::-;21011:3;21032:67;21096:2;21091:3;21032:67;:::i;:::-;21025:74;;21108:93;21197:3;21108:93;:::i;:::-;21226:2;21221:3;21217:12;21210:19;;20869:366;;;:::o;21241:419::-;21407:4;21445:2;21434:9;21430:18;21422:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21522:131;21648:4;21522:131;:::i;:::-;21514:139;;21241:419;;;:::o;21666:118::-;21753:24;21771:5;21753:24;:::i;:::-;21748:3;21741:37;21666:118;;:::o;21790:664::-;21995:4;22033:3;22022:9;22018:19;22010:27;;22047:71;22115:1;22104:9;22100:17;22091:6;22047:71;:::i;:::-;22128:72;22196:2;22185:9;22181:18;22172:6;22128:72;:::i;:::-;22210;22278:2;22267:9;22263:18;22254:6;22210:72;:::i;:::-;22292;22360:2;22349:9;22345:18;22336:6;22292:72;:::i;:::-;22374:73;22442:3;22431:9;22427:19;22418:6;22374:73;:::i;:::-;21790:664;;;;;;;;:::o;22460:442::-;22609:4;22647:2;22636:9;22632:18;22624:26;;22660:71;22728:1;22717:9;22713:17;22704:6;22660:71;:::i;:::-;22741:72;22809:2;22798:9;22794:18;22785:6;22741:72;:::i;:::-;22823;22891:2;22880:9;22876:18;22867:6;22823:72;:::i;:::-;22460:442;;;;;;:::o;22908:148::-;23010:11;23047:3;23032:18;;22908:148;;;;:::o;23062:214::-;23202:66;23198:1;23190:6;23186:14;23179:90;23062:214;:::o;23282:400::-;23442:3;23463:84;23545:1;23540:3;23463:84;:::i;:::-;23456:91;;23556:93;23645:3;23556:93;:::i;:::-;23674:1;23669:3;23665:11;23658:18;;23282:400;;;:::o;23688:79::-;23727:7;23756:5;23745:16;;23688:79;;;:::o;23773:157::-;23878:45;23898:24;23916:5;23898:24;:::i;:::-;23878:45;:::i;:::-;23873:3;23866:58;23773:157;;:::o;23936:663::-;24177:3;24199:148;24343:3;24199:148;:::i;:::-;24192:155;;24357:75;24428:3;24419:6;24357:75;:::i;:::-;24457:2;24452:3;24448:12;24441:19;;24470:75;24541:3;24532:6;24470:75;:::i;:::-;24570:2;24565:3;24561:12;24554:19;;24590:3;24583:10;;23936:663;;;;;:::o;24605:545::-;24778:4;24816:3;24805:9;24801:19;24793:27;;24830:71;24898:1;24887:9;24883:17;24874:6;24830:71;:::i;:::-;24911:68;24975:2;24964:9;24960:18;24951:6;24911:68;:::i;:::-;24989:72;25057:2;25046:9;25042:18;25033:6;24989:72;:::i;:::-;25071;25139:2;25128:9;25124:18;25115:6;25071:72;:::i;:::-;24605:545;;;;;;;:::o;25156:167::-;25296:19;25292:1;25284:6;25280:14;25273:43;25156:167;:::o;25329:366::-;25471:3;25492:67;25556:2;25551:3;25492:67;:::i;:::-;25485:74;;25568:93;25657:3;25568:93;:::i;:::-;25686:2;25681:3;25677:12;25670:19;;25329:366;;;:::o;25701:419::-;25867:4;25905:2;25894:9;25890:18;25882:26;;25954:9;25948:4;25944:20;25940:1;25929:9;25925:17;25918:47;25982:131;26108:4;25982:131;:::i;:::-;25974:139;;25701:419;;;:::o;26126:170::-;26266:22;26262:1;26254:6;26250:14;26243:46;26126:170;:::o;26302:366::-;26444:3;26465:67;26529:2;26524:3;26465:67;:::i;:::-;26458:74;;26541:93;26630:3;26541:93;:::i;:::-;26659:2;26654:3;26650:12;26643:19;;26302:366;;;:::o;26674:419::-;26840:4;26878:2;26867:9;26863:18;26855:26;;26927:9;26921:4;26917:20;26913:1;26902:9;26898:17;26891:47;26955:131;27081:4;26955:131;:::i;:::-;26947:139;;26674:419;;;:::o;27099:240::-;27239:34;27235:1;27227:6;27223:14;27216:58;27308:23;27303:2;27295:6;27291:15;27284:48;27099:240;:::o;27345:366::-;27487:3;27508:67;27572:2;27567:3;27508:67;:::i;:::-;27501:74;;27584:93;27673:3;27584:93;:::i;:::-;27702:2;27697:3;27693:12;27686:19;;27345:366;;;:::o;27717:419::-;27883:4;27921:2;27910:9;27906:18;27898:26;;27970:9;27964:4;27960:20;27956:1;27945:9;27941:17;27934:47;27998:131;28124:4;27998:131;:::i;:::-;27990:139;;27717:419;;;:::o;28142:239::-;28282:34;28278:1;28270:6;28266:14;28259:58;28351:22;28346:2;28338:6;28334:15;28327:47;28142:239;:::o;28387:366::-;28529:3;28550:67;28614:2;28609:3;28550:67;:::i;:::-;28543:74;;28626:93;28715:3;28626:93;:::i;:::-;28744:2;28739:3;28735:12;28728:19;;28387:366;;;:::o;28759:419::-;28925:4;28963:2;28952:9;28948:18;28940:26;;29012:9;29006:4;29002:20;28998:1;28987:9;28983:17;28976:47;29040:131;29166:4;29040:131;:::i;:::-;29032:139;;28759:419;;;:::o;29184:225::-;29324:34;29320:1;29312:6;29308:14;29301:58;29393:8;29388:2;29380:6;29376:15;29369:33;29184:225;:::o;29415:366::-;29557:3;29578:67;29642:2;29637:3;29578:67;:::i;:::-;29571:74;;29654:93;29743:3;29654:93;:::i;:::-;29772:2;29767:3;29763:12;29756:19;;29415:366;;;:::o;29787:419::-;29953:4;29991:2;29980:9;29976:18;29968:26;;30040:9;30034:4;30030:20;30026:1;30015:9;30011:17;30004:47;30068:131;30194:4;30068:131;:::i;:::-;30060:139;;29787:419;;;:::o;30212:223::-;30352:34;30348:1;30340:6;30336:14;30329:58;30421:6;30416:2;30408:6;30404:15;30397:31;30212:223;:::o;30441:366::-;30583:3;30604:67;30668:2;30663:3;30604:67;:::i;:::-;30597:74;;30680:93;30769:3;30680:93;:::i;:::-;30798:2;30793:3;30789:12;30782:19;;30441:366;;;:::o;30813:419::-;30979:4;31017:2;31006:9;31002:18;30994:26;;31066:9;31060:4;31056:20;31052:1;31041:9;31037:17;31030:47;31094:131;31220:4;31094:131;:::i;:::-;31086:139;;30813:419;;;:::o;31238:221::-;31378:34;31374:1;31366:6;31362:14;31355:58;31447:4;31442:2;31434:6;31430:15;31423:29;31238:221;:::o;31465:366::-;31607:3;31628:67;31692:2;31687:3;31628:67;:::i;:::-;31621:74;;31704:93;31793:3;31704:93;:::i;:::-;31822:2;31817:3;31813:12;31806:19;;31465:366;;;:::o;31837:419::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:224::-;32402:34;32398:1;32390:6;32386:14;32379:58;32471:7;32466:2;32458:6;32454:15;32447:32;32262:224;:::o;32492:366::-;32634:3;32655:67;32719:2;32714:3;32655:67;:::i;:::-;32648:74;;32731:93;32820:3;32731:93;:::i;:::-;32849:2;32844:3;32840:12;32833:19;;32492:366;;;:::o;32864:419::-;33030:4;33068:2;33057:9;33053:18;33045:26;;33117:9;33111:4;33107:20;33103:1;33092:9;33088:17;33081:47;33145:131;33271:4;33145:131;:::i;:::-;33137:139;;32864:419;;;:::o;33289:222::-;33429:34;33425:1;33417:6;33413:14;33406:58;33498:5;33493:2;33485:6;33481:15;33474:30;33289:222;:::o;33517:366::-;33659:3;33680:67;33744:2;33739:3;33680:67;:::i;:::-;33673:74;;33756:93;33845:3;33756:93;:::i;:::-;33874:2;33869:3;33865:12;33858:19;;33517:366;;;:::o;33889:419::-;34055:4;34093:2;34082:9;34078:18;34070:26;;34142:9;34136:4;34132:20;34128:1;34117:9;34113:17;34106:47;34170:131;34296:4;34170:131;:::i;:::-;34162:139;;33889:419;;;:::o;34314:167::-;34454:19;34450:1;34442:6;34438:14;34431:43;34314:167;:::o;34487:366::-;34629:3;34650:67;34714:2;34709:3;34650:67;:::i;:::-;34643:74;;34726:93;34815:3;34726:93;:::i;:::-;34844:2;34839:3;34835:12;34828:19;;34487:366;;;:::o;34859:419::-;35025:4;35063:2;35052:9;35048:18;35040:26;;35112:9;35106:4;35102:20;35098:1;35087:9;35083:17;35076:47;35140:131;35266:4;35140:131;:::i;:::-;35132:139;;34859:419;;;:::o;35284:165::-;35424:17;35420:1;35412:6;35408:14;35401:41;35284:165;:::o;35455:366::-;35597:3;35618:67;35682:2;35677:3;35618:67;:::i;:::-;35611:74;;35694:93;35783:3;35694:93;:::i;:::-;35812:2;35807:3;35803:12;35796:19;;35455:366;;;:::o;35827:419::-;35993:4;36031:2;36020:9;36016:18;36008:26;;36080:9;36074:4;36070:20;36066:1;36055:9;36051:17;36044:47;36108:131;36234:4;36108:131;:::i;:::-;36100:139;;35827:419;;;:::o;36252:172::-;36392:24;36388:1;36380:6;36376:14;36369:48;36252:172;:::o;36430:366::-;36572:3;36593:67;36657:2;36652:3;36593:67;:::i;:::-;36586:74;;36669:93;36758:3;36669:93;:::i;:::-;36787:2;36782:3;36778:12;36771:19;;36430:366;;;:::o;36802:419::-;36968:4;37006:2;36995:9;36991:18;36983:26;;37055:9;37049:4;37045:20;37041:1;37030:9;37026:17;37019:47;37083:131;37209:4;37083:131;:::i;:::-;37075:139;;36802:419;;;:::o;37227:236::-;37367:34;37363:1;37355:6;37351:14;37344:58;37436:19;37431:2;37423:6;37419:15;37412:44;37227:236;:::o;37469:366::-;37611:3;37632:67;37696:2;37691:3;37632:67;:::i;:::-;37625:74;;37708:93;37797:3;37708:93;:::i;:::-;37826:2;37821:3;37817:12;37810:19;;37469:366;;;:::o;37841:419::-;38007:4;38045:2;38034:9;38030:18;38022:26;;38094:9;38088:4;38084:20;38080:1;38069:9;38065:17;38058:47;38122:131;38248:4;38122:131;:::i;:::-;38114:139;;37841:419;;;:::o;38266:169::-;38406:21;38402:1;38394:6;38390:14;38383:45;38266:169;:::o;38441:366::-;38583:3;38604:67;38668:2;38663:3;38604:67;:::i;:::-;38597:74;;38680:93;38769:3;38680:93;:::i;:::-;38798:2;38793:3;38789:12;38782:19;;38441:366;;;:::o;38813:419::-;38979:4;39017:2;39006:9;39002:18;38994:26;;39066:9;39060:4;39056:20;39052:1;39041:9;39037:17;39030:47;39094:131;39220:4;39094:131;:::i;:::-;39086:139;;38813:419;;;:::o;39238:237::-;39378:34;39374:1;39366:6;39362:14;39355:58;39447:20;39442:2;39434:6;39430:15;39423:45;39238:237;:::o;39481:366::-;39623:3;39644:67;39708:2;39703:3;39644:67;:::i;:::-;39637:74;;39720:93;39809:3;39720:93;:::i;:::-;39838:2;39833:3;39829:12;39822:19;;39481:366;;;:::o;39853:419::-;40019:4;40057:2;40046:9;40042:18;40034:26;;40106:9;40100:4;40096:20;40092:1;40081:9;40077:17;40070:47;40134:131;40260:4;40134:131;:::i;:::-;40126:139;;39853:419;;;:::o;40278:137::-;40332:5;40363:6;40357:13;40348:22;;40379:30;40403:5;40379:30;:::i;:::-;40278:137;;;;:::o;40421:345::-;40488:6;40537:2;40525:9;40516:7;40512:23;40508:32;40505:119;;;40543:79;;:::i;:::-;40505:119;40663:1;40688:61;40741:7;40732:6;40721:9;40717:22;40688:61;:::i;:::-;40678:71;;40634:125;40421:345;;;;:::o;40772:775::-;41005:4;41043:3;41032:9;41028:19;41020:27;;41057:71;41125:1;41114:9;41110:17;41101:6;41057:71;:::i;:::-;41138:72;41206:2;41195:9;41191:18;41182:6;41138:72;:::i;:::-;41220;41288:2;41277:9;41273:18;41264:6;41220:72;:::i;:::-;41302;41370:2;41359:9;41355:18;41346:6;41302:72;:::i;:::-;41384:73;41452:3;41441:9;41437:19;41428:6;41384:73;:::i;:::-;41467;41535:3;41524:9;41520:19;41511:6;41467:73;:::i;:::-;40772:775;;;;;;;;;:::o;41553:170::-;41693:22;41689:1;41681:6;41677:14;41670:46;41553:170;:::o;41729:366::-;41871:3;41892:67;41956:2;41951:3;41892:67;:::i;:::-;41885:74;;41968:93;42057:3;41968:93;:::i;:::-;42086:2;42081:3;42077:12;42070:19;;41729:366;;;:::o;42101:419::-;42267:4;42305:2;42294:9;42290:18;42282:26;;42354:9;42348:4;42344:20;42340:1;42329:9;42325:17;42318:47;42382:131;42508:4;42382:131;:::i;:::-;42374:139;;42101:419;;;:::o;42526:194::-;42566:4;42586:20;42604:1;42586:20;:::i;:::-;42581:25;;42620:20;42638:1;42620:20;:::i;:::-;42615:25;;42664:1;42661;42657:9;42649:17;;42688:1;42682:4;42679:11;42676:37;;;42693:18;;:::i;:::-;42676:37;42526:194;;;;:::o;42726:225::-;42866:34;42862:1;42854:6;42850:14;42843:58;42935:8;42930:2;42922:6;42918:15;42911:33;42726:225;:::o;42957:366::-;43099:3;43120:67;43184:2;43179:3;43120:67;:::i;:::-;43113:74;;43196:93;43285:3;43196:93;:::i;:::-;43314:2;43309:3;43305:12;43298:19;;42957:366;;;:::o;43329:419::-;43495:4;43533:2;43522:9;43518:18;43510:26;;43582:9;43576:4;43572:20;43568:1;43557:9;43553:17;43546:47;43610:131;43736:4;43610:131;:::i;:::-;43602:139;;43329:419;;;:::o;43754:147::-;43855:11;43892:3;43877:18;;43754:147;;;;:::o;43907:114::-;;:::o;44027:398::-;44186:3;44207:83;44288:1;44283:3;44207:83;:::i;:::-;44200:90;;44299:93;44388:3;44299:93;:::i;:::-;44417:1;44412:3;44408:11;44401:18;;44027:398;;;:::o;44431:379::-;44615:3;44637:147;44780:3;44637:147;:::i;:::-;44630:154;;44801:3;44794:10;;44431:379;;;:::o;44816:180::-;44864:77;44861:1;44854:88;44961:4;44958:1;44951:15;44985:4;44982:1;44975:15;45002:143;45059:5;45090:6;45084:13;45075:22;;45106:33;45133:5;45106:33;:::i;:::-;45002:143;;;;:::o;45151:351::-;45221:6;45270:2;45258:9;45249:7;45245:23;45241:32;45238:119;;;45276:79;;:::i;:::-;45238:119;45396:1;45421:64;45477:7;45468:6;45457:9;45453:22;45421:64;:::i;:::-;45411:74;;45367:128;45151:351;;;;:::o;45508:85::-;45553:7;45582:5;45571:16;;45508:85;;;:::o;45599:158::-;45657:9;45690:61;45708:42;45717:32;45743:5;45717:32;:::i;:::-;45708:42;:::i;:::-;45690:61;:::i;:::-;45677:74;;45599:158;;;:::o;45763:147::-;45858:45;45897:5;45858:45;:::i;:::-;45853:3;45846:58;45763:147;;:::o;45916:114::-;45983:6;46017:5;46011:12;46001:22;;45916:114;;;:::o;46036:184::-;46135:11;46169:6;46164:3;46157:19;46209:4;46204:3;46200:14;46185:29;;46036:184;;;;:::o;46226:132::-;46293:4;46316:3;46308:11;;46346:4;46341:3;46337:14;46329:22;;46226:132;;;:::o;46364:108::-;46441:24;46459:5;46441:24;:::i;:::-;46436:3;46429:37;46364:108;;:::o;46478:179::-;46547:10;46568:46;46610:3;46602:6;46568:46;:::i;:::-;46646:4;46641:3;46637:14;46623:28;;46478:179;;;;:::o;46663:113::-;46733:4;46765;46760:3;46756:14;46748:22;;46663:113;;;:::o;46812:732::-;46931:3;46960:54;47008:5;46960:54;:::i;:::-;47030:86;47109:6;47104:3;47030:86;:::i;:::-;47023:93;;47140:56;47190:5;47140:56;:::i;:::-;47219:7;47250:1;47235:284;47260:6;47257:1;47254:13;47235:284;;;47336:6;47330:13;47363:63;47422:3;47407:13;47363:63;:::i;:::-;47356:70;;47449:60;47502:6;47449:60;:::i;:::-;47439:70;;47295:224;47282:1;47279;47275:9;47270:14;;47235:284;;;47239:14;47535:3;47528:10;;46936:608;;;46812:732;;;;:::o;47550:831::-;47813:4;47851:3;47840:9;47836:19;47828:27;;47865:71;47933:1;47922:9;47918:17;47909:6;47865:71;:::i;:::-;47946:80;48022:2;48011:9;48007:18;47998:6;47946:80;:::i;:::-;48073:9;48067:4;48063:20;48058:2;48047:9;48043:18;48036:48;48101:108;48204:4;48195:6;48101:108;:::i;:::-;48093:116;;48219:72;48287:2;48276:9;48272:18;48263:6;48219:72;:::i;:::-;48301:73;48369:3;48358:9;48354:19;48345:6;48301:73;:::i;:::-;47550:831;;;;;;;;:::o

Swarm Source

ipfs://5b600aa2f3707c195cd8a67bfdb3755b344385c5e340571e6fbb7d1c4dfb4a54

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.