ETH Price: $3,350.11 (-2.00%)

Contract

0x2dE7B02Ae3b1f11d51Ca7b2495e9094874A064c0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

SHIB2 (SHIB2) (@$0.0002)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214869062024-12-26 13:22:1144 hrs ago1735219331IN
Shib2 Official: SHIB2 Token
0 ETH0.0006116412.9745403
Transfer214868982024-12-26 13:20:3544 hrs ago1735219235IN
Shib2 Official: SHIB2 Token
0 ETH0.000657697.4271913
Transfer214787742024-12-25 10:04:472 days ago1735121087IN
Shib2 Official: SHIB2 Token
0 ETH0.000585996.6175463
Transfer214786792024-12-25 9:45:352 days ago1735119935IN
Shib2 Official: SHIB2 Token
0 ETH0.000447335.05166537
Transfer214767032024-12-25 3:08:353 days ago1735096115IN
Shib2 Official: SHIB2 Token
0 ETH0.000391244.41827823
Approve214710082024-12-24 8:01:594 days ago1735027319IN
Shib2 Official: SHIB2 Token
0 ETH0.000356927.56926825
Approve214674812024-12-23 20:10:594 days ago1734984659IN
Shib2 Official: SHIB2 Token
0 ETH0.0012173225.81600715
Approve214659872024-12-23 15:09:474 days ago1734966587IN
Shib2 Official: SHIB2 Token
0 ETH0.0010644622.60305004
Approve214568062024-12-22 8:20:356 days ago1734855635IN
Shib2 Official: SHIB2 Token
0 ETH0.000365597.76301015
Approve214526132024-12-21 18:15:596 days ago1734804959IN
Shib2 Official: SHIB2 Token
0 ETH0.0006695914.20372128
Approve214401352024-12-20 0:25:238 days ago1734654323IN
Shib2 Official: SHIB2 Token
0 ETH0.0006728414.26912844
Transfer214358822024-12-19 10:10:358 days ago1734603035IN
Shib2 Official: SHIB2 Token
0 ETH0.0019626129.5414154
Approve214327432024-12-18 23:37:599 days ago1734565079IN
Shib2 Official: SHIB2 Token
0 ETH0.000647713.73590003
Approve214326802024-12-18 23:25:239 days ago1734564323IN
Shib2 Official: SHIB2 Token
0 ETH0.0007434715.78695811
Approve214259172024-12-18 0:44:1110 days ago1734482651IN
Shib2 Official: SHIB2 Token
0 ETH0.0005397311.44622725
Approve214183942024-12-16 23:32:5911 days ago1734391979IN
Shib2 Official: SHIB2 Token
0 ETH0.000562511.92920031
Approve214125742024-12-16 4:04:4712 days ago1734321887IN
Shib2 Official: SHIB2 Token
0 ETH0.0005290211.23328478
Approve214107782024-12-15 22:03:5912 days ago1734300239IN
Shib2 Official: SHIB2 Token
0 ETH0.0005601411.89410044
Approve213976052024-12-14 1:55:2314 days ago1734141323IN
Shib2 Official: SHIB2 Token
0 ETH0.0003059710.30830201
Approve213975222024-12-14 1:38:4714 days ago1734140327IN
Shib2 Official: SHIB2 Token
0 ETH0.000359212.08723551
Transfer213969132024-12-13 23:36:2314 days ago1734132983IN
Shib2 Official: SHIB2 Token
0 ETH0.000864659.76437742
Transfer213577032024-12-08 12:14:3519 days ago1733660075IN
Shib2 Official: SHIB2 Token
0 ETH0.000678019.49070211
Approve213544622024-12-08 1:23:2320 days ago1733621003IN
Shib2 Official: SHIB2 Token
0 ETH0.0005205611.05379351
Approve213538922024-12-07 23:28:3520 days ago1733614115IN
Shib2 Official: SHIB2 Token
0 ETH0.000500710.61860276
Approve213530922024-12-07 20:47:4720 days ago1733604467IN
Shib2 Official: SHIB2 Token
0 ETH0.0007399715.71274434
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
188352362023-12-21 15:48:59372 days ago1703173739
Shib2 Official: SHIB2 Token
0.0818004 ETH
188352362023-12-21 15:48:59372 days ago1703173739
Shib2 Official: SHIB2 Token
0.0818004 ETH
188232432023-12-19 23:25:11374 days ago1703028311
Shib2 Official: SHIB2 Token
0.03532076 ETH
188232432023-12-19 23:25:11374 days ago1703028311
Shib2 Official: SHIB2 Token
0.03532076 ETH
188092952023-12-18 0:25:35376 days ago1702859135
Shib2 Official: SHIB2 Token
0.034488 ETH
188092952023-12-18 0:25:35376 days ago1702859135
Shib2 Official: SHIB2 Token
0.034488 ETH
188005372023-12-16 18:55:35377 days ago1702752935
Shib2 Official: SHIB2 Token
0.08355792 ETH
188005372023-12-16 18:55:35377 days ago1702752935
Shib2 Official: SHIB2 Token
0.08355792 ETH
187858402023-12-14 17:23:23379 days ago1702574603
Shib2 Official: SHIB2 Token
0.06093459 ETH
187858402023-12-14 17:23:23379 days ago1702574603
Shib2 Official: SHIB2 Token
0.06093459 ETH
187799452023-12-13 21:32:47380 days ago1702503167
Shib2 Official: SHIB2 Token
0.04191327 ETH
187799452023-12-13 21:32:47380 days ago1702503167
Shib2 Official: SHIB2 Token
0.04191327 ETH
187799272023-12-13 21:29:11380 days ago1702502951
Shib2 Official: SHIB2 Token
0.02701304 ETH
187799272023-12-13 21:29:11380 days ago1702502951
Shib2 Official: SHIB2 Token
0.02701304 ETH
187721382023-12-12 19:18:47381 days ago1702408727
Shib2 Official: SHIB2 Token
0.02867269 ETH
187721382023-12-12 19:18:47381 days ago1702408727
Shib2 Official: SHIB2 Token
0.02867269 ETH
187653252023-12-11 20:24:47382 days ago1702326287
Shib2 Official: SHIB2 Token
0.05062417 ETH
187653252023-12-11 20:24:47382 days ago1702326287
Shib2 Official: SHIB2 Token
0.05062417 ETH
187653202023-12-11 20:23:47382 days ago1702326227
Shib2 Official: SHIB2 Token
0.03447117 ETH
187653202023-12-11 20:23:47382 days ago1702326227
Shib2 Official: SHIB2 Token
0.03447117 ETH
187647012023-12-11 18:19:11382 days ago1702318751
Shib2 Official: SHIB2 Token
0.01856584 ETH
187647012023-12-11 18:19:11382 days ago1702318751
Shib2 Official: SHIB2 Token
0.01856584 ETH
187502912023-12-09 17:55:47384 days ago1702144547
Shib2 Official: SHIB2 Token
0.0294212 ETH
187502912023-12-09 17:55:47384 days ago1702144547
Shib2 Official: SHIB2 Token
0.0294212 ETH
187473552023-12-09 8:03:11385 days ago1702108991
Shib2 Official: SHIB2 Token
0.0813397 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SHIB2

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-14
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * address(0) by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be address(0).
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address public _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the address(0) address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract SHIB2 is IERC20, Ownable {
    using Address for address;
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "SHIB2 ";
    string constant _symbol = "SHIB2";
    uint8 constant _decimals = 18;

    uint256 constant _totalSupply = 1_000_000_000 * (10 ** _decimals);


    uint256 public _maxTxAmount = (_totalSupply * 1) / 800; //~0.125%
    uint256 public _maxWalletSize = (_totalSupply * 1) / 400; //0.25%

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;
    mapping (address => uint256) lastSell;
    mapping (address => uint256) lastSellAmount;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 liquidityFee = 0;
    uint256 giveawayFee = 10;
    uint256 devmarketingFee = 20;
    uint256 totalFee = 30;
    uint256 sellBias = 30;

    //Higher tax for a period of time from the first purchase only, per address
    uint256 sellPercent = 100;
    uint256 sellPeriod = 24 hours;

    uint256 antiDumpTax = 100;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = false;
    uint256 feeDenominator = 1000;

    address public immutable liquidityReceiver;
    address payable public immutable giveawayReceiver;
    address payable public immutable devmarketingReceiver;

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress =0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
    


    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
 
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _lp, address _giveaway, address _devmarketing) {

        liquidityReceiver = _lp;
        giveawayReceiver = payable(_giveaway);
        devmarketingReceiver = payable(_devmarketing);

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below address(0)");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "address(0) amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        bool highSellPeriod = !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
            uint256 impactEstimate = amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient], highSellPeriod)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountGiveaway= (contractBalance * giveawayFee) / totalETHFee;
        uint256 amountDevMarketing = contractBalance - (amountLiquidity + amountGiveaway);

        if(amountToLiquify > 0) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountGiveaway > 0)
            giveawayReceiver.transfer(amountGiveaway);
            
        if (amountDevMarketing > 0)
            devmarketingReceiver.transfer(amountDevMarketing);

    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(address(0)));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        isTxLimitExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(antiDumpTax == 0 || _sellPercentIncrease <= antiDumpTax, "High period tax clashes with anti-dump tax");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
        emit SellPeriodSet(_sellPercentIncrease, _period);
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 400 && (_tax == 0 || _tax >= sellPercent) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
        emit AntiDumpTaxSet(_tax, _period, _threshold);
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        _maxTxAmount = (_totalSupply * numerator) / divisor;
        emit TransactionLimitSet(_maxTxAmount);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000, "Divisor must be greater than 0");
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit MaxWalletSet(_maxWalletSize);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setFees(uint256 _liquidityFee, uint256 _giveawayFee, uint256 _devmarketingFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        giveawayFee = _giveawayFee;
        devmarketingFee = _devmarketingFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _giveawayFee + _devmarketingFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4, "Fees too high");
        require(sellBias <= totalFee, "Incorrect sell bias");
        emit FeesSet(totalFee, feeDenominator, sellBias);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event LiquidityProviderSet(address indexed provider);
    event SellPeriodSet(uint256 percent, uint256 period);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator, uint256 sellBias);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_giveaway","type":"address"},{"internalType":"address","name":"_devmarketing","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBias","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"SellPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","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":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"devmarketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_giveawayFee","type":"uint256"},{"internalType":"uint256","name":"_devmarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

61012060405261032060016012600a6200001a919062000b77565b633b9aca006200002b919062000bc8565b62000037919062000bc8565b62000043919062000c58565b60015561019060016012600a6200005b919062000b77565b633b9aca006200006c919062000bc8565b62000078919062000bc8565b62000084919062000c58565b6002556000600a55600a600b556014600c55601e600d55601e600e556064600f5562015180601055606460115561070860125560156013556000601460006101000a81548160ff0219169083151502179055506103e8601555602860165560646017556001601c60006101000a81548160ff0219169083151502179055506101906012600a62000115919062000b77565b633b9aca0062000126919062000bc8565b62000132919062000c58565b601d556127106012600a62000148919062000b77565b633b9aca0062000159919062000bc8565b62000165919062000c58565b601e553480156200017557600080fd5b5060405162006c9c38038062006c9c83398181016040528101906200019b919062000cfa565b6000620001ad620009ac60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff168152505060e05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000d56565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660e05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000432919062000d56565b306040518363ffffffff1660e01b81526004016200045292919062000d99565b6020604051808303816000875af115801562000472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000498919062000d56565b73ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250506001601860006101005173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460006200055c620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620006b6620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200071d620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620007dc620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506012600a620008a9919062000b77565b633b9aca00620008ba919062000bc8565b60036000620008ce620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200091c620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6200097b919062000b77565b633b9aca006200098c919062000bc8565b6040516200099b919062000dd7565b60405180910390a350505062000df4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a6b5780860481111562000a435762000a42620009dd565b5b600185161562000a535780820291505b808102905062000a638562000a0c565b945062000a23565b94509492505050565b60008262000a86576001905062000b59565b8162000a96576000905062000b59565b816001811462000aaf576002811462000aba5762000af0565b600191505062000b59565b60ff84111562000acf5762000ace620009dd565b5b8360020a91508482111562000ae95762000ae8620009dd565b5b5062000b59565b5060208310610133831016604e8410600b841016171562000b2a5782820a90508381111562000b245762000b23620009dd565b5b62000b59565b62000b39848484600162000a19565b9250905081840481111562000b535762000b52620009dd565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b848262000b60565b915062000b918362000b6a565b925062000bc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a74565b905092915050565b600062000bd58262000b60565b915062000be28362000b60565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c1e5762000c1d620009dd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c658262000b60565b915062000c728362000b60565b92508262000c855762000c8462000c29565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cc28262000c95565b9050919050565b62000cd48162000cb5565b811462000ce057600080fd5b50565b60008151905062000cf48162000cc9565b92915050565b60008060006060848603121562000d165762000d1562000c90565b5b600062000d268682870162000ce3565b935050602062000d398682870162000ce3565b925050604062000d4c8682870162000ce3565b9150509250925092565b60006020828403121562000d6f5762000d6e62000c90565b5b600062000d7f8482850162000ce3565b91505092915050565b62000d938162000cb5565b82525050565b600060408201905062000db0600083018562000d88565b62000dbf602083018462000d88565b9392505050565b62000dd18162000b60565b82525050565b600060208201905062000dee600083018462000dc6565b92915050565b60805160a05160c05160e05161010051615e2462000e7860003960008181611fdb01528181612378015281816124d601526139e5015260008181612ccb015281816141f0015281816142cd01526143ec015260008181611769015261456b01526000818161201401526144fa015260008181611651015261442e0152615e246000f3fe6080604052600436106102765760003560e01c80636ddd17131161014f578063abb8d5e9116100c1578063dd62ed3e1161007a578063dd62ed3e14610989578063e624c4bc146109c6578063f2fde38b146109ef578063f84ba65d14610a18578063f8821a6214610a41578063f887ea4014610a6c5761027d565b8063abb8d5e914610879578063abe57e70146108a4578063b2bdfa7b146108cd578063bf56b371146108f8578063d088935814610923578063d51ed1c81461094c5761027d565b80638da5cb5b116101135780638da5cb5b146107535780638f9a55c01461077e57806395d89b41146107a9578063a457c2d7146107d4578063a8aa1b3114610811578063a9059cbb1461083c5761027d565b80636ddd17131461067e57806370a08231146106a9578063715018a6146106e65780637d1db4a5146106fd578063893d20e8146107285761027d565b806323b872dd116101e85780634707e24e116101ac5780634707e24e1461055c578063492a937b14610587578063571ac8b0146105b05780635804f1e4146105ed5780636419b6f914610618578063658d4b7f146106555761027d565b806323b872dd14610461578063264d26dd1461049e5780632b112e49146104c9578063313ce567146104f4578063395093511461051f5761027d565b80630e049c541161023a5780630e049c54146103555780630f4f7bfe1461037e5780631161ae39146103a757806318160ddd146103e45780631faf723b1461040f578063201e7991146104385761027d565b806301339c21146102825780630445b6671461029957806304a66b48146102c457806306fdde03146102ed578063095ea7b3146103185761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b005b3480156102a557600080fd5b506102ae610b77565b6040516102bb9190614611565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061465d565b610b7d565b005b3480156102f957600080fd5b50610302610d8d565b60405161030f9190614771565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906147f1565b610dca565b60405161034c919061484c565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614893565b610ebc565b005b34801561038a57600080fd5b506103a560048036038101906103a091906148fa565b61103a565b005b3480156103b357600080fd5b506103ce60048036038101906103c991906148fa565b611254565b6040516103db919061484c565b60405180910390f35b3480156103f057600080fd5b506103f9611269565b6040516104069190614611565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148fa565b61128d565b005b34801561044457600080fd5b5061045f600480360381019061045a91906148fa565b611398565b005b34801561046d57600080fd5b506104886004803603810190610483919061493a565b61148d565b604051610495919061484c565b60405180910390f35b3480156104aa57600080fd5b506104b361164f565b6040516104c0919061499c565b60405180910390f35b3480156104d557600080fd5b506104de611673565b6040516104eb9190614611565b60405180910390f35b34801561050057600080fd5b506105096116c0565b60405161051691906149d3565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906147f1565b6116c9565b604051610553919061484c565b60405180910390f35b34801561056857600080fd5b50610571611767565b60405161057e9190614a0f565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190614a2a565b61178b565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190614a6a565b611939565b6040516105e4919061484c565b60405180910390f35b3480156105f957600080fd5b5061060261196c565b60405161060f9190614611565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614a97565b611972565b60405161064c9190614611565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614a2a565b611a18565b005b34801561068a57600080fd5b50610693611bc6565b6040516106a0919061484c565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190614a6a565b611bd9565b6040516106dd9190614611565b60405180910390f35b3480156106f257600080fd5b506106fb611c22565b005b34801561070957600080fd5b50610712611e7b565b60405161071f9190614611565b60405180910390f35b34801561073457600080fd5b5061073d611e81565b60405161074a919061499c565b60405180910390f35b34801561075f57600080fd5b50610768611e90565b604051610775919061499c565b60405180910390f35b34801561078a57600080fd5b50610793611eb9565b6040516107a09190614611565b60405180910390f35b3480156107b557600080fd5b506107be611ebf565b6040516107cb9190614771565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906147f1565b611efc565b604051610808919061484c565b60405180910390f35b34801561081d57600080fd5b50610826611fd9565b604051610833919061499c565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e91906147f1565b611ffd565b604051610870919061484c565b60405180910390f35b34801561088557600080fd5b5061088e612012565b60405161089b9190614a0f565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c691906148fa565b612036565b005b3480156108d957600080fd5b506108e2612192565b6040516108ef919061499c565b60405180910390f35b34801561090457600080fd5b5061090d6121b6565b60405161091a9190614611565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614ad7565b6121bc565b005b34801561095857600080fd5b50610973600480360381019061096e9190614b2a565b612369565b6040516109809190614611565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190614b57565b6123b8565b6040516109bd9190614611565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614a6a565b61243f565b005b3480156109fb57600080fd5b50610a166004803603810190610a119190614a6a565b6126fd565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a9190614a2a565b612b15565b005b348015610a4d57600080fd5b50610a56612cc3565b604051610a639190614611565b60405180910390f35b348015610a7857600080fd5b50610a81612cc9565b604051610a8e9190614bf6565b60405180910390f35b610a9f612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390614c5d565b60405180910390fd5b6000601a5414610b3b57600080fd5b43601a8190555042601b819055507fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641560405160405180910390a1565b601d5481565b610b85612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990614c5d565b60405180910390fd5b8460028087610c219190614cdb565b610c2b9190614d0c565b14610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290614dd8565b60405180910390fd5b84600a8190555083600b8190555082600c8190555081600e81905550828486610c949190614df8565b610c9e9190614df8565b600d81905550806015819055506004601554610cba9190614cdb565b600d541115610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614e9a565b60405180910390fd5b600d54600e541115610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90614f06565b60405180910390fd5b7f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f45600d54601554600e54604051610d7e93929190614f26565b60405180910390a15050505050565b60606040518060400160405280600681526020017f5348494232200000000000000000000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eaa9190614611565b60405180910390a36001905092915050565b610ec4612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890614c5d565b60405180910390fd5b600a8210158015610f6457506101908411155b8015610f7d57506000841480610f7c5750600f548410155b5b8015610f8b5750610e108311155b610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614fa9565b60405180910390fd5b83601181905550826012819055508160138190555080601460006101000a81548160ff0219169083151502179055507fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce584848460405161102c93929190614f26565b60405180910390a150505050565b611042612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614c5d565b60405180910390fd5b610190606483600d546110e29190614d0c565b6110ec9190614cdb565b111561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490615015565b60405180910390fd5b6064821015611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906150a7565b60405180910390fd5b6000601154148061118457506011548211155b6111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90615139565b60405180910390fd5b62093a80811115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906151a5565b60405180910390fd5b81600f81905550806010819055507fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd882826040516112489291906151c5565b60405180910390a15050565b60008261126083612369565b11905092915050565b60006012600a6112799190615321565b633b9aca006112889190614d0c565b905090565b611295612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990614c5d565b60405180910390fd5b80826012600a6113329190615321565b633b9aca006113419190614d0c565b61134b9190614d0c565b6113559190614cdb565b6001819055507f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362460015460405161138c9190614611565b60405180910390a15050565b6113a0612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490614c5d565b60405180910390fd5b81601681905550806017819055507fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf8160648461146a9190614d0c565b6114749190614cdb565b6040516114819190614611565b60405180910390a15050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461163b5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ba919061536c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611646848484612cf5565b90509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061167f6000611bd9565b61168a61dead611bd9565b6116949190614df8565b6012600a6116a29190615321565b633b9aca006116b19190614d0c565b6116bb919061536c565b905090565b60006012905090565b600061175d338484600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117589190614df8565b613138565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611793612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611887906153ec565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e77738260405161192d919061484c565b60405180910390a25050565b6000611965827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610dca565b9050919050565b601b5481565b600043601a54141561199457600160155461198d919061536c565b9050611a12565b82156119d857816119b457600e54600d546119af9190614df8565b6119d1565b6064600f54600d546119c69190614d0c565b6119d09190614cdb565b5b9050611a12565b816119f257600e54600d546119ed919061536c565b611a0f565b6064600f54600d54611a049190614d0c565b611a0e9190614cdb565b5b90505b92915050565b611a20612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906153ec565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d82604051611bba919061484c565b60405180910390a25050565b601c60009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2a612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614c5d565b60405180910390fd5b600060086000611cc5611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060096000611d24611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060196000611d83611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060046000611de2611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e79613303565b565b60015481565b6000611e8b611e90565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025481565b60606040518060400160405280600581526020017f5348494232000000000000000000000000000000000000000000000000000000815250905090565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb89061547e565b60405180910390fd5b611fce3385858403613138565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061200a338484612cf5565b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61203e612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290614c5d565b60405180910390fd5b6000811180156120dd57506127108111155b61211c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612113906154ea565b60405180910390fd5b80826012600a61212c9190615321565b633b9aca0061213b9190614d0c565b6121459190614d0c565b61214f9190614cdb565b6002819055507fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca7886002546040516121869190614611565b60405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6121c4612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614c5d565b60405180910390fd5b6000821180156122615750600081115b6122a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122979061557c565b60405180910390fd5b82601c60006101000a81548160ff021916908315150217905550806012600a6122c99190615321565b633b9aca006122d89190614d0c565b6122e29190614cdb565b601e81905550816012600a6122f79190615321565b633b9aca006123069190614d0c565b6123109190614cdb565b601d819055507faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f9601e54601d54601c60009054906101000a900460ff1660405161235c9392919061559c565b60405180910390a1505050565b6000612373611673565b61239c7f0000000000000000000000000000000000000000000000000000000000000000611bd9565b836123a79190614d0c565b6123b19190614cdb565b9050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612447612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614c5d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156125705750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a690615645565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c978022960405160405180910390a250565b612705612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614c5d565b60405180910390fd5b6000600860006127a0611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600960006127ff611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006019600061285e611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460006128bd611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295581613456565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b612b1d612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba190614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c11906153ec565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d82604051612cb7919061484c565b60405180910390a25050565b601e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d70906156b1565b60405180910390fd5b60008211612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061571d565b60405180910390fd5b601f60009054906101000a900460ff1615612de357612ddc848484613618565b9050613131565b612ded8483613736565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e75575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612ed757600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ed657612ed583836137d3565b5b5b612edf61386c565b612fc457601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f845750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fba90615789565b60405180910390fd5b5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613013919061536c565b92505081905550600061302585613879565b8015613036575061303584613879565b5b613040578261304c565b61304b8585856138d0565b5b905061305784613eaf565b1561307057600083111561306f5761306e8361403d565b5b5b80600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130bf9190614df8565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131239190614611565b60405180910390a360019150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f9061581b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320f906158ad565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516132f69190614611565b60405180910390a3505050565b61330b612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61345e612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e290614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561355b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135529061593f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613669919061536c565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136bf9190614df8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137239190614611565b60405180910390a3600190509392505050565b600154811115806137905750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c6906159ab565b60405180910390fd5b5050565b600060025490508082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138269190614df8565b1115613867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385e90615a3d565b60405180910390fd5b505050565b600080601a541415905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080600090506000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561397e575042601054600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397c9190614df8565b115b9050601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139db57506000601154115b15613c81576000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a729190615adf565b5091509150600086601460009054906101000a900460ff16613a945782613a96565b835b6dffffffffffffffffffffffffffff16613ab09190614df8565b6103e888613abe9190614d0c565b613ac89190614cdb565b9050601254600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b179190614df8565b421115613ba85742600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bf79190614df8565b92505081905550601354600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c7d576015546064601154600d548a613c5c9190614d0c565b613c669190614d0c565b613c709190614cdb565b613c7a9190614cdb565b94505b5050505b6000821415613cfb57601554613ce3601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1683611972565b85613cee9190614d0c565b613cf89190614cdb565b91505b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d9357506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613ddd5742600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e2c9190614df8565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e909190614611565b60405180910390a38184613ea4919061536c565b925050509392505050565b6000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f555750600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613f6e5750601f60009054906101000a900460ff16155b8015613f865750601c60009054906101000a900460ff165b8015613fdb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156140285750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561403657506000600d54115b9050919050565b6001601f60006101000a81548160ff0219169083151502179055506000601d54821061406b57601d5461406d565b815b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156140f957600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000614109601654601754611254565b61411557600a54614118565b60005b905060006002600d54838561412d9190614d0c565b6141379190614cdb565b6141419190614cdb565b9050808361414f919061536c565b92506000600267ffffffffffffffff81111561416e5761416d615b32565b5b60405190808252806020026020018201604052801561419c5781602001602082028036833780820191505090505b50905030816000815181106141b4576141b3615b61565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427d9190615ba5565b8160018151811061429157614290615b61565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b815260040161432d959493929190615ccb565b600060405180830381600087803b15801561434757600080fd5b505af115801561435b573d6000803e3d6000fd5b50505050600047905060006002856143739190614cdb565b600d54614380919061536c565b9050600060028287856143939190614d0c565b61439d9190614cdb565b6143a79190614cdb565b9050600082600b54856143ba9190614d0c565b6143c49190614cdb565b9050600081836143d49190614df8565b856143df919061536c565b905060008711156144ef577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71984308a6000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b815260040161446f96959493929190615d25565b60606040518083038185885af115801561448d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144b29190615d9b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450683886040516144e69291906151c5565b60405180910390a15b6000821115614560577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561455e573d6000803e3d6000fd5b505b60008111156145d1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156145cf573d6000803e3d6000fd5b505b5050505050505050506000601f60006101000a81548160ff02191690831515021790555050565b6000819050919050565b61460b816145f8565b82525050565b60006020820190506146266000830184614602565b92915050565b600080fd5b61463a816145f8565b811461464557600080fd5b50565b60008135905061465781614631565b92915050565b600080600080600060a086880312156146795761467861462c565b5b600061468788828901614648565b955050602061469888828901614648565b94505060406146a988828901614648565b93505060606146ba88828901614648565b92505060806146cb88828901614648565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156147125780820151818401526020810190506146f7565b83811115614721576000848401525b50505050565b6000601f19601f8301169050919050565b6000614743826146d8565b61474d81856146e3565b935061475d8185602086016146f4565b61476681614727565b840191505092915050565b6000602082019050818103600083015261478b8184614738565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147be82614793565b9050919050565b6147ce816147b3565b81146147d957600080fd5b50565b6000813590506147eb816147c5565b92915050565b600080604083850312156148085761480761462c565b5b6000614816858286016147dc565b925050602061482785828601614648565b9150509250929050565b60008115159050919050565b61484681614831565b82525050565b6000602082019050614861600083018461483d565b92915050565b61487081614831565b811461487b57600080fd5b50565b60008135905061488d81614867565b92915050565b600080600080608085870312156148ad576148ac61462c565b5b60006148bb87828801614648565b94505060206148cc87828801614648565b93505060406148dd87828801614648565b92505060606148ee8782880161487e565b91505092959194509250565b600080604083850312156149115761491061462c565b5b600061491f85828601614648565b925050602061493085828601614648565b9150509250929050565b6000806000606084860312156149535761495261462c565b5b6000614961868287016147dc565b9350506020614972868287016147dc565b925050604061498386828701614648565b9150509250925092565b614996816147b3565b82525050565b60006020820190506149b1600083018461498d565b92915050565b600060ff82169050919050565b6149cd816149b7565b82525050565b60006020820190506149e860008301846149c4565b92915050565b60006149f982614793565b9050919050565b614a09816149ee565b82525050565b6000602082019050614a246000830184614a00565b92915050565b60008060408385031215614a4157614a4061462c565b5b6000614a4f858286016147dc565b9250506020614a608582860161487e565b9150509250929050565b600060208284031215614a8057614a7f61462c565b5b6000614a8e848285016147dc565b91505092915050565b60008060408385031215614aae57614aad61462c565b5b6000614abc8582860161487e565b9250506020614acd8582860161487e565b9150509250929050565b600080600060608486031215614af057614aef61462c565b5b6000614afe8682870161487e565b9350506020614b0f86828701614648565b9250506040614b2086828701614648565b9150509250925092565b600060208284031215614b4057614b3f61462c565b5b6000614b4e84828501614648565b91505092915050565b60008060408385031215614b6e57614b6d61462c565b5b6000614b7c858286016147dc565b9250506020614b8d858286016147dc565b9150509250929050565b6000819050919050565b6000614bbc614bb7614bb284614793565b614b97565b614793565b9050919050565b6000614bce82614ba1565b9050919050565b6000614be082614bc3565b9050919050565b614bf081614bd5565b82525050565b6000602082019050614c0b6000830184614be7565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c476020836146e3565b9150614c5282614c11565b602082019050919050565b60006020820190508181036000830152614c7681614c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ce6826145f8565b9150614cf1836145f8565b925082614d0157614d00614c7d565b5b828204905092915050565b6000614d17826145f8565b9150614d22836145f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d5b57614d5a614cac565b5b828202905092915050565b7f4c697175696469747920666565206d75737420626520616e206576656e206e7560008201527f6d6265722064756520746f20726f756e64696e67000000000000000000000000602082015250565b6000614dc26034836146e3565b9150614dcd82614d66565b604082019050919050565b60006020820190508181036000830152614df181614db5565b9050919050565b6000614e03826145f8565b9150614e0e836145f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4357614e42614cac565b5b828201905092915050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614e84600d836146e3565b9150614e8f82614e4e565b602082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f496e636f72726563742073656c6c206269617300000000000000000000000000600082015250565b6000614ef06013836146e3565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b6000606082019050614f3b6000830186614602565b614f486020830185614602565b614f556040830184614602565b949350505050565b7f506172616d6574657273206f7574206f6620626f756e64730000000000000000600082015250565b6000614f936018836146e3565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f53656c6c2074617820746f6f2068696768000000000000000000000000000000600082015250565b6000614fff6011836146e3565b915061500a82614fc9565b602082019050919050565b6000602082019050818103600083015261502e81614ff2565b9050919050565b7f43616e2774206d616b652073656c6c732063686561706572207769746820746860008201527f6973000000000000000000000000000000000000000000000000000000000000602082015250565b60006150916022836146e3565b915061509c82615035565b604082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f4869676820706572696f642074617820636c6173686573207769746820616e7460008201527f692d64756d702074617800000000000000000000000000000000000000000000602082015250565b6000615123602a836146e3565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f53656c6c20706572696f6420746f6f206c6f6e67000000000000000000000000600082015250565b600061518f6014836146e3565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b60006040820190506151da6000830185614602565b6151e76020830184614602565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156152455780860481111561522157615220614cac565b5b60018516156152305780820291505b808102905061523e856151ee565b9450615205565b94509492505050565b60008261525e576001905061531a565b8161526c576000905061531a565b8160018114615282576002811461528c576152bb565b600191505061531a565b60ff84111561529e5761529d614cac565b5b8360020a9150848211156152b5576152b4614cac565b5b5061531a565b5060208310610133831016604e8410600b84101617156152f05782820a9050838111156152eb576152ea614cac565b5b61531a565b6152fd84848460016151fb565b9250905081840481111561531457615313614cac565b5b81810290505b9392505050565b600061532c826145f8565b9150615337836149b7565b92506153647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461524e565b905092915050565b6000615377826145f8565b9150615382836145f8565b92508282101561539557615394614cac565b5b828203905092915050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006153d6600f836146e3565b91506153e1826153a0565b602082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f2061646472657373283029000000000000000000000000000000000000000000602082015250565b6000615468602b836146e3565b91506154738261540c565b604082019050919050565b600060208201905081810360008301526154978161545b565b9050919050565b7f44697669736f72206d7573742062652067726561746572207468616e20300000600082015250565b60006154d4601e836146e3565b91506154df8261549e565b602082019050919050565b60006020820190508181036000830152615503816154c7565b9050919050565b7f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b60006155666023836146e3565b91506155718261550a565b604082019050919050565b6000602082019050818103600083015261559581615559565b9050919050565b60006060820190506155b16000830186614602565b6155be6020830185614602565b6155cb604083018461483d565b949350505050565b7f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60008201527f2074686973206d616e6e65722e00000000000000000000000000000000000000602082015250565b600061562f602d836146e3565b915061563a826155d3565b604082019050919050565b6000602082019050818103600083015261565e81615622565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061569b6014836146e3565b91506156a682615665565b602082019050919050565b600060208201905081810360008301526156ca8161568e565b9050919050565b7f6164647265737328302920616d6f756e74207472616e73666572726564000000600082015250565b6000615707601d836146e3565b9150615712826156d1565b602082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000600082015250565b6000615773601a836146e3565b915061577e8261573d565b602082019050919050565b600060208201905081810360008301526157a281615766565b9050919050565b7f45524332303a20617070726f76652066726f6d2074686520616464726573732860008201527f3029206164647265737300000000000000000000000000000000000000000000602082015250565b6000615805602a836146e3565b9150615810826157a9565b604082019050919050565b60006020820190508181036000830152615834816157f8565b9050919050565b7f45524332303a20617070726f766520746f20746865206164647265737328302960008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006158976028836146e3565b91506158a28261583b565b604082019050919050565b600060208201905081810360008301526158c68161588a565b9050919050565b7f4f776e61626c653a206e6577206f776e6572206973207468652061646472657360008201527f7328302920616464726573730000000000000000000000000000000000000000602082015250565b6000615929602c836146e3565b9150615934826158cd565b604082019050919050565b600060208201905081810360008301526159588161591c565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006159956011836146e3565b91506159a08261595f565b602082019050919050565b600060208201905081810360008301526159c481615988565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000615a276025836146e3565b9150615a32826159cb565b604082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b615a8081615a5d565b8114615a8b57600080fd5b50565b600081519050615a9d81615a77565b92915050565b600063ffffffff82169050919050565b615abc81615aa3565b8114615ac757600080fd5b50565b600081519050615ad981615ab3565b92915050565b600080600060608486031215615af857615af761462c565b5b6000615b0686828701615a8e565b9350506020615b1786828701615a8e565b9250506040615b2886828701615aca565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615b9f816147c5565b92915050565b600060208284031215615bbb57615bba61462c565b5b6000615bc984828501615b90565b91505092915050565b6000819050919050565b6000615bf7615bf2615bed84615bd2565b614b97565b6145f8565b9050919050565b615c0781615bdc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c42816147b3565b82525050565b6000615c548383615c39565b60208301905092915050565b6000602082019050919050565b6000615c7882615c0d565b615c828185615c18565b9350615c8d83615c29565b8060005b83811015615cbe578151615ca58882615c48565b9750615cb083615c60565b925050600181019050615c91565b5085935050505092915050565b600060a082019050615ce06000830188614602565b615ced6020830187615bfe565b8181036040830152615cff8186615c6d565b9050615d0e606083018561498d565b615d1b6080830184614602565b9695505050505050565b600060c082019050615d3a600083018961498d565b615d476020830188614602565b615d546040830187615bfe565b615d616060830186615bfe565b615d6e608083018561498d565b615d7b60a0830184614602565b979650505050505050565b600081519050615d9581614631565b92915050565b600080600060608486031215615db457615db361462c565b5b6000615dc286828701615d86565b9350506020615dd386828701615d86565b9250506040615de486828701615d86565b915050925092509256fea2646970667358221220c69ae19762b3c9ead555dbc6cde08144921730b45bac051e0f91fd968e83294b64736f6c634300080b00330000000000000000000000006bc23f03ffde6fcc44ceddfe381b9018f072d31b000000000000000000000000f1c80d602983293ae922803b8b27a9ee12acd88c0000000000000000000000002ff0cf74917783618f05d8964ed781fa352862e4

Deployed Bytecode

0x6080604052600436106102765760003560e01c80636ddd17131161014f578063abb8d5e9116100c1578063dd62ed3e1161007a578063dd62ed3e14610989578063e624c4bc146109c6578063f2fde38b146109ef578063f84ba65d14610a18578063f8821a6214610a41578063f887ea4014610a6c5761027d565b8063abb8d5e914610879578063abe57e70146108a4578063b2bdfa7b146108cd578063bf56b371146108f8578063d088935814610923578063d51ed1c81461094c5761027d565b80638da5cb5b116101135780638da5cb5b146107535780638f9a55c01461077e57806395d89b41146107a9578063a457c2d7146107d4578063a8aa1b3114610811578063a9059cbb1461083c5761027d565b80636ddd17131461067e57806370a08231146106a9578063715018a6146106e65780637d1db4a5146106fd578063893d20e8146107285761027d565b806323b872dd116101e85780634707e24e116101ac5780634707e24e1461055c578063492a937b14610587578063571ac8b0146105b05780635804f1e4146105ed5780636419b6f914610618578063658d4b7f146106555761027d565b806323b872dd14610461578063264d26dd1461049e5780632b112e49146104c9578063313ce567146104f4578063395093511461051f5761027d565b80630e049c541161023a5780630e049c54146103555780630f4f7bfe1461037e5780631161ae39146103a757806318160ddd146103e45780631faf723b1461040f578063201e7991146104385761027d565b806301339c21146102825780630445b6671461029957806304a66b48146102c457806306fdde03146102ed578063095ea7b3146103185761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b005b3480156102a557600080fd5b506102ae610b77565b6040516102bb9190614611565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e6919061465d565b610b7d565b005b3480156102f957600080fd5b50610302610d8d565b60405161030f9190614771565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906147f1565b610dca565b60405161034c919061484c565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614893565b610ebc565b005b34801561038a57600080fd5b506103a560048036038101906103a091906148fa565b61103a565b005b3480156103b357600080fd5b506103ce60048036038101906103c991906148fa565b611254565b6040516103db919061484c565b60405180910390f35b3480156103f057600080fd5b506103f9611269565b6040516104069190614611565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906148fa565b61128d565b005b34801561044457600080fd5b5061045f600480360381019061045a91906148fa565b611398565b005b34801561046d57600080fd5b506104886004803603810190610483919061493a565b61148d565b604051610495919061484c565b60405180910390f35b3480156104aa57600080fd5b506104b361164f565b6040516104c0919061499c565b60405180910390f35b3480156104d557600080fd5b506104de611673565b6040516104eb9190614611565b60405180910390f35b34801561050057600080fd5b506105096116c0565b60405161051691906149d3565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906147f1565b6116c9565b604051610553919061484c565b60405180910390f35b34801561056857600080fd5b50610571611767565b60405161057e9190614a0f565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a99190614a2a565b61178b565b005b3480156105bc57600080fd5b506105d760048036038101906105d29190614a6a565b611939565b6040516105e4919061484c565b60405180910390f35b3480156105f957600080fd5b5061060261196c565b60405161060f9190614611565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614a97565b611972565b60405161064c9190614611565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614a2a565b611a18565b005b34801561068a57600080fd5b50610693611bc6565b6040516106a0919061484c565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190614a6a565b611bd9565b6040516106dd9190614611565b60405180910390f35b3480156106f257600080fd5b506106fb611c22565b005b34801561070957600080fd5b50610712611e7b565b60405161071f9190614611565b60405180910390f35b34801561073457600080fd5b5061073d611e81565b60405161074a919061499c565b60405180910390f35b34801561075f57600080fd5b50610768611e90565b604051610775919061499c565b60405180910390f35b34801561078a57600080fd5b50610793611eb9565b6040516107a09190614611565b60405180910390f35b3480156107b557600080fd5b506107be611ebf565b6040516107cb9190614771565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f691906147f1565b611efc565b604051610808919061484c565b60405180910390f35b34801561081d57600080fd5b50610826611fd9565b604051610833919061499c565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e91906147f1565b611ffd565b604051610870919061484c565b60405180910390f35b34801561088557600080fd5b5061088e612012565b60405161089b9190614a0f565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c691906148fa565b612036565b005b3480156108d957600080fd5b506108e2612192565b6040516108ef919061499c565b60405180910390f35b34801561090457600080fd5b5061090d6121b6565b60405161091a9190614611565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614ad7565b6121bc565b005b34801561095857600080fd5b50610973600480360381019061096e9190614b2a565b612369565b6040516109809190614611565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190614b57565b6123b8565b6040516109bd9190614611565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614a6a565b61243f565b005b3480156109fb57600080fd5b50610a166004803603810190610a119190614a6a565b6126fd565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a9190614a2a565b612b15565b005b348015610a4d57600080fd5b50610a56612cc3565b604051610a639190614611565b60405180910390f35b348015610a7857600080fd5b50610a81612cc9565b604051610a8e9190614bf6565b60405180910390f35b610a9f612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390614c5d565b60405180910390fd5b6000601a5414610b3b57600080fd5b43601a8190555042601b819055507fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641560405160405180910390a1565b601d5481565b610b85612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990614c5d565b60405180910390fd5b8460028087610c219190614cdb565b610c2b9190614d0c565b14610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290614dd8565b60405180910390fd5b84600a8190555083600b8190555082600c8190555081600e81905550828486610c949190614df8565b610c9e9190614df8565b600d81905550806015819055506004601554610cba9190614cdb565b600d541115610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614e9a565b60405180910390fd5b600d54600e541115610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90614f06565b60405180910390fd5b7f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f45600d54601554600e54604051610d7e93929190614f26565b60405180910390a15050505050565b60606040518060400160405280600681526020017f5348494232200000000000000000000000000000000000000000000000000000815250905090565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eaa9190614611565b60405180910390a36001905092915050565b610ec4612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890614c5d565b60405180910390fd5b600a8210158015610f6457506101908411155b8015610f7d57506000841480610f7c5750600f548410155b5b8015610f8b5750610e108311155b610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190614fa9565b60405180910390fd5b83601181905550826012819055508160138190555080601460006101000a81548160ff0219169083151502179055507fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce584848460405161102c93929190614f26565b60405180910390a150505050565b611042612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614c5d565b60405180910390fd5b610190606483600d546110e29190614d0c565b6110ec9190614cdb565b111561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490615015565b60405180910390fd5b6064821015611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906150a7565b60405180910390fd5b6000601154148061118457506011548211155b6111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90615139565b60405180910390fd5b62093a80811115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906151a5565b60405180910390fd5b81600f81905550806010819055507fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd882826040516112489291906151c5565b60405180910390a15050565b60008261126083612369565b11905092915050565b60006012600a6112799190615321565b633b9aca006112889190614d0c565b905090565b611295612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990614c5d565b60405180910390fd5b80826012600a6113329190615321565b633b9aca006113419190614d0c565b61134b9190614d0c565b6113559190614cdb565b6001819055507f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362460015460405161138c9190614611565b60405180910390a15050565b6113a0612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490614c5d565b60405180910390fd5b81601681905550806017819055507fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf8160648461146a9190614d0c565b6114749190614cdb565b6040516114819190614611565b60405180910390a15050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461163b5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115ba919061536c565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611646848484612cf5565b90509392505050565b7f0000000000000000000000006bc23f03ffde6fcc44ceddfe381b9018f072d31b81565b600061167f6000611bd9565b61168a61dead611bd9565b6116949190614df8565b6012600a6116a29190615321565b633b9aca006116b19190614d0c565b6116bb919061536c565b905090565b60006012905090565b600061175d338484600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117589190614df8565b613138565b6001905092915050565b7f0000000000000000000000002ff0cf74917783618f05d8964ed781fa352862e481565b611793612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611887906153ec565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e77738260405161192d919061484c565b60405180910390a25050565b6000611965827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610dca565b9050919050565b601b5481565b600043601a54141561199457600160155461198d919061536c565b9050611a12565b82156119d857816119b457600e54600d546119af9190614df8565b6119d1565b6064600f54600d546119c69190614d0c565b6119d09190614cdb565b5b9050611a12565b816119f257600e54600d546119ed919061536c565b611a0f565b6064600f54600d54611a049190614d0c565b611a0e9190614cdb565b5b90505b92915050565b611a20612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906153ec565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d82604051611bba919061484c565b60405180910390a25050565b601c60009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c2a612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90614c5d565b60405180910390fd5b600060086000611cc5611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060096000611d24611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060196000611d83611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060046000611de2611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e79613303565b565b60015481565b6000611e8b611e90565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025481565b60606040518060400160405280600581526020017f5348494232000000000000000000000000000000000000000000000000000000815250905090565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb89061547e565b60405180910390fd5b611fce3385858403613138565b600191505092915050565b7f00000000000000000000000022479662bd1561b45da6f27331d9b154ef7d15b581565b600061200a338484612cf5565b905092915050565b7f000000000000000000000000f1c80d602983293ae922803b8b27a9ee12acd88c81565b61203e612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290614c5d565b60405180910390fd5b6000811180156120dd57506127108111155b61211c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612113906154ea565b60405180910390fd5b80826012600a61212c9190615321565b633b9aca0061213b9190614d0c565b6121459190614d0c565b61214f9190614cdb565b6002819055507fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca7886002546040516121869190614611565b60405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6121c4612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890614c5d565b60405180910390fd5b6000821180156122615750600081115b6122a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122979061557c565b60405180910390fd5b82601c60006101000a81548160ff021916908315150217905550806012600a6122c99190615321565b633b9aca006122d89190614d0c565b6122e29190614cdb565b601e81905550816012600a6122f79190615321565b633b9aca006123069190614d0c565b6123109190614cdb565b601d819055507faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f9601e54601d54601c60009054906101000a900460ff1660405161235c9392919061559c565b60405180910390a1505050565b6000612373611673565b61239c7f00000000000000000000000022479662bd1561b45da6f27331d9b154ef7d15b5611bd9565b836123a79190614d0c565b6123b19190614cdb565b9050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612447612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614c5d565b60405180910390fd5b7f00000000000000000000000022479662bd1561b45da6f27331d9b154ef7d15b573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156125705750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a690615645565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c978022960405160405180910390a250565b612705612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614c5d565b60405180910390fd5b6000600860006127a0611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600960006127ff611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006019600061285e611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460006128bd611e90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061295581613456565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b612b1d612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba190614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c11906153ec565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d82604051612cb7919061484c565b60405180910390a25050565b601e5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600033905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d70906156b1565b60405180910390fd5b60008211612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db39061571d565b60405180910390fd5b601f60009054906101000a900460ff1615612de357612ddc848484613618565b9050613131565b612ded8483613736565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e75575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612ed757600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ed657612ed583836137d3565b5b5b612edf61386c565b612fc457601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f845750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fba90615789565b60405180910390fd5b5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613013919061536c565b92505081905550600061302585613879565b8015613036575061303584613879565b5b613040578261304c565b61304b8585856138d0565b5b905061305784613eaf565b1561307057600083111561306f5761306e8361403d565b5b5b80600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130bf9190614df8565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131239190614611565b60405180910390a360019150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319f9061581b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320f906158ad565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516132f69190614611565b60405180910390a3505050565b61330b612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61345e612ced565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e290614c5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561355b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135529061593f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613669919061536c565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136bf9190614df8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137239190614611565b60405180910390a3600190509392505050565b600154811115806137905750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c6906159ab565b60405180910390fd5b5050565b600060025490508082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138269190614df8565b1115613867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385e90615a3d565b60405180910390fd5b505050565b600080601a541415905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080600090506000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561397e575042601054600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397c9190614df8565b115b9050601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139db57506000601154115b15613c81576000807f00000000000000000000000022479662bd1561b45da6f27331d9b154ef7d15b573ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a729190615adf565b5091509150600086601460009054906101000a900460ff16613a945782613a96565b835b6dffffffffffffffffffffffffffff16613ab09190614df8565b6103e888613abe9190614d0c565b613ac89190614cdb565b9050601254600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b179190614df8565b421115613ba85742600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bf79190614df8565b92505081905550601354600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613c7d576015546064601154600d548a613c5c9190614d0c565b613c669190614d0c565b613c709190614cdb565b613c7a9190614cdb565b94505b5050505b6000821415613cfb57601554613ce3601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1683611972565b85613cee9190614d0c565b613cf89190614cdb565b91505b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d9357506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613ddd5742600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e2c9190614df8565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e909190614611565b60405180910390a38184613ea4919061536c565b925050509392505050565b6000601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f555750600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613f6e5750601f60009054906101000a900460ff16155b8015613f865750601c60009054906101000a900460ff165b8015613fdb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156140285750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561403657506000600d54115b9050919050565b6001601f60006101000a81548160ff0219169083151502179055506000601d54821061406b57601d5461406d565b815b905080600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156140f957600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000614109601654601754611254565b61411557600a54614118565b60005b905060006002600d54838561412d9190614d0c565b6141379190614cdb565b6141419190614cdb565b9050808361414f919061536c565b92506000600267ffffffffffffffff81111561416e5761416d615b32565b5b60405190808252806020026020018201604052801561419c5781602001602082028036833780820191505090505b50905030816000815181106141b4576141b3615b61565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427d9190615ba5565b8160018151811061429157614290615b61565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b815260040161432d959493929190615ccb565b600060405180830381600087803b15801561434757600080fd5b505af115801561435b573d6000803e3d6000fd5b50505050600047905060006002856143739190614cdb565b600d54614380919061536c565b9050600060028287856143939190614d0c565b61439d9190614cdb565b6143a79190614cdb565b9050600082600b54856143ba9190614d0c565b6143c49190614cdb565b9050600081836143d49190614df8565b856143df919061536c565b905060008711156144ef577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71984308a6000807f0000000000000000000000006bc23f03ffde6fcc44ceddfe381b9018f072d31b426040518863ffffffff1660e01b815260040161446f96959493929190615d25565b60606040518083038185885af115801561448d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144b29190615d9b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450683886040516144e69291906151c5565b60405180910390a15b6000821115614560577f000000000000000000000000f1c80d602983293ae922803b8b27a9ee12acd88c73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561455e573d6000803e3d6000fd5b505b60008111156145d1577f0000000000000000000000002ff0cf74917783618f05d8964ed781fa352862e473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156145cf573d6000803e3d6000fd5b505b5050505050505050506000601f60006101000a81548160ff02191690831515021790555050565b6000819050919050565b61460b816145f8565b82525050565b60006020820190506146266000830184614602565b92915050565b600080fd5b61463a816145f8565b811461464557600080fd5b50565b60008135905061465781614631565b92915050565b600080600080600060a086880312156146795761467861462c565b5b600061468788828901614648565b955050602061469888828901614648565b94505060406146a988828901614648565b93505060606146ba88828901614648565b92505060806146cb88828901614648565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156147125780820151818401526020810190506146f7565b83811115614721576000848401525b50505050565b6000601f19601f8301169050919050565b6000614743826146d8565b61474d81856146e3565b935061475d8185602086016146f4565b61476681614727565b840191505092915050565b6000602082019050818103600083015261478b8184614738565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147be82614793565b9050919050565b6147ce816147b3565b81146147d957600080fd5b50565b6000813590506147eb816147c5565b92915050565b600080604083850312156148085761480761462c565b5b6000614816858286016147dc565b925050602061482785828601614648565b9150509250929050565b60008115159050919050565b61484681614831565b82525050565b6000602082019050614861600083018461483d565b92915050565b61487081614831565b811461487b57600080fd5b50565b60008135905061488d81614867565b92915050565b600080600080608085870312156148ad576148ac61462c565b5b60006148bb87828801614648565b94505060206148cc87828801614648565b93505060406148dd87828801614648565b92505060606148ee8782880161487e565b91505092959194509250565b600080604083850312156149115761491061462c565b5b600061491f85828601614648565b925050602061493085828601614648565b9150509250929050565b6000806000606084860312156149535761495261462c565b5b6000614961868287016147dc565b9350506020614972868287016147dc565b925050604061498386828701614648565b9150509250925092565b614996816147b3565b82525050565b60006020820190506149b1600083018461498d565b92915050565b600060ff82169050919050565b6149cd816149b7565b82525050565b60006020820190506149e860008301846149c4565b92915050565b60006149f982614793565b9050919050565b614a09816149ee565b82525050565b6000602082019050614a246000830184614a00565b92915050565b60008060408385031215614a4157614a4061462c565b5b6000614a4f858286016147dc565b9250506020614a608582860161487e565b9150509250929050565b600060208284031215614a8057614a7f61462c565b5b6000614a8e848285016147dc565b91505092915050565b60008060408385031215614aae57614aad61462c565b5b6000614abc8582860161487e565b9250506020614acd8582860161487e565b9150509250929050565b600080600060608486031215614af057614aef61462c565b5b6000614afe8682870161487e565b9350506020614b0f86828701614648565b9250506040614b2086828701614648565b9150509250925092565b600060208284031215614b4057614b3f61462c565b5b6000614b4e84828501614648565b91505092915050565b60008060408385031215614b6e57614b6d61462c565b5b6000614b7c858286016147dc565b9250506020614b8d858286016147dc565b9150509250929050565b6000819050919050565b6000614bbc614bb7614bb284614793565b614b97565b614793565b9050919050565b6000614bce82614ba1565b9050919050565b6000614be082614bc3565b9050919050565b614bf081614bd5565b82525050565b6000602082019050614c0b6000830184614be7565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c476020836146e3565b9150614c5282614c11565b602082019050919050565b60006020820190508181036000830152614c7681614c3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ce6826145f8565b9150614cf1836145f8565b925082614d0157614d00614c7d565b5b828204905092915050565b6000614d17826145f8565b9150614d22836145f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d5b57614d5a614cac565b5b828202905092915050565b7f4c697175696469747920666565206d75737420626520616e206576656e206e7560008201527f6d6265722064756520746f20726f756e64696e67000000000000000000000000602082015250565b6000614dc26034836146e3565b9150614dcd82614d66565b604082019050919050565b60006020820190508181036000830152614df181614db5565b9050919050565b6000614e03826145f8565b9150614e0e836145f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4357614e42614cac565b5b828201905092915050565b7f4665657320746f6f206869676800000000000000000000000000000000000000600082015250565b6000614e84600d836146e3565b9150614e8f82614e4e565b602082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f496e636f72726563742073656c6c206269617300000000000000000000000000600082015250565b6000614ef06013836146e3565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b6000606082019050614f3b6000830186614602565b614f486020830185614602565b614f556040830184614602565b949350505050565b7f506172616d6574657273206f7574206f6620626f756e64730000000000000000600082015250565b6000614f936018836146e3565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f53656c6c2074617820746f6f2068696768000000000000000000000000000000600082015250565b6000614fff6011836146e3565b915061500a82614fc9565b602082019050919050565b6000602082019050818103600083015261502e81614ff2565b9050919050565b7f43616e2774206d616b652073656c6c732063686561706572207769746820746860008201527f6973000000000000000000000000000000000000000000000000000000000000602082015250565b60006150916022836146e3565b915061509c82615035565b604082019050919050565b600060208201905081810360008301526150c081615084565b9050919050565b7f4869676820706572696f642074617820636c6173686573207769746820616e7460008201527f692d64756d702074617800000000000000000000000000000000000000000000602082015250565b6000615123602a836146e3565b915061512e826150c7565b604082019050919050565b6000602082019050818103600083015261515281615116565b9050919050565b7f53656c6c20706572696f6420746f6f206c6f6e67000000000000000000000000600082015250565b600061518f6014836146e3565b915061519a82615159565b602082019050919050565b600060208201905081810360008301526151be81615182565b9050919050565b60006040820190506151da6000830185614602565b6151e76020830184614602565b9392505050565b60008160011c9050919050565b6000808291508390505b60018511156152455780860481111561522157615220614cac565b5b60018516156152305780820291505b808102905061523e856151ee565b9450615205565b94509492505050565b60008261525e576001905061531a565b8161526c576000905061531a565b8160018114615282576002811461528c576152bb565b600191505061531a565b60ff84111561529e5761529d614cac565b5b8360020a9150848211156152b5576152b4614cac565b5b5061531a565b5060208310610133831016604e8410600b84101617156152f05782820a9050838111156152eb576152ea614cac565b5b61531a565b6152fd84848460016151fb565b9250905081840481111561531457615313614cac565b5b81810290505b9392505050565b600061532c826145f8565b9150615337836149b7565b92506153647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461524e565b905092915050565b6000615377826145f8565b9150615382836145f8565b92508282101561539557615394614cac565b5b828203905092915050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006153d6600f836146e3565b91506153e1826153a0565b602082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f2061646472657373283029000000000000000000000000000000000000000000602082015250565b6000615468602b836146e3565b91506154738261540c565b604082019050919050565b600060208201905081810360008301526154978161545b565b9050919050565b7f44697669736f72206d7573742062652067726561746572207468616e20300000600082015250565b60006154d4601e836146e3565b91506154df8261549e565b602082019050919050565b60006020820190508181036000830152615503816154c7565b9050919050565b7f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b60006155666023836146e3565b91506155718261550a565b604082019050919050565b6000602082019050818103600083015261559581615559565b9050919050565b60006060820190506155b16000830186614602565b6155be6020830185614602565b6155cb604083018461483d565b949350505050565b7f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60008201527f2074686973206d616e6e65722e00000000000000000000000000000000000000602082015250565b600061562f602d836146e3565b915061563a826155d3565b604082019050919050565b6000602082019050818103600083015261565e81615622565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061569b6014836146e3565b91506156a682615665565b602082019050919050565b600060208201905081810360008301526156ca8161568e565b9050919050565b7f6164647265737328302920616d6f756e74207472616e73666572726564000000600082015250565b6000615707601d836146e3565b9150615712826156d1565b602082019050919050565b60006020820190508181036000830152615736816156fa565b9050919050565b7f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000600082015250565b6000615773601a836146e3565b915061577e8261573d565b602082019050919050565b600060208201905081810360008301526157a281615766565b9050919050565b7f45524332303a20617070726f76652066726f6d2074686520616464726573732860008201527f3029206164647265737300000000000000000000000000000000000000000000602082015250565b6000615805602a836146e3565b9150615810826157a9565b604082019050919050565b60006020820190508181036000830152615834816157f8565b9050919050565b7f45524332303a20617070726f766520746f20746865206164647265737328302960008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006158976028836146e3565b91506158a28261583b565b604082019050919050565b600060208201905081810360008301526158c68161588a565b9050919050565b7f4f776e61626c653a206e6577206f776e6572206973207468652061646472657360008201527f7328302920616464726573730000000000000000000000000000000000000000602082015250565b6000615929602c836146e3565b9150615934826158cd565b604082019050919050565b600060208201905081810360008301526159588161591c565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006159956011836146e3565b91506159a08261595f565b602082019050919050565b600060208201905081810360008301526159c481615988565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000615a276025836146e3565b9150615a32826159cb565b604082019050919050565b60006020820190508181036000830152615a5681615a1a565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b615a8081615a5d565b8114615a8b57600080fd5b50565b600081519050615a9d81615a77565b92915050565b600063ffffffff82169050919050565b615abc81615aa3565b8114615ac757600080fd5b50565b600081519050615ad981615ab3565b92915050565b600080600060608486031215615af857615af761462c565b5b6000615b0686828701615a8e565b9350506020615b1786828701615a8e565b9250506040615b2886828701615aca565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615b9f816147c5565b92915050565b600060208284031215615bbb57615bba61462c565b5b6000615bc984828501615b90565b91505092915050565b6000819050919050565b6000615bf7615bf2615bed84615bd2565b614b97565b6145f8565b9050919050565b615c0781615bdc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c42816147b3565b82525050565b6000615c548383615c39565b60208301905092915050565b6000602082019050919050565b6000615c7882615c0d565b615c828185615c18565b9350615c8d83615c29565b8060005b83811015615cbe578151615ca58882615c48565b9750615cb083615c60565b925050600181019050615c91565b5085935050505092915050565b600060a082019050615ce06000830188614602565b615ced6020830187615bfe565b8181036040830152615cff8186615c6d565b9050615d0e606083018561498d565b615d1b6080830184614602565b9695505050505050565b600060c082019050615d3a600083018961498d565b615d476020830188614602565b615d546040830187615bfe565b615d616060830186615bfe565b615d6e608083018561498d565b615d7b60a0830184614602565b979650505050505050565b600081519050615d9581614631565b92915050565b600080600060608486031215615db457615db361462c565b5b6000615dc286828701615d86565b9350506020615dd386828701615d86565b9250506040615de486828701615d86565b915050925092509256fea2646970667358221220c69ae19762b3c9ead555dbc6cde08144921730b45bac051e0f91fd968e83294b64736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006bc23f03ffde6fcc44ceddfe381b9018f072d31b000000000000000000000000f1c80d602983293ae922803b8b27a9ee12acd88c0000000000000000000000002ff0cf74917783618f05d8964ed781fa352862e4

-----Decoded View---------------
Arg [0] : _lp (address): 0x6bC23F03FfdE6FcC44CEdDFe381B9018F072d31b
Arg [1] : _giveaway (address): 0xf1C80d602983293AE922803b8b27A9ee12acd88C
Arg [2] : _devmarketing (address): 0x2ff0cf74917783618F05D8964ed781Fa352862E4

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bc23f03ffde6fcc44ceddfe381b9018f072d31b
Arg [1] : 000000000000000000000000f1c80d602983293ae922803b8b27a9ee12acd88c
Arg [2] : 0000000000000000000000002ff0cf74917783618f05d8964ed781fa352862e4


Deployed Bytecode Sourcemap

12925:17932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27239:191;;;;;;;;;;;;;:::i;:::-;;14881:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28412:728;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16255:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16661:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26773:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26178:587;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24833:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16003:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27438:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29586:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18191:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14247:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24517:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16097:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16885:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14352:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17897:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14807:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20413:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27932:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14844:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16409:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25503:285;;;;;;;;;;;;;:::i;:::-;;13266:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16332:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11724:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13337:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16174:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17106:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14737:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18027:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14296:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27644:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11268:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14775:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29148:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24669:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16520:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25800:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24991:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28162:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14945:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14498:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27239:191;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27310:1:::1;27296:10;;:15;27287:25;;;::::0;::::1;;27336:12;27323:10;:25;;;;27374:15;27359:12;:30;;;;27405:17;;;;;;;;;;27239:191::o:0;14881:49::-;;;;:::o;28412:728::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28609:13:::1;28604:1;28599::::0;28583:13:::1;:17;;;;:::i;:::-;28582:23;;;;:::i;:::-;:40;28574:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;28705:13;28690:12;:28;;;;28743:12;28729:11;:26;;;;28784:16;28766:15;:34;;;;28822:9;28811:8;:20;;;;28884:16;28869:12;28853:13;:28;;;;:::i;:::-;:47;;;;:::i;:::-;28842:8;:58;;;;28928:15;28911:14;:32;;;;28991:1;28974:14;;:18;;;;:::i;:::-;28962:8;;:30;;28954:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29041:8;;29029;;:20;;29021:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;29089:43;29097:8;;29107:14;;29123:8;;29089:43;;;;;;;;:::i;:::-;;;;;;;;28412:728:::0;;;;;:::o;16255:71::-;16294:13;16318:5;;;;;;;;;;;;;;;;;16311:12;;16255:71;:::o;16661:216::-;16736:4;16788:6;16753:11;:23;16765:10;16753:23;;;;;;;;;;;;;;;:32;16777:7;16753:32;;;;;;;;;;;;;;;:41;;;;16831:7;16810:37;;16819:10;16810:37;;;16840:6;16810:37;;;;;;:::i;:::-;;;;;;;;16865:4;16858:11;;16661:216;;;;:::o;26773:458::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26916:2:::1;26902:10;:16;;:31;;;;;26930:3;26922:4;:11;;26902:31;:69;;;;;26946:1;26938:4;:9;:32;;;;26959:11;;26951:4;:19;;26938:32;26902:69;:91;;;;;26986:7;26975;:18;;26902:91;26894:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;27047:4;27033:11;:18;;;;27079:7;27062:14;:24;;;;27117:10;27097:17;:30;;;;27157:9;27138:16;;:28;;;;;;;;;;;;;;;;;;27182:41;27197:4;27203:7;27212:10;27182:41;;;;;;;;:::i;:::-;;;;;;;;26773:458:::0;;;;:::o;26178:587::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26329:3:::1;26322;26298:20;26287:8;;:31;;;;:::i;:::-;26286:39;;;;:::i;:::-;:46;;26278:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26397:3;26373:20;:27;;26365:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26473:1;26458:11;;:16;:55;;;;26502:11;;26478:20;:35;;26458:55;26450:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26590:6;26579:7;:17;;26571:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26646:20;26632:11;:34;;;;26690:7;26677:10;:20;;;;26713:44;26727:20;26749:7;26713:44;;;;;;;:::i;:::-;;;;;;;;26178:587:::0;;:::o;24833:150::-;24913:4;24969:6;24937:29;24957:8;24937:19;:29::i;:::-;:38;24930:45;;24833:150;;;;:::o;16003:88::-;16058:7;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;16069:19;;16003:88;:::o;27438:194::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27568:7:::1;27555:9;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;27540:24;;;;:::i;:::-;27539:36;;;;:::i;:::-;27524:12;:51;;;;27591:33;27611:12;;27591:33;;;;;;:::i;:::-;;;;;;;;27438:194:::0;;:::o;29586:246::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29701:7:::1;29683:15;:25;;;;29748:12;29719:26;:41;;;;29776:48;29811:12;29805:3;29795:7;:13;;;;:::i;:::-;:28;;;;:::i;:::-;29776:48;;;;;;:::i;:::-;;;;;;;;29586:246:::0;;:::o;18191:341::-;18291:4;18346:17;18311:11;:19;18323:6;18311:19;;;;;;;;;;;;;;;:31;18331:10;18311:31;;;;;;;;;;;;;;;;:52;18308:157;;18447:6;18413:11;:19;18425:6;18413:19;;;;;;;;;;;;;;;:31;18433:10;18413:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;18379:11;:19;18391:6;18379:19;;;;;;;;;;;;;;;:31;18399:10;18379:31;;;;;;;;;;;;;;;:74;;;;18308:157;18484:40;18498:6;18506:9;18517:6;18484:13;:40::i;:::-;18477:47;;18191:341;;;;;:::o;14247:42::-;;;:::o;24517:144::-;24570:7;24631:21;24649:1;24631:9;:21::i;:::-;24613:15;13022:42;24613:9;:15::i;:::-;:39;;;;:::i;:::-;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;24597:56;;;;:::i;:::-;24590:63;;24517:144;:::o;16097:71::-;16140:5;13179:2;16149:16;;16097:71;:::o;16885:213::-;16975:4;16992:76;17001:10;17013:7;17057:10;17022:11;:23;17034:10;17022:23;;;;;;;;;;;;;;;:32;17046:7;17022:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;16992:8;:76::i;:::-;17086:4;17079:11;;16885:213;;;;:::o;14352:53::-;;;:::o;29840:233::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29951:1:::1;29934:19;;:5;:19;;;;29926:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;30008:8;29984:14;:21;29999:5;29984:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30049:5;30032:33;;;30056:8;30032:33;;;;;;:::i;:::-;;;;;;;;29840:233:::0;;:::o;17897:122::-;17952:4;17976:35;17984:7;17993:17;17976:7;:35::i;:::-;17969:42;;17897:122;;;:::o;14807:27::-;;;;:::o;20413:345::-;20488:7;20525:12;20511:10;;:26;20508:60;;;20564:1;20547:14;;:18;;;;:::i;:::-;20540:25;;;;20508:60;20582:7;20578:87;;;20598:12;:67;;20657:8;;20646;;:19;;;;:::i;:::-;20598:67;;;20640:3;20625:11;;20614:8;;:22;;;;:::i;:::-;20613:30;;;;:::i;:::-;20598:67;20591:74;;;;20578:87;20683:12;:67;;20742:8;;20731;;:19;;;;:::i;:::-;20683:67;;;20725:3;20710:11;;20699:8;;:22;;;;:::i;:::-;20698:30;;;;:::i;:::-;20683:67;20676:74;;20413:345;;;;;:::o;27932:222::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28041:1:::1;28023:20;;:6;:20;;;;28015:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28096:6;28074:11;:19;28086:6;28074:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28131:6;28118:28;;;28139:6;28118:28;;;;;;:::i;:::-;;;;;;;;27932:222:::0;;:::o;14844:30::-;;;;;;;;;;;;;:::o;16409:105::-;16475:7;16493:9;:18;16503:7;16493:18;;;;;;;;;;;;;;;;16486:25;;16409:105;;;:::o;25503:285::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25600:5:::1;25577:11;:20;25589:7;:5;:7::i;:::-;25577:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25643:5;25616:15;:24;25632:7;:5;:7::i;:::-;25616:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25689:5;25659:18;:27;25678:7;:5;:7::i;:::-;25659:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25743:1;25705:11;:20;25717:7;:5;:7::i;:::-;25705:20;;;;;;;;;;;;;;;:35;14577:42;25705:35;;;;;;;;;;;;;;;:39;;;;25755:25;:23;:25::i;:::-;25503:285::o:0;13266:54::-;;;;:::o;16332:71::-;16375:7;16393;:5;:7::i;:::-;16386:14;;16332:71;:::o;11724:79::-;11762:7;11789:6;;;;;;;;;;;11782:13;;11724:79;:::o;13337:56::-;;;;:::o;16174:75::-;16215:13;16239:7;;;;;;;;;;;;;;;;;16232:14;;16174:75;:::o;17106:417::-;17201:4;17218:24;17245:11;:23;17257:10;17245:23;;;;;;;;;;;;;;;:32;17269:7;17245:32;;;;;;;;;;;;;;;;17218:59;;17316:15;17296:16;:35;;17288:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;17415:65;17424:10;17436:7;17464:15;17445:16;:34;17415:8;:65::i;:::-;17511:4;17504:11;;;17106:417;;;;:::o;14737:29::-;;;:::o;18027:156::-;18107:4;18131:44;18145:10;18157:9;18168:6;18131:13;:44::i;:::-;18124:51;;18027:156;;;;:::o;14296:49::-;;;:::o;27644:280::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:1:::1;27742:7;:11;:31;;;;;27768:5;27757:7;:16;;27742:31;27734:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27865:7;27852:9;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;27837:24;;;;:::i;:::-;27836:36;;;;:::i;:::-;27819:14;:53;;;;27888:28;27901:14;;27888:28;;;;;;:::i;:::-;;;;;;;;27644:280:::0;;:::o;11268:21::-;;;;;;;;;;;;:::o;14775:25::-;;;;:::o;29148:430::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29292:1:::1;29277:12;:16;:39;;;;;29315:1;29297:15;:19;29277:39;29269:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29381:8;29367:11;;:22;;;;;;;;;;;;;;;;;;29429:15;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;29414:30;;;;:::i;:::-;29400:11;:44;;;;29486:12;13179:2;13239;:15;;;;:::i;:::-;13222:13;:33;;;;:::i;:::-;29471:27;;;;:::i;:::-;29455:13;:43;;;;29514:56;29530:11;;29543:13;;29558:11;;;;;;;;;;;29514:56;;;;;;;;:::i;:::-;;;;;;;;29148:430:::0;;;:::o;24669:156::-;24737:7;24795:22;:20;:22::i;:::-;24776:15;24786:4;24776:9;:15::i;:::-;24765:8;:26;;;;:::i;:::-;24764:53;;;;:::i;:::-;24757:60;;24669:156;;;:::o;16520:133::-;16604:7;16622:11;:19;16634:6;16622:19;;;;;;;;;;;;;;;:28;16642:7;16622:28;;;;;;;;;;;;;;;;16615:35;;16520:133;;;;:::o;25800:370::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25900:4:::1;25887:17;;:9;:17;;;;:47;;;;;14577:42;25908:26;;:9;:26;;;;25887:47;25879:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;26020:4;25995:11;:22;26007:9;25995:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26067:4;26035:18;:29;26054:9;26035:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;26111:4;26082:15;:26;26098:9;26082:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26152:9;26131:31;;;;;;;;;;;;25800:370:::0;:::o;24991:504::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25104:5:::1;25081:11;:20;25093:7;:5;:7::i;:::-;25081:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25147:5;25120:15;:24;25136:7;:5;:7::i;:::-;25120:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25193:5;25163:18;:27;25182:7;:5;:7::i;:::-;25163:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25247:1;25209:11;:20;25221:7;:5;:7::i;:::-;25209:20;;;;;;;;;;;;;;;:35;14577:42;25209:35;;;;;;;;;;;;;;;:39;;;;25259:33;25283:8;25259:23;:33::i;:::-;25327:4;25303:11;:21;25315:8;25303:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25370:4;25342:15;:25;25358:8;25342:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25416:4;25385:18;:28;25404:8;25385:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25470:17;25431:11;:21;25443:8;25431:21;;;;;;;;;;;;;;;:36;14577:42;25431:36;;;;;;;;;;;;;;;:56;;;;24991:504:::0;:::o;28162:242::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28275:1:::1;28257:20;;:6;:20;;;;28249:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28334:6;28308:15;:23;28324:6;28308:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;28381:6;28356:40;;;28389:6;28356:40;;;;;;:::i;:::-;;;;;;;;28162:242:::0;;:::o;14945:49::-;;;;:::o;14498:34::-;;;:::o;6185:107::-;6230:15;6273:10;6258:26;;6185:107;:::o;18540:1055::-;18632:4;18678:6;18657:9;:17;18667:6;18657:17;;;;;;;;;;;;;;;;:27;;18649:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18737:1;18728:6;:10;18720:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18788:6;;;;;;;;;;;18785:63;;;18804:41;18819:6;18827:9;18838:6;18804:14;:41::i;:::-;18797:48;;;;18785:63;18860:28;18873:6;18881;18860:12;:28::i;:::-;18914:14;:25;18929:9;18914:25;;;;;;;;;;;;;;;;;;;;;;;;;18913:26;:47;;;;;13022:42;18943:17;;:9;:17;;;;18913:47;18909:148;;;18982:15;:26;18998:9;18982:26;;;;;;;;;;;;;;;;;;;;;;;;;18977:68;;19010:35;19027:9;19038:6;19010:16;:35::i;:::-;18977:68;18909:148;19073:10;:8;:10::i;:::-;19069:118;;19094:18;:26;19113:6;19094:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;19124:18;:29;19143:9;19124:29;;;;;;;;;;;;;;;;;;;;;;;;;19094:59;19086:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;19069:118;19220:6;19199:9;:17;19209:6;19199:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;19239:22;19264:21;19278:6;19264:13;:21::i;:::-;:49;;;;;19289:24;19303:9;19289:13;:24::i;:::-;19264:49;:95;;19353:6;19264:95;;;19316:34;19324:6;19332:9;19343:6;19316:7;:34::i;:::-;19264:95;19239:120;;19383:25;19398:9;19383:14;:25::i;:::-;19380:66;;;19424:1;19415:6;:10;19411:32;;;19427:16;19436:6;19427:8;:16::i;:::-;19411:32;19380:66;19490:14;19466:9;:20;19476:9;19466:20;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;19539:9;19522:43;;19531:6;19522:43;;;19550:14;19522:43;;;;;;:::i;:::-;;;;;;;;19583:4;19576:11;;;18540:1055;;;;;;:::o;17531:358::-;17650:1;17633:19;;:5;:19;;;;17625:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17737:1;17718:21;;:7;:21;;;;17710:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17827:6;17797:11;:18;17809:5;17797:18;;;;;;;;;;;;;;;:27;17816:7;17797:27;;;;;;;;;;;;;;;:36;;;;17865:7;17849:32;;17858:5;17849:32;;;17874:6;17849:32;;;;;;:::i;:::-;;;;;;;;17531:358;;;:::o;12365:148::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12472:1:::1;12435:40;;12456:6;::::0;::::1;;;;;;;;12435:40;;;;;;;;;;;;12503:1;12486:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;12365:148::o:0;12668:250::-;11946:12;:10;:12::i;:::-;11936:22;;:6;;;;;;;;;;:22;;;11928:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12777:1:::1;12757:22;;:8;:22;;;;12749:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12873:8;12844:38;;12865:6;::::0;::::1;;;;;;;;12844:38;;;;;;;;;;;;12902:8;12893:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;12668:250:::0;:::o;19603:259::-;19696:4;19734:6;19713:9;:17;19723:6;19713:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;19775:6;19751:9;:20;19761:9;19751:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;19814:9;19797:35;;19806:6;19797:35;;;19825:6;19797:35;;;;;;:::i;:::-;;;;;;;;19850:4;19843:11;;19603:259;;;;;:::o;20117:166::-;20214:12;;20204:6;:22;;:49;;;;20230:15;:23;20246:6;20230:23;;;;;;;;;;;;;;;;;;;;;;;;;20204:49;20196:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20117:166;;:::o;19874:235::-;19960:19;19982:14;;19960:36;;20048:11;20038:6;20015:9;:20;20025:9;20015:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:44;;20007:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;19949:160;19874:235;;:::o;24419:90::-;24462:4;24500:1;24486:10;;:15;;24479:22;;24419:90;:::o;20291:114::-;20353:4;20378:11;:19;20390:6;20378:19;;;;;;;;;;;;;;;;;;;;;;;;;20377:20;20370:27;;20291:114;;;:::o;20766:1363::-;20852:7;20872:17;20892:1;20872:21;;20904:19;20927:14;:22;20942:6;20927:22;;;;;;;;;;;;;;;;;;;;;;;;;20926:23;:73;;;;;20984:15;20971:10;;20953:7;:15;20961:6;20953:15;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:46;20926:73;20904:95;;21013:14;:25;21028:9;21013:25;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;21056:1;21042:11;;:15;21013:44;21010:701;;;21075:16;21093;21123:4;21114:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21074:68;;;;;21157:22;21242:6;21200:16;;;;;;;;;;;:38;;21230:8;21200:38;;;21219:8;21200:38;21199:49;;;;;;:::i;:::-;21191:4;21182:6;:13;;;;:::i;:::-;:67;;;;:::i;:::-;21157:92;;21319:14;;21300:8;:16;21309:6;21300:16;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;21282:15;:51;21278:171;;;21373:15;21354:8;:16;21363:6;21354:16;;;;;;;;;;;;;;;:34;;;;21432:1;21407:14;:22;21422:6;21407:22;;;;;;;;;;;;;;;:26;;;;21278:171;21503:14;21477;:22;21492:6;21477:22;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;21576:17;;21550:14;:22;21565:6;21550:22;;;;;;;;;;;;;;;;:43;21546:154;;21670:14;;21663:3;21648:11;;21637:8;;21628:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;21627:39;;;;:::i;:::-;21626:58;;;;:::i;:::-;21614:70;;21546:154;21059:652;;;21010:701;21740:1;21727:9;:14;21723:127;;;21836:14;;21778:54;21790:14;:25;21805:9;21790:25;;;;;;;;;;;;;;;;;;;;;;;;;21817:14;21778:11;:54::i;:::-;21769:6;:63;;;;:::i;:::-;21768:82;;;;:::i;:::-;21756:94;;21723:127;21875:14;:22;21890:6;21875:22;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;21923:1;21901:7;:18;21909:9;21901:18;;;;;;;;;;;;;;;;:23;21875:49;21871:104;;;21960:15;21939:7;:18;21947:9;21939:18;;;;;;;;;;;;;;;:36;;;;21871:104;22016:9;21988;:24;22006:4;21988:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;22066:4;22041:42;;22050:6;22041:42;;;22073:9;22041:42;;;;;;:::i;:::-;;;;;;;;22112:9;22103:6;:18;;;;:::i;:::-;22096:25;;;;20766:1363;;;;;:::o;22137:321::-;22203:4;22228:14;:26;22243:10;22228:26;;;;;;;;;;;;;;;;;;;;;;;;;22227:27;:64;;;;;22268:11;:23;22280:10;22268:23;;;;;;;;;;;;;;;;;;;;;;;;;22267:24;22227:64;:84;;;;;22305:6;;;;;;;;;;;22304:7;22227:84;:108;;;;;22324:11;;;;;;;;;;;22227:108;:146;;;;;22348:14;:25;22363:9;22348:25;;;;;;;;;;;;;;;;;;;;;;;;;22227:146;:198;;;;;22414:11;;22386:9;:24;22404:4;22386:24;;;;;;;;;;;;;;;;:39;;22227:198;:223;;;;;22449:1;22438:8;;:12;22227:223;22220:230;;22137:321;;;:::o;22466:1945::-;15058:4;15049:6;;:13;;;;;;;;;;;;;;;;;;22529:20:::1;22561:13;;22552:6;:22;:47;;22586:13;;22552:47;;;22577:6;22552:47;22529:70;;22641:12;22614:9;:24;22632:4;22614:24;;;;;;;;;;;;;;;;:39;22610:84;;;22670:9;:24;22688:4;22670:24;;;;;;;;;;;;;;;;22655:39;;22610:84;22705:27;22735:60;22751:15;;22768:26;;22735:15;:60::i;:::-;:79;;22802:12;;22735:79;;;22798:1;22735:79;22705:109;;22825:23;22903:1;22891:8;;22868:19;22853:12;:34;;;;:::i;:::-;22852:47;;;;:::i;:::-;22851:53;;;;:::i;:::-;22825:79;;22931:15;22915:31;;;;;:::i;:::-;;;22959:21;22997:1;22983:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22959:40;;23028:4;23010;23015:1;23010:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23054:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23044:4;23049:1;23044:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23150:6;:57;;;23222:12;23249:1;23265:4;23292;23312:15;23150:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23351:23;23377:21;23351:47;;23409:19;23464:1;23442:19;:23;;;;:::i;:::-;23431:8;;:34;;;;:::i;:::-;23409:56;;23478:23;23560:1;23546:11;23523:19;23505:15;:37;;;;:::i;:::-;23504:53;;;;:::i;:::-;:57;;;;:::i;:::-;23478:83;;23572:22;23630:11;23615;;23597:15;:29;;;;:::i;:::-;23596:45;;;;:::i;:::-;23572:69;;23652:26;23718:14;23700:15;:32;;;;:::i;:::-;23681:15;:52;;;;:::i;:::-;23652:81;;23767:1;23749:15;:19;23746:442;;;23874:6;:22;;;23904:15;23947:4;23971:15;24005:1;24025::::0;24045:17:::1;24081:15;23874:237;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24131:45;24143:15;24160;24131:45;;;;;;;:::i;:::-;;;;;;;;23746:442;24229:1;24212:14;:18;24208:78;;;24245:16;:25;;:41;24271:14;24245:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24208:78;24336:1;24315:18;:22;24311:90;;;24352:20;:29;;:49;24382:18;24352:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24311:90;22518:1893;;;;;;;;;15076:5:::0;15067:6;;:14;;;;;;;;;;;;;;;;;;22466:1945;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:911::-;1137:6;1145;1153;1161;1169;1218:3;1206:9;1197:7;1193:23;1189:33;1186:120;;;1225:79;;:::i;:::-;1186:120;1345:1;1370:53;1415:7;1406:6;1395:9;1391:22;1370:53;:::i;:::-;1360:63;;1316:117;1472:2;1498:53;1543:7;1534:6;1523:9;1519:22;1498:53;:::i;:::-;1488:63;;1443:118;1600:2;1626:53;1671:7;1662:6;1651:9;1647:22;1626:53;:::i;:::-;1616:63;;1571:118;1728:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;:::i;:::-;1744:63;;1699:118;1856:3;1883:53;1928:7;1919:6;1908:9;1904:22;1883:53;:::i;:::-;1873:63;;1827:119;1042:911;;;;;;;;:::o;1959:99::-;2011:6;2045:5;2039:12;2029:22;;1959:99;;;:::o;2064:169::-;2148:11;2182:6;2177:3;2170:19;2222:4;2217:3;2213:14;2198:29;;2064:169;;;;:::o;2239:307::-;2307:1;2317:113;2331:6;2328:1;2325:13;2317:113;;;2416:1;2411:3;2407:11;2401:18;2397:1;2392:3;2388:11;2381:39;2353:2;2350:1;2346:10;2341:15;;2317:113;;;2448:6;2445:1;2442:13;2439:101;;;2528:1;2519:6;2514:3;2510:16;2503:27;2439:101;2288:258;2239:307;;;:::o;2552:102::-;2593:6;2644:2;2640:7;2635:2;2628:5;2624:14;2620:28;2610:38;;2552:102;;;:::o;2660:364::-;2748:3;2776:39;2809:5;2776:39;:::i;:::-;2831:71;2895:6;2890:3;2831:71;:::i;:::-;2824:78;;2911:52;2956:6;2951:3;2944:4;2937:5;2933:16;2911:52;:::i;:::-;2988:29;3010:6;2988:29;:::i;:::-;2983:3;2979:39;2972:46;;2752:272;2660:364;;;;:::o;3030:313::-;3143:4;3181:2;3170:9;3166:18;3158:26;;3230:9;3224:4;3220:20;3216:1;3205:9;3201:17;3194:47;3258:78;3331:4;3322:6;3258:78;:::i;:::-;3250:86;;3030:313;;;;:::o;3349:126::-;3386:7;3426:42;3419:5;3415:54;3404:65;;3349:126;;;:::o;3481:96::-;3518:7;3547:24;3565:5;3547:24;:::i;:::-;3536:35;;3481:96;;;:::o;3583:122::-;3656:24;3674:5;3656:24;:::i;:::-;3649:5;3646:35;3636:63;;3695:1;3692;3685:12;3636:63;3583:122;:::o;3711:139::-;3757:5;3795:6;3782:20;3773:29;;3811:33;3838:5;3811:33;:::i;:::-;3711:139;;;;:::o;3856:474::-;3924:6;3932;3981:2;3969:9;3960:7;3956:23;3952:32;3949:119;;;3987:79;;:::i;:::-;3949:119;4107:1;4132:53;4177:7;4168:6;4157:9;4153:22;4132:53;:::i;:::-;4122:63;;4078:117;4234:2;4260:53;4305:7;4296:6;4285:9;4281:22;4260:53;:::i;:::-;4250:63;;4205:118;3856:474;;;;;:::o;4336:90::-;4370:7;4413:5;4406:13;4399:21;4388:32;;4336:90;;;:::o;4432:109::-;4513:21;4528:5;4513:21;:::i;:::-;4508:3;4501:34;4432:109;;:::o;4547:210::-;4634:4;4672:2;4661:9;4657:18;4649:26;;4685:65;4747:1;4736:9;4732:17;4723:6;4685:65;:::i;:::-;4547:210;;;;:::o;4763:116::-;4833:21;4848:5;4833:21;:::i;:::-;4826:5;4823:32;4813:60;;4869:1;4866;4859:12;4813:60;4763:116;:::o;4885:133::-;4928:5;4966:6;4953:20;4944:29;;4982:30;5006:5;4982:30;:::i;:::-;4885:133;;;;:::o;5024:759::-;5107:6;5115;5123;5131;5180:3;5168:9;5159:7;5155:23;5151:33;5148:120;;;5187:79;;:::i;:::-;5148:120;5307:1;5332:53;5377:7;5368:6;5357:9;5353:22;5332:53;:::i;:::-;5322:63;;5278:117;5434:2;5460:53;5505:7;5496:6;5485:9;5481:22;5460:53;:::i;:::-;5450:63;;5405:118;5562:2;5588:53;5633:7;5624:6;5613:9;5609:22;5588:53;:::i;:::-;5578:63;;5533:118;5690:2;5716:50;5758:7;5749:6;5738:9;5734:22;5716:50;:::i;:::-;5706:60;;5661:115;5024:759;;;;;;;:::o;5789:474::-;5857:6;5865;5914:2;5902:9;5893:7;5889:23;5885:32;5882:119;;;5920:79;;:::i;:::-;5882:119;6040:1;6065:53;6110:7;6101:6;6090:9;6086:22;6065:53;:::i;:::-;6055:63;;6011:117;6167:2;6193:53;6238:7;6229:6;6218:9;6214:22;6193:53;:::i;:::-;6183:63;;6138:118;5789:474;;;;;:::o;6269:619::-;6346:6;6354;6362;6411:2;6399:9;6390:7;6386:23;6382:32;6379:119;;;6417:79;;:::i;:::-;6379:119;6537:1;6562:53;6607:7;6598:6;6587:9;6583:22;6562:53;:::i;:::-;6552:63;;6508:117;6664:2;6690:53;6735:7;6726:6;6715:9;6711:22;6690:53;:::i;:::-;6680:63;;6635:118;6792:2;6818:53;6863:7;6854:6;6843:9;6839:22;6818:53;:::i;:::-;6808:63;;6763:118;6269:619;;;;;:::o;6894:118::-;6981:24;6999:5;6981:24;:::i;:::-;6976:3;6969:37;6894:118;;:::o;7018:222::-;7111:4;7149:2;7138:9;7134:18;7126:26;;7162:71;7230:1;7219:9;7215:17;7206:6;7162:71;:::i;:::-;7018:222;;;;:::o;7246:86::-;7281:7;7321:4;7314:5;7310:16;7299:27;;7246:86;;;:::o;7338:112::-;7421:22;7437:5;7421:22;:::i;:::-;7416:3;7409:35;7338:112;;:::o;7456:214::-;7545:4;7583:2;7572:9;7568:18;7560:26;;7596:67;7660:1;7649:9;7645:17;7636:6;7596:67;:::i;:::-;7456:214;;;;:::o;7676:104::-;7721:7;7750:24;7768:5;7750:24;:::i;:::-;7739:35;;7676:104;;;:::o;7786:142::-;7889:32;7915:5;7889:32;:::i;:::-;7884:3;7877:45;7786:142;;:::o;7934:254::-;8043:4;8081:2;8070:9;8066:18;8058:26;;8094:87;8178:1;8167:9;8163:17;8154:6;8094:87;:::i;:::-;7934:254;;;;:::o;8194:468::-;8259:6;8267;8316:2;8304:9;8295:7;8291:23;8287:32;8284:119;;;8322:79;;:::i;:::-;8284:119;8442:1;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8413:117;8569:2;8595:50;8637:7;8628:6;8617:9;8613:22;8595:50;:::i;:::-;8585:60;;8540:115;8194:468;;;;;:::o;8668:329::-;8727:6;8776:2;8764:9;8755:7;8751:23;8747:32;8744:119;;;8782:79;;:::i;:::-;8744:119;8902:1;8927:53;8972:7;8963:6;8952:9;8948:22;8927:53;:::i;:::-;8917:63;;8873:117;8668:329;;;;:::o;9003:462::-;9065:6;9073;9122:2;9110:9;9101:7;9097:23;9093:32;9090:119;;;9128:79;;:::i;:::-;9090:119;9248:1;9273:50;9315:7;9306:6;9295:9;9291:22;9273:50;:::i;:::-;9263:60;;9219:114;9372:2;9398:50;9440:7;9431:6;9420:9;9416:22;9398:50;:::i;:::-;9388:60;;9343:115;9003:462;;;;;:::o;9471:613::-;9545:6;9553;9561;9610:2;9598:9;9589:7;9585:23;9581:32;9578:119;;;9616:79;;:::i;:::-;9578:119;9736:1;9761:50;9803:7;9794:6;9783:9;9779:22;9761:50;:::i;:::-;9751:60;;9707:114;9860:2;9886:53;9931:7;9922:6;9911:9;9907:22;9886:53;:::i;:::-;9876:63;;9831:118;9988:2;10014:53;10059:7;10050:6;10039:9;10035:22;10014:53;:::i;:::-;10004:63;;9959:118;9471:613;;;;;:::o;10090:329::-;10149:6;10198:2;10186:9;10177:7;10173:23;10169:32;10166:119;;;10204:79;;:::i;:::-;10166:119;10324:1;10349:53;10394:7;10385:6;10374:9;10370:22;10349:53;:::i;:::-;10339:63;;10295:117;10090:329;;;;:::o;10425:474::-;10493:6;10501;10550:2;10538:9;10529:7;10525:23;10521:32;10518:119;;;10556:79;;:::i;:::-;10518:119;10676:1;10701:53;10746:7;10737:6;10726:9;10722:22;10701:53;:::i;:::-;10691:63;;10647:117;10803:2;10829:53;10874:7;10865:6;10854:9;10850:22;10829:53;:::i;:::-;10819:63;;10774:118;10425:474;;;;;:::o;10905:60::-;10933:3;10954:5;10947:12;;10905:60;;;:::o;10971:142::-;11021:9;11054:53;11072:34;11081:24;11099:5;11081:24;:::i;:::-;11072:34;:::i;:::-;11054:53;:::i;:::-;11041:66;;10971:142;;;:::o;11119:126::-;11169:9;11202:37;11233:5;11202:37;:::i;:::-;11189:50;;11119:126;;;:::o;11251:144::-;11319:9;11352:37;11383:5;11352:37;:::i;:::-;11339:50;;11251:144;;;:::o;11401:167::-;11506:55;11555:5;11506:55;:::i;:::-;11501:3;11494:68;11401:167;;:::o;11574:258::-;11685:4;11723:2;11712:9;11708:18;11700:26;;11736:89;11822:1;11811:9;11807:17;11798:6;11736:89;:::i;:::-;11574:258;;;;:::o;11838:182::-;11978:34;11974:1;11966:6;11962:14;11955:58;11838:182;:::o;12026:366::-;12168:3;12189:67;12253:2;12248:3;12189:67;:::i;:::-;12182:74;;12265:93;12354:3;12265:93;:::i;:::-;12383:2;12378:3;12374:12;12367:19;;12026:366;;;:::o;12398:419::-;12564:4;12602:2;12591:9;12587:18;12579:26;;12651:9;12645:4;12641:20;12637:1;12626:9;12622:17;12615:47;12679:131;12805:4;12679:131;:::i;:::-;12671:139;;12398:419;;;:::o;12823:180::-;12871:77;12868:1;12861:88;12968:4;12965:1;12958:15;12992:4;12989:1;12982:15;13009:180;13057:77;13054:1;13047:88;13154:4;13151:1;13144:15;13178:4;13175:1;13168:15;13195:185;13235:1;13252:20;13270:1;13252:20;:::i;:::-;13247:25;;13286:20;13304:1;13286:20;:::i;:::-;13281:25;;13325:1;13315:35;;13330:18;;:::i;:::-;13315:35;13372:1;13369;13365:9;13360:14;;13195:185;;;;:::o;13386:348::-;13426:7;13449:20;13467:1;13449:20;:::i;:::-;13444:25;;13483:20;13501:1;13483:20;:::i;:::-;13478:25;;13671:1;13603:66;13599:74;13596:1;13593:81;13588:1;13581:9;13574:17;13570:105;13567:131;;;13678:18;;:::i;:::-;13567:131;13726:1;13723;13719:9;13708:20;;13386:348;;;;:::o;13740:239::-;13880:34;13876:1;13868:6;13864:14;13857:58;13949:22;13944:2;13936:6;13932:15;13925:47;13740:239;:::o;13985:366::-;14127:3;14148:67;14212:2;14207:3;14148:67;:::i;:::-;14141:74;;14224:93;14313:3;14224:93;:::i;:::-;14342:2;14337:3;14333:12;14326:19;;13985:366;;;:::o;14357:419::-;14523:4;14561:2;14550:9;14546:18;14538:26;;14610:9;14604:4;14600:20;14596:1;14585:9;14581:17;14574:47;14638:131;14764:4;14638:131;:::i;:::-;14630:139;;14357:419;;;:::o;14782:305::-;14822:3;14841:20;14859:1;14841:20;:::i;:::-;14836:25;;14875:20;14893:1;14875:20;:::i;:::-;14870:25;;15029:1;14961:66;14957:74;14954:1;14951:81;14948:107;;;15035:18;;:::i;:::-;14948:107;15079:1;15076;15072:9;15065:16;;14782:305;;;;:::o;15093:163::-;15233:15;15229:1;15221:6;15217:14;15210:39;15093:163;:::o;15262:366::-;15404:3;15425:67;15489:2;15484:3;15425:67;:::i;:::-;15418:74;;15501:93;15590:3;15501:93;:::i;:::-;15619:2;15614:3;15610:12;15603:19;;15262:366;;;:::o;15634:419::-;15800:4;15838:2;15827:9;15823:18;15815:26;;15887:9;15881:4;15877:20;15873:1;15862:9;15858:17;15851:47;15915:131;16041:4;15915:131;:::i;:::-;15907:139;;15634:419;;;:::o;16059:169::-;16199:21;16195:1;16187:6;16183:14;16176:45;16059:169;:::o;16234:366::-;16376:3;16397:67;16461:2;16456:3;16397:67;:::i;:::-;16390:74;;16473:93;16562:3;16473:93;:::i;:::-;16591:2;16586:3;16582:12;16575:19;;16234:366;;;:::o;16606:419::-;16772:4;16810:2;16799:9;16795:18;16787:26;;16859:9;16853:4;16849:20;16845:1;16834:9;16830:17;16823:47;16887:131;17013:4;16887:131;:::i;:::-;16879:139;;16606:419;;;:::o;17031:442::-;17180:4;17218:2;17207:9;17203:18;17195:26;;17231:71;17299:1;17288:9;17284:17;17275:6;17231:71;:::i;:::-;17312:72;17380:2;17369:9;17365:18;17356:6;17312:72;:::i;:::-;17394;17462:2;17451:9;17447:18;17438:6;17394:72;:::i;:::-;17031:442;;;;;;:::o;17479:174::-;17619:26;17615:1;17607:6;17603:14;17596:50;17479:174;:::o;17659:366::-;17801:3;17822:67;17886:2;17881:3;17822:67;:::i;:::-;17815:74;;17898:93;17987:3;17898:93;:::i;:::-;18016:2;18011:3;18007:12;18000:19;;17659:366;;;:::o;18031:419::-;18197:4;18235:2;18224:9;18220:18;18212:26;;18284:9;18278:4;18274:20;18270:1;18259:9;18255:17;18248:47;18312:131;18438:4;18312:131;:::i;:::-;18304:139;;18031:419;;;:::o;18456:167::-;18596:19;18592:1;18584:6;18580:14;18573:43;18456:167;:::o;18629:366::-;18771:3;18792:67;18856:2;18851:3;18792:67;:::i;:::-;18785:74;;18868:93;18957:3;18868:93;:::i;:::-;18986:2;18981:3;18977:12;18970:19;;18629:366;;;:::o;19001:419::-;19167:4;19205:2;19194:9;19190:18;19182:26;;19254:9;19248:4;19244:20;19240:1;19229:9;19225:17;19218:47;19282:131;19408:4;19282:131;:::i;:::-;19274:139;;19001:419;;;:::o;19426:221::-;19566:34;19562:1;19554:6;19550:14;19543:58;19635:4;19630:2;19622:6;19618:15;19611:29;19426:221;:::o;19653:366::-;19795:3;19816:67;19880:2;19875:3;19816:67;:::i;:::-;19809:74;;19892:93;19981:3;19892:93;:::i;:::-;20010:2;20005:3;20001:12;19994:19;;19653:366;;;:::o;20025:419::-;20191:4;20229:2;20218:9;20214:18;20206:26;;20278:9;20272:4;20268:20;20264:1;20253:9;20249:17;20242:47;20306:131;20432:4;20306:131;:::i;:::-;20298:139;;20025:419;;;:::o;20450:229::-;20590:34;20586:1;20578:6;20574:14;20567:58;20659:12;20654:2;20646:6;20642:15;20635:37;20450:229;:::o;20685:366::-;20827:3;20848:67;20912:2;20907:3;20848:67;:::i;:::-;20841:74;;20924:93;21013:3;20924:93;:::i;:::-;21042:2;21037:3;21033:12;21026:19;;20685:366;;;:::o;21057:419::-;21223:4;21261:2;21250:9;21246:18;21238:26;;21310:9;21304:4;21300:20;21296:1;21285:9;21281:17;21274:47;21338:131;21464:4;21338:131;:::i;:::-;21330:139;;21057:419;;;:::o;21482:170::-;21622:22;21618:1;21610:6;21606:14;21599:46;21482:170;:::o;21658:366::-;21800:3;21821:67;21885:2;21880:3;21821:67;:::i;:::-;21814:74;;21897:93;21986:3;21897:93;:::i;:::-;22015:2;22010:3;22006:12;21999:19;;21658:366;;;:::o;22030:419::-;22196:4;22234:2;22223:9;22219:18;22211:26;;22283:9;22277:4;22273:20;22269:1;22258:9;22254:17;22247:47;22311:131;22437:4;22311:131;:::i;:::-;22303:139;;22030:419;;;:::o;22455:332::-;22576:4;22614:2;22603:9;22599:18;22591:26;;22627:71;22695:1;22684:9;22680:17;22671:6;22627:71;:::i;:::-;22708:72;22776:2;22765:9;22761:18;22752:6;22708:72;:::i;:::-;22455:332;;;;;:::o;22793:102::-;22835:8;22882:5;22879:1;22875:13;22854:34;;22793:102;;;:::o;22901:848::-;22962:5;22969:4;22993:6;22984:15;;23017:5;23008:14;;23031:712;23052:1;23042:8;23039:15;23031:712;;;23147:4;23142:3;23138:14;23132:4;23129:24;23126:50;;;23156:18;;:::i;:::-;23126:50;23206:1;23196:8;23192:16;23189:451;;;23621:4;23614:5;23610:16;23601:25;;23189:451;23671:4;23665;23661:15;23653:23;;23701:32;23724:8;23701:32;:::i;:::-;23689:44;;23031:712;;;22901:848;;;;;;;:::o;23755:1073::-;23809:5;24000:8;23990:40;;24021:1;24012:10;;24023:5;;23990:40;24049:4;24039:36;;24066:1;24057:10;;24068:5;;24039:36;24135:4;24183:1;24178:27;;;;24219:1;24214:191;;;;24128:277;;24178:27;24196:1;24187:10;;24198:5;;;24214:191;24259:3;24249:8;24246:17;24243:43;;;24266:18;;:::i;:::-;24243:43;24315:8;24312:1;24308:16;24299:25;;24350:3;24343:5;24340:14;24337:40;;;24357:18;;:::i;:::-;24337:40;24390:5;;;24128:277;;24514:2;24504:8;24501:16;24495:3;24489:4;24486:13;24482:36;24464:2;24454:8;24451:16;24446:2;24440:4;24437:12;24433:35;24417:111;24414:246;;;24570:8;24564:4;24560:19;24551:28;;24605:3;24598:5;24595:14;24592:40;;;24612:18;;:::i;:::-;24592:40;24645:5;;24414:246;24685:42;24723:3;24713:8;24707:4;24704:1;24685:42;:::i;:::-;24670:57;;;;24759:4;24754:3;24750:14;24743:5;24740:25;24737:51;;;24768:18;;:::i;:::-;24737:51;24817:4;24810:5;24806:16;24797:25;;23755:1073;;;;;;:::o;24834:281::-;24892:5;24916:23;24934:4;24916:23;:::i;:::-;24908:31;;24960:25;24976:8;24960:25;:::i;:::-;24948:37;;25004:104;25041:66;25031:8;25025:4;25004:104;:::i;:::-;24995:113;;24834:281;;;;:::o;25121:191::-;25161:4;25181:20;25199:1;25181:20;:::i;:::-;25176:25;;25215:20;25233:1;25215:20;:::i;:::-;25210:25;;25254:1;25251;25248:8;25245:34;;;25259:18;;:::i;:::-;25245:34;25304:1;25301;25297:9;25289:17;;25121:191;;;;:::o;25318:165::-;25458:17;25454:1;25446:6;25442:14;25435:41;25318:165;:::o;25489:366::-;25631:3;25652:67;25716:2;25711:3;25652:67;:::i;:::-;25645:74;;25728:93;25817:3;25728:93;:::i;:::-;25846:2;25841:3;25837:12;25830:19;;25489:366;;;:::o;25861:419::-;26027:4;26065:2;26054:9;26050:18;26042:26;;26114:9;26108:4;26104:20;26100:1;26089:9;26085:17;26078:47;26142:131;26268:4;26142:131;:::i;:::-;26134:139;;25861:419;;;:::o;26286:230::-;26426:34;26422:1;26414:6;26410:14;26403:58;26495:13;26490:2;26482:6;26478:15;26471:38;26286:230;:::o;26522:366::-;26664:3;26685:67;26749:2;26744:3;26685:67;:::i;:::-;26678:74;;26761:93;26850:3;26761:93;:::i;:::-;26879:2;26874:3;26870:12;26863:19;;26522:366;;;:::o;26894:419::-;27060:4;27098:2;27087:9;27083:18;27075:26;;27147:9;27141:4;27137:20;27133:1;27122:9;27118:17;27111:47;27175:131;27301:4;27175:131;:::i;:::-;27167:139;;26894:419;;;:::o;27319:180::-;27459:32;27455:1;27447:6;27443:14;27436:56;27319:180;:::o;27505:366::-;27647:3;27668:67;27732:2;27727:3;27668:67;:::i;:::-;27661:74;;27744:93;27833:3;27744:93;:::i;:::-;27862:2;27857:3;27853:12;27846:19;;27505:366;;;:::o;27877:419::-;28043:4;28081:2;28070:9;28066:18;28058:26;;28130:9;28124:4;28120:20;28116:1;28105:9;28101:17;28094:47;28158:131;28284:4;28158:131;:::i;:::-;28150:139;;27877:419;;;:::o;28302:222::-;28442:34;28438:1;28430:6;28426:14;28419:58;28511:5;28506:2;28498:6;28494:15;28487:30;28302:222;:::o;28530:366::-;28672:3;28693:67;28757:2;28752:3;28693:67;:::i;:::-;28686:74;;28769:93;28858:3;28769:93;:::i;:::-;28887:2;28882:3;28878:12;28871:19;;28530:366;;;:::o;28902:419::-;29068:4;29106:2;29095:9;29091:18;29083:26;;29155:9;29149:4;29145:20;29141:1;29130:9;29126:17;29119:47;29183:131;29309:4;29183:131;:::i;:::-;29175:139;;28902:419;;;:::o;29327:430::-;29470:4;29508:2;29497:9;29493:18;29485:26;;29521:71;29589:1;29578:9;29574:17;29565:6;29521:71;:::i;:::-;29602:72;29670:2;29659:9;29655:18;29646:6;29602:72;:::i;:::-;29684:66;29746:2;29735:9;29731:18;29722:6;29684:66;:::i;:::-;29327:430;;;;;;:::o;29763:232::-;29903:34;29899:1;29891:6;29887:14;29880:58;29972:15;29967:2;29959:6;29955:15;29948:40;29763:232;:::o;30001:366::-;30143:3;30164:67;30228:2;30223:3;30164:67;:::i;:::-;30157:74;;30240:93;30329:3;30240:93;:::i;:::-;30358:2;30353:3;30349:12;30342:19;;30001:366;;;:::o;30373:419::-;30539:4;30577:2;30566:9;30562:18;30554:26;;30626:9;30620:4;30616:20;30612:1;30601:9;30597:17;30590:47;30654:131;30780:4;30654:131;:::i;:::-;30646:139;;30373:419;;;:::o;30798:170::-;30938:22;30934:1;30926:6;30922:14;30915:46;30798:170;:::o;30974:366::-;31116:3;31137:67;31201:2;31196:3;31137:67;:::i;:::-;31130:74;;31213:93;31302:3;31213:93;:::i;:::-;31331:2;31326:3;31322:12;31315:19;;30974:366;;;:::o;31346:419::-;31512:4;31550:2;31539:9;31535:18;31527:26;;31599:9;31593:4;31589:20;31585:1;31574:9;31570:17;31563:47;31627:131;31753:4;31627:131;:::i;:::-;31619:139;;31346:419;;;:::o;31771:179::-;31911:31;31907:1;31899:6;31895:14;31888:55;31771:179;:::o;31956:366::-;32098:3;32119:67;32183:2;32178:3;32119:67;:::i;:::-;32112:74;;32195:93;32284:3;32195:93;:::i;:::-;32313:2;32308:3;32304:12;32297:19;;31956:366;;;:::o;32328:419::-;32494:4;32532:2;32521:9;32517:18;32509:26;;32581:9;32575:4;32571:20;32567:1;32556:9;32552:17;32545:47;32609:131;32735:4;32609:131;:::i;:::-;32601:139;;32328:419;;;:::o;32753:176::-;32893:28;32889:1;32881:6;32877:14;32870:52;32753:176;:::o;32935:366::-;33077:3;33098:67;33162:2;33157:3;33098:67;:::i;:::-;33091:74;;33174:93;33263:3;33174:93;:::i;:::-;33292:2;33287:3;33283:12;33276:19;;32935:366;;;:::o;33307:419::-;33473:4;33511:2;33500:9;33496:18;33488:26;;33560:9;33554:4;33550:20;33546:1;33535:9;33531:17;33524:47;33588:131;33714:4;33588:131;:::i;:::-;33580:139;;33307:419;;;:::o;33732:229::-;33872:34;33868:1;33860:6;33856:14;33849:58;33941:12;33936:2;33928:6;33924:15;33917:37;33732:229;:::o;33967:366::-;34109:3;34130:67;34194:2;34189:3;34130:67;:::i;:::-;34123:74;;34206:93;34295:3;34206:93;:::i;:::-;34324:2;34319:3;34315:12;34308:19;;33967:366;;;:::o;34339:419::-;34505:4;34543:2;34532:9;34528:18;34520:26;;34592:9;34586:4;34582:20;34578:1;34567:9;34563:17;34556:47;34620:131;34746:4;34620:131;:::i;:::-;34612:139;;34339:419;;;:::o;34764:227::-;34904:34;34900:1;34892:6;34888:14;34881:58;34973:10;34968:2;34960:6;34956:15;34949:35;34764:227;:::o;34997:366::-;35139:3;35160:67;35224:2;35219:3;35160:67;:::i;:::-;35153:74;;35236:93;35325:3;35236:93;:::i;:::-;35354:2;35349:3;35345:12;35338:19;;34997:366;;;:::o;35369:419::-;35535:4;35573:2;35562:9;35558:18;35550:26;;35622:9;35616:4;35612:20;35608:1;35597:9;35593:17;35586:47;35650:131;35776:4;35650:131;:::i;:::-;35642:139;;35369:419;;;:::o;35794:231::-;35934:34;35930:1;35922:6;35918:14;35911:58;36003:14;35998:2;35990:6;35986:15;35979:39;35794:231;:::o;36031:366::-;36173:3;36194:67;36258:2;36253:3;36194:67;:::i;:::-;36187:74;;36270:93;36359:3;36270:93;:::i;:::-;36388:2;36383:3;36379:12;36372:19;;36031:366;;;:::o;36403:419::-;36569:4;36607:2;36596:9;36592:18;36584:26;;36656:9;36650:4;36646:20;36642:1;36631:9;36627:17;36620:47;36684:131;36810:4;36684:131;:::i;:::-;36676:139;;36403:419;;;:::o;36828:167::-;36968:19;36964:1;36956:6;36952:14;36945:43;36828:167;:::o;37001:366::-;37143:3;37164:67;37228:2;37223:3;37164:67;:::i;:::-;37157:74;;37240:93;37329:3;37240:93;:::i;:::-;37358:2;37353:3;37349:12;37342:19;;37001:366;;;:::o;37373:419::-;37539:4;37577:2;37566:9;37562:18;37554:26;;37626:9;37620:4;37616:20;37612:1;37601:9;37597:17;37590:47;37654:131;37780:4;37654:131;:::i;:::-;37646:139;;37373:419;;;:::o;37798:224::-;37938:34;37934:1;37926:6;37922:14;37915:58;38007:7;38002:2;37994:6;37990:15;37983:32;37798:224;:::o;38028:366::-;38170:3;38191:67;38255:2;38250:3;38191:67;:::i;:::-;38184:74;;38267:93;38356:3;38267:93;:::i;:::-;38385:2;38380:3;38376:12;38369:19;;38028:366;;;:::o;38400:419::-;38566:4;38604:2;38593:9;38589:18;38581:26;;38653:9;38647:4;38643:20;38639:1;38628:9;38624:17;38617:47;38681:131;38807:4;38681:131;:::i;:::-;38673:139;;38400:419;;;:::o;38825:114::-;38862:7;38902:30;38895:5;38891:42;38880:53;;38825:114;;;:::o;38945:122::-;39018:24;39036:5;39018:24;:::i;:::-;39011:5;39008:35;38998:63;;39057:1;39054;39047:12;38998:63;38945:122;:::o;39073:143::-;39130:5;39161:6;39155:13;39146:22;;39177:33;39204:5;39177:33;:::i;:::-;39073:143;;;;:::o;39222:93::-;39258:7;39298:10;39291:5;39287:22;39276:33;;39222:93;;;:::o;39321:120::-;39393:23;39410:5;39393:23;:::i;:::-;39386:5;39383:34;39373:62;;39431:1;39428;39421:12;39373:62;39321:120;:::o;39447:141::-;39503:5;39534:6;39528:13;39519:22;;39550:32;39576:5;39550:32;:::i;:::-;39447:141;;;;:::o;39594:661::-;39681:6;39689;39697;39746:2;39734:9;39725:7;39721:23;39717:32;39714:119;;;39752:79;;:::i;:::-;39714:119;39872:1;39897:64;39953:7;39944:6;39933:9;39929:22;39897:64;:::i;:::-;39887:74;;39843:128;40010:2;40036:64;40092:7;40083:6;40072:9;40068:22;40036:64;:::i;:::-;40026:74;;39981:129;40149:2;40175:63;40230:7;40221:6;40210:9;40206:22;40175:63;:::i;:::-;40165:73;;40120:128;39594:661;;;;;:::o;40261:180::-;40309:77;40306:1;40299:88;40406:4;40403:1;40396:15;40430:4;40427:1;40420:15;40447:180;40495:77;40492:1;40485:88;40592:4;40589:1;40582:15;40616:4;40613:1;40606:15;40633:143;40690:5;40721:6;40715:13;40706:22;;40737:33;40764:5;40737:33;:::i;:::-;40633:143;;;;:::o;40782:351::-;40852:6;40901:2;40889:9;40880:7;40876:23;40872:32;40869:119;;;40907:79;;:::i;:::-;40869:119;41027:1;41052:64;41108:7;41099:6;41088:9;41084:22;41052:64;:::i;:::-;41042:74;;40998:128;40782:351;;;;:::o;41139:85::-;41184:7;41213:5;41202:16;;41139:85;;;:::o;41230:158::-;41288:9;41321:61;41339:42;41348:32;41374:5;41348:32;:::i;:::-;41339:42;:::i;:::-;41321:61;:::i;:::-;41308:74;;41230:158;;;:::o;41394:147::-;41489:45;41528:5;41489:45;:::i;:::-;41484:3;41477:58;41394:147;;:::o;41547:114::-;41614:6;41648:5;41642:12;41632:22;;41547:114;;;:::o;41667:184::-;41766:11;41800:6;41795:3;41788:19;41840:4;41835:3;41831:14;41816:29;;41667:184;;;;:::o;41857:132::-;41924:4;41947:3;41939:11;;41977:4;41972:3;41968:14;41960:22;;41857:132;;;:::o;41995:108::-;42072:24;42090:5;42072:24;:::i;:::-;42067:3;42060:37;41995:108;;:::o;42109:179::-;42178:10;42199:46;42241:3;42233:6;42199:46;:::i;:::-;42277:4;42272:3;42268:14;42254:28;;42109:179;;;;:::o;42294:113::-;42364:4;42396;42391:3;42387:14;42379:22;;42294:113;;;:::o;42443:732::-;42562:3;42591:54;42639:5;42591:54;:::i;:::-;42661:86;42740:6;42735:3;42661:86;:::i;:::-;42654:93;;42771:56;42821:5;42771:56;:::i;:::-;42850:7;42881:1;42866:284;42891:6;42888:1;42885:13;42866:284;;;42967:6;42961:13;42994:63;43053:3;43038:13;42994:63;:::i;:::-;42987:70;;43080:60;43133:6;43080:60;:::i;:::-;43070:70;;42926:224;42913:1;42910;42906:9;42901:14;;42866:284;;;42870:14;43166:3;43159:10;;42567:608;;;42443:732;;;;:::o;43181:831::-;43444:4;43482:3;43471:9;43467:19;43459:27;;43496:71;43564:1;43553:9;43549:17;43540:6;43496:71;:::i;:::-;43577:80;43653:2;43642:9;43638:18;43629:6;43577:80;:::i;:::-;43704:9;43698:4;43694:20;43689:2;43678:9;43674:18;43667:48;43732:108;43835:4;43826:6;43732:108;:::i;:::-;43724:116;;43850:72;43918:2;43907:9;43903:18;43894:6;43850:72;:::i;:::-;43932:73;44000:3;43989:9;43985:19;43976:6;43932:73;:::i;:::-;43181:831;;;;;;;;:::o;44018:807::-;44267:4;44305:3;44294:9;44290:19;44282:27;;44319:71;44387:1;44376:9;44372:17;44363:6;44319:71;:::i;:::-;44400:72;44468:2;44457:9;44453:18;44444:6;44400:72;:::i;:::-;44482:80;44558:2;44547:9;44543:18;44534:6;44482:80;:::i;:::-;44572;44648:2;44637:9;44633:18;44624:6;44572:80;:::i;:::-;44662:73;44730:3;44719:9;44715:19;44706:6;44662:73;:::i;:::-;44745;44813:3;44802:9;44798:19;44789:6;44745:73;:::i;:::-;44018:807;;;;;;;;;:::o;44831:143::-;44888:5;44919:6;44913:13;44904:22;;44935:33;44962:5;44935:33;:::i;:::-;44831:143;;;;:::o;44980:663::-;45068:6;45076;45084;45133:2;45121:9;45112:7;45108:23;45104:32;45101:119;;;45139:79;;:::i;:::-;45101:119;45259:1;45284:64;45340:7;45331:6;45320:9;45316:22;45284:64;:::i;:::-;45274:74;;45230:128;45397:2;45423:64;45479:7;45470:6;45459:9;45455:22;45423:64;:::i;:::-;45413:74;;45368:129;45536:2;45562:64;45618:7;45609:6;45598:9;45594:22;45562:64;:::i;:::-;45552:74;;45507:129;44980:663;;;;;:::o

Swarm Source

ipfs://c69ae19762b3c9ead555dbc6cde08144921730b45bac051e0f91fd968e83294b

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.