ETH Price: $2,455.11 (-0.99%)

Contract

0x51d7B79ED187a9AcC64275879A70AD2eD378B337
 

Overview

ETH Balance

0.001285743613140373 ETH

Eth Value

$3.16 (@ $2,455.11/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer192260072024-02-14 11:47:47263 days ago1707911267IN
0x51d7B79E...eD378B337
0 ETH0.0026462919.97719334
Transfer162902522022-12-29 11:55:47675 days ago1672314947IN
0x51d7B79E...eD378B337
0 ETH0.0031395920.99135853
Approve157101282022-10-09 11:05:47756 days ago1665313547IN
0x51d7B79E...eD378B337
0 ETH0.0004936320.31751131
Approve156312822022-09-28 10:36:35767 days ago1664361395IN
0x51d7B79E...eD378B337
0 ETH0.000193817.9772784
Approve147463742022-05-10 3:53:51908 days ago1652154831IN
0x51d7B79E...eD378B337
0 ETH0.0012402651.04822965
Claim Bonus Rewa...145667282022-04-11 21:15:58936 days ago1649711758IN
0x51d7B79E...eD378B337
0 ETH0.001969949.21064269
Set Max Wallet145391242022-04-07 13:53:51940 days ago1649339631IN
0x51d7B79E...eD378B337
0 ETH0.0018914960.5471806
Set Tx Limit145391232022-04-07 13:53:44940 days ago1649339624IN
0x51d7B79E...eD378B337
0 ETH0.0019521462.53074975
Approve145365162022-04-07 4:08:27941 days ago1649304507IN
0x51d7B79E...eD378B337
0 ETH0.001993942.80611827
Approve145043462022-04-02 3:23:15946 days ago1648869795IN
0x51d7B79E...eD378B337
0 ETH0.0019641980.8443044
Approve144886452022-03-30 16:36:29948 days ago1648658189IN
0x51d7B79E...eD378B337
0 ETH0.0044716896
Approve144685042022-03-27 13:30:30951 days ago1648387830IN
0x51d7B79E...eD378B337
0 ETH0.001164525
Approve144613832022-03-26 10:45:23953 days ago1648291523IN
0x51d7B79E...eD378B337
0 ETH0.0005437322.37941062
Manual Deposit144587932022-03-26 1:06:42953 days ago1648256802IN
0x51d7B79E...eD378B337
0 ETH0.0017495148.75887026
Approve144574532022-03-25 20:04:41953 days ago1648238681IN
0x51d7B79E...eD378B337
0 ETH0.0029734663.83557706
Manual Deposit144552402022-03-25 11:46:47954 days ago1648208807IN
0x51d7B79E...eD378B337
0 ETH0.0013930838.79914719
Set Distributors144552282022-03-25 11:44:28954 days ago1648208668IN
0x51d7B79E...eD378B337
0 ETH0.0058824643.27439015
Approve144453992022-03-23 22:59:11955 days ago1648076351IN
0x51d7B79E...eD378B337
0 ETH0.0012331850.7566422
Claim Rewards144420932022-03-23 10:47:04956 days ago1648032424IN
0x51d7B79E...eD378B337
0 ETH0.0013598515
Claim Bonus Rewa...144420932022-03-23 10:47:04956 days ago1648032424IN
0x51d7B79E...eD378B337
0 ETH0.0013301115
Approve144419792022-03-23 10:21:46956 days ago1648030906IN
0x51d7B79E...eD378B337
0 ETH0.000698715
Approve144381272022-03-22 19:58:03956 days ago1647979083IN
0x51d7B79E...eD378B337
0 ETH0.0021413445.97130116
Approve144380512022-03-22 19:41:23956 days ago1647978083IN
0x51d7B79E...eD378B337
0 ETH0.0017338237.22243511
Approve144379982022-03-22 19:31:38956 days ago1647977498IN
0x51d7B79E...eD378B337
0 ETH0.0032132968.98451475
Claim Bonus Rewa...144201562022-03-20 0:49:33959 days ago1647737373IN
0x51d7B79E...eD378B337
0 ETH0.0015494217.47332854
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
145365232022-04-07 4:10:00941 days ago1649304600
0x51d7B79E...eD378B337
0.00351687 ETH
145365232022-04-07 4:10:00941 days ago1649304600
0x51d7B79E...eD378B337
0.00439609 ETH
145365232022-04-07 4:10:00941 days ago1649304600
0x51d7B79E...eD378B337
0.00017584 ETH
145365232022-04-07 4:10:00941 days ago1649304600
0x51d7B79E...eD378B337
0.00158259 ETH
145365232022-04-07 4:10:00941 days ago1649304600
0x51d7B79E...eD378B337
0.01055061 ETH
144685072022-03-27 13:31:23951 days ago1648387883
0x51d7B79E...eD378B337
0.0016261 ETH
144685072022-03-27 13:31:23951 days ago1648387883
0x51d7B79E...eD378B337
0.00203262 ETH
144685072022-03-27 13:31:23951 days ago1648387883
0x51d7B79E...eD378B337
0.0000813 ETH
144685072022-03-27 13:31:23951 days ago1648387883
0x51d7B79E...eD378B337
0.00073174 ETH
144685072022-03-27 13:31:23951 days ago1648387883
0x51d7B79E...eD378B337
0.0048783 ETH
144587932022-03-26 1:06:42953 days ago1648256802
0x51d7B79E...eD378B337
4 ETH
144552402022-03-25 11:46:47954 days ago1648208807
0x51d7B79E...eD378B337
0.31698532 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00000346 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00003118 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00291762 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00364703 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00014588 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00131293 ETH
144427042022-03-23 13:00:10956 days ago1648040410
0x51d7B79E...eD378B337
0.00875287 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00007577 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00332295 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00415369 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00016614 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00149533 ETH
144159832022-03-19 9:11:08960 days ago1647681068
0x51d7B79E...eD378B337
0.00996886 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Mjolnir

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-05
*/

/*

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.11;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * 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
     * zero 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 zero.
     */
    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);
}

/**
 * @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 private _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 zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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;
}

interface IDividendDistributor {
    function initialize() external;
    function setPrimaryDistributor(address distributor) external;
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimDividend(address shareholder) external;
    function getUnpaidEarnings(address shareholder) external view returns (uint256);
    function getPaidDividends(address shareholder) external view returns (uint256);
    function getTotalPaid() external view returns (uint256);
    function getClaimTime(address shareholder) external view returns (uint256);
    function getLostRewards(address shareholder) external view returns (uint256);
    function countShareholders() external view returns (uint256);
}

contract DividendDistributor is IDividendDistributor {

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
        uint256 totalLost;
    }

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) public shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public totalSacrificed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 24 hours;
    uint256 public minDistribution = 1 * (10 ** 15);
    
    DividendDistributor primaryDistributor;
    bool isBonusPool = false;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor () {
    }
    
    function initialize() external override initialization {
        _token = msg.sender;
    }
    
    function setPrimaryDistributor(address distributor) external override onlyToken {
        require(!isBonusPool);
        primaryDistributor = DividendDistributor(distributor);
        isBonusPool = true;
        minPeriod = 7 days;
    }
    
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
            shares[shareholder].totalExcluded = getCumulativeDividends(amount);
            shareholderClaims[shareholder] = block.timestamp;
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        
        bool sharesIncreased = shares[shareholder].amount < amount;
        uint256 unpaid = getUnpaidEarnings(shareholder);
        
        if(sharesIncreased){
            if (shouldDistribute(shareholder, unpaid))
                distributeDividend(shareholder, unpaid);
            
            shares[shareholder].totalExcluded += getCumulativeDividends(amount - shares[shareholder].amount);
        }
        
        totalShares = (totalShares - shares[shareholder].amount) + amount;
        shares[shareholder].amount = amount;
        
        if (!sharesIncreased) {
            if (address(this).balance < unpaid) unpaid = address(this).balance;
            totalSacrificed = totalSacrificed + unpaid;
            shares[shareholder].totalLost += unpaid;
            payable(_token).transfer(unpaid);
            shares[shareholder].totalExcluded = getCumulativeDividends(amount);
        }
    }

    function deposit() external payable override {
        uint256 amount = msg.value;

        totalDividends = totalDividends + amount;
        dividendsPerShare += ((dividendsPerShareAccuracyFactor * amount) / totalShares);
    }

    function shouldDistribute(address shareholder, uint256 unpaidEarnings) internal view returns (bool) {
	   if(!isBonusPool)
            return shareholderClaims[shareholder] + minPeriod < block.timestamp && unpaidEarnings > minDistribution;
        else {
    	    return shareholderClaims[shareholder] < 1646308800 + (((block.timestamp - 1646308800) / 604800) * 604800);
        }
            
    }
    
    function getClaimTime(address shareholder) external override view onlyToken returns (uint256) {
        if (shareholderClaims[shareholder] + minPeriod <= block.timestamp || isBonusPool)
            return 0;
        else
            return (shareholderClaims[shareholder] + minPeriod) - block.timestamp;
    }

    function distributeDividend(address shareholder, uint256 unpaidEarnings) internal {
        if(shares[shareholder].amount == 0){ return; }

        if(unpaidEarnings > 0){
            totalDistributed = totalDistributed + unpaidEarnings;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised + unpaidEarnings;
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            payable(shareholder).transfer(unpaidEarnings);
        }
    }

    function claimDividend(address shareholder) external override onlyToken {
        require(shouldDistribute(shareholder, getUnpaidEarnings(shareholder)), "Dividends not available yet");
        distributeDividend(shareholder, getUnpaidEarnings(shareholder));
    }

    function getUnpaidEarnings(address shareholder) public view override onlyToken returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends - shareholderTotalExcluded;
    }
    
    function getPaidDividends(address shareholder) external view override onlyToken returns (uint256) {
        return shares[shareholder].totalRealised;
    }
    
    function getTotalPaid() external view override onlyToken returns (uint256) {
        return totalDistributed;
    }
    
    function countShareholders() external view override onlyToken returns (uint256) {
        return shareholders.length;
    }
    
    function getLostRewards(address shareholder) external view override onlyToken returns (uint256) {
        return shares[shareholder].totalLost;
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        if(share == 0){ return 0; }
        return (share * dividendsPerShare) / dividendsPerShareAccuracyFactor;
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

interface IProtect {
  function setTokenOwner(address main, address owner, address pair) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Mjolnir is IERC20, Ownable {
    using Address for address;
    
    address WBNB;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    IERC20[] discountTokens;
    uint256[] discountTokenMaxWallet;

    string constant _name = "Mjolnir";
    string constant _symbol = "MJOLNIR";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 100;
    uint256 public _maxWalletSize = (_totalSupply * 1) / 100;

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

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => uint256) lastSell;

    uint256 devFee = 400;
    uint256 buybackFee = 100;
    uint256 reflectionFee = 200;
    uint256 bonusPercent = 10;
    uint256 marketingFee = 500;
    uint256 totalFee = 1200;
    uint256 feeDenominator = 10000;
    uint256 public _sellMultiplierNumerator = 100;
    uint256 public _sellMultiplierDenominator = 100;
    uint256 public _dumpProtectionNumerator = 0;
    uint256 public _dumpProtectionDenominator = 100 * _maxTxAmount;
    uint256 public _dumpProtectionThreshold = 1;
    uint256 public _dumpProtectionTimer = 0;
    uint256 public _discountNumerator = 0;
    uint256 public _discountDenominator = 100;
    bool public rewardsActive = true;

    address payable devFeeReceiver;
    address payable marketingFeeReceiver;

    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;

    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    bool public autoBonusDeposit = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor public distributor;
    DividendDistributor public bonusDistributor;

    IProtect public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 2000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _marketing, address _dev) {
        router = IDEXRouter(routerAddress);
        WBNB = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[msg.sender][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[routerAddress] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        devFeeReceiver = payable(_dev);
        marketingFeeReceiver = payable(_marketing);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view 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 airdrop(address[] memory addresses, uint256[] memory amounts) external onlyOwner {
        require(addresses.length > 0 && amounts.length > 0 && addresses.length == amounts.length);
        address from = msg.sender;
        for (uint i = 0; i < addresses.length; i++) {
            if(balanceOf(addresses[i]) == 0) {
                isDividendExempt[addresses[i]] = true;
                _transferFrom(from, addresses[i], amounts[i] * (10 ** _decimals));
            }
        }
    }

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

    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(amount > 0, "Zero amount transferred");
        require(_balances[sender] >= amount, "Insufficient balance");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

        if(!launched() && recipient == pair){ require(sender == owner(), "Contract not launched yet."); launch(); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = !isFeeExempt[sender] ? takeFee(sender, recipient, amount) : amount;
        
        if(!isFeeExempt[recipient]) {
            if(shouldSwapBack(recipient)){ swapBack(amount); }
            if(shouldAutoBuyback(recipient)){ triggerAutoBuyback(); }
        } 
        
        _balances[recipient] = _balances[recipient] + amountReceived;

        if(!isDividendExempt[sender]){ 
            try distributor.setShare(sender, _balances[sender]) {} catch {} 
            try bonusDistributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if(!isDividendExempt[recipient]){ 
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
            try bonusDistributor.setShare(recipient, _balances[recipient]) {} catch {}
        }

        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        if (_discountNumerator > 0) {
            uint256 discount = getDiscountRate(recipient);
            if (discount > 0)
                walletLimit = walletLimit + (walletLimit * discount) / totalFee;
        }
        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 setup() external onlyOwner {
        require(!launched());
        distributor = new DividendDistributor();
        distributor.initialize();
        bonusDistributor = new DividendDistributor();
        bonusDistributor.initialize();
        bonusDistributor.setPrimaryDistributor(address(distributor));
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled);
        protectionEnabled = _protect;
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled);
            antisnipe = IProtect(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(msg.sender, address(this), pair);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
    }
    
    function setDistributors(address _distributor, address _bonusDistributor) external onlyOwner {
        distributor = DividendDistributor(_distributor);
        distributor.initialize();
        bonusDistributor = DividendDistributor(_bonusDistributor);
        bonusDistributor.initialize();
        bonusDistributor.setPrimaryDistributor(_distributor);
    }
    
    function setDiscountToken(address _discountToken, uint256 _discountMaxWallet) external onlyOwner {
        require(_discountToken.isContract());
        discountTokens.push(IERC20(_discountToken));
        discountTokenMaxWallet.push(_discountMaxWallet);
    }
    
    function removeDiscountToken() external onlyOwner {
        discountTokens.pop();
        discountTokenMaxWallet.pop();
    }
    
    function getDiscountRate(address account) internal view returns (uint256) {
        uint256 balance = discountTokens[0].balanceOf(account);
        uint256 discount;
        for (uint i = 0; i < discountTokens.length; i++) {
            balance = discountTokens[i].balanceOf(account);
            if (balance > discountTokenMaxWallet[i]) balance = discountTokenMaxWallet[i];
            if (balance > 0) discount = discount + (totalFee * balance * _discountNumerator) / (_discountDenominator * discountTokenMaxWallet[i]);
        }
        return discount;
    }

    function getTotalFee(bool selling, address sender, address recipient, uint256 amount) public view returns (uint256) {
        if(launchedAt + 2 > block.number){ return feeDenominator - 1; }
        if(selling){
            if (amount <= swapThreshold * _dumpProtectionThreshold && lastSell[sender] + _dumpProtectionTimer < block.number)
                return (totalFee * _sellMultiplierNumerator) / _sellMultiplierDenominator;
            else
                return (totalFee * _sellMultiplierNumerator) / _sellMultiplierDenominator + (amount * totalFee * _dumpProtectionNumerator) / (_dumpProtectionDenominator);
        }
        uint256 extraFee = (amount * _dumpProtectionThreshold * totalFee * _dumpProtectionNumerator) / (_dumpProtectionDenominator*2);
        if (_discountNumerator == 0 || isDividendExempt[recipient]) 
            return totalFee + extraFee;
        
        return (totalFee - getDiscountRate(recipient)/2) + extraFee; 
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee(recipient == pair, sender, recipient, amount)) / feeDenominator;
        if (recipient == pair) {
            lastSell[sender] = block.number;
        }

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

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && recipient == pair
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 swapHolderProtection = amount > swapThreshold * _dumpProtectionThreshold ? amount + (_dumpProtectionNumerator * amount * amount) / (_dumpProtectionDenominator*2) : amount;
        if (swapHolderProtection > _maxTxAmount) swapHolderProtection = _maxTxAmount;
        if (_balances[address(this)] < swapHolderProtection) swapHolderProtection = _balances[address(this)];

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;
        
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapHolderProtection,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountOut = address(this).balance - balanceBefore;

        uint256 amountDev = (amountOut * devFee) / totalFee;
        uint256 amountBonusPool = (amountOut * reflectionFee * bonusPercent) / (totalFee * 100);
        uint256 amountPrizePool = ((amountOut * reflectionFee) / totalFee) - amountBonusPool;
        uint256 amountMarketing = amountOut - (amountDev + amountPrizePool + amountBonusPool + (amountOut * buybackFee) / totalFee);
        
        if (rewardsActive && amountPrizePool > 0){
            try distributor.deposit{value: amountPrizePool}() {} catch {}
            try bonusDistributor.deposit{value: amountBonusPool}() {} catch {}
        }
        
        if (amountMarketing > 0)
            marketingFeeReceiver.transfer(amountMarketing);

        if(amountDev > 0)
            devFeeReceiver.transfer(amountDev);
    }

    function shouldAutoBuyback(address recipient) internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && recipient == pair
            && address(this).balance >= autoBuybackAmount;
    }

    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external onlyOwner {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    function manualDeposit(uint256 amount, bool bonus) external onlyOwner {
        if (bonus)
            bonusDistributor.deposit{value: amount}();
        else
            distributor.deposit{value: amount}();
    }
    
    function manualSell(uint256 amount) external onlyOwner {
        swapBack(amount);
    }
    
    function toggleRewards(bool toggle) external onlyOwner {
        rewardsActive = toggle;
    }

    function clearBuybackMultiplier() external onlyOwner {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator + autoBuybackAmount;
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external onlyOwner {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
    }
    
    function setAutoBonusDeposit(bool enabled) external onlyOwner {
        autoBonusDeposit = enabled;
    }

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

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(numerator > 0 && divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }
    
    function setSellMultiplier(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && numerator / divisor <= 3, "Taxes too high");
        _sellMultiplierNumerator = numerator;
        _sellMultiplierDenominator = divisor;
    }
    
    function setDumpMultiplier(uint256 numerator, uint256 divisor, uint256 dumpThreshold, uint256 dumpTimer) external onlyOwner() {
        require(divisor > 0 && numerator / divisor <= 3 , "Taxes too high");
        _dumpProtectionNumerator = numerator;
        _dumpProtectionDenominator = divisor * _maxTxAmount;
        _dumpProtectionThreshold = dumpThreshold;
        _dumpProtectionTimer = dumpTimer;
    }
    
    function setDiscountMultiplier(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && numerator / divisor <= 1);
        _discountNumerator = numerator;
        _discountDenominator = divisor;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != pair && holder != DEAD && holder != owner());
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
            bonusDistributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
            bonusDistributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _devFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator, uint256 _bonusPercent) external onlyOwner {
        require(_bonusPercent <= 80, "Bonus pool too high");
        bonusPercent = _bonusPercent;
        devFee = _devFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _devFee + _buybackFee + _reflectionFee + _marketingFee;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator / 4, "Taxes too high");
    }

    function setFeeReceivers(address _devFeeReceiver, address _marketingFeeReceiver) external onlyOwner {
        devFeeReceiver = payable(_devFeeReceiver);
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

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

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

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    function checkDiscountRate(address wallet) external view returns (uint256) {
        return getDiscountRate(wallet);
    }
    
    function getPoolStatistics() external view returns (uint256 totalRewards, uint256 totalRewardsPaid, uint256 rewardsSacrificed, uint256 totalBonuses, uint256 totalBonusesPaid, uint256 bonusSacrificed, uint256 rewardHolders, uint256 bonusHolders) {
        totalRewards = distributor.totalDividends();
        totalRewardsPaid = distributor.totalDistributed();
        rewardsSacrificed = distributor.totalSacrificed();
        totalBonuses = bonusDistributor.totalDividends();
        totalBonusesPaid = bonusDistributor.totalDistributed();
        bonusSacrificed = bonusDistributor.totalSacrificed();
        rewardHolders = distributor.countShareholders();
        bonusHolders = bonusDistributor.countShareholders();
    }
    
    function myStatistics(address wallet) external view returns (uint256 reward, uint256 bonusReward, uint256 rewardClaimed, uint256 bonusClaimed, uint256 rewardsLost, uint256 bonusLost) {
	    reward = distributor.getUnpaidEarnings(wallet);
	    bonusReward = bonusDistributor.getUnpaidEarnings(wallet);
	    rewardClaimed = distributor.getPaidDividends(wallet);
	    bonusClaimed = bonusDistributor.getPaidDividends(wallet);
	    rewardsLost = distributor.getLostRewards(wallet);
	    bonusLost = bonusDistributor.getLostRewards(wallet);
	}
	
	function checkClaimTimes(address wallet) external view returns (uint256 mainPool, uint256 bonusPool) {
	    mainPool = distributor.getClaimTime(wallet);
        bonusPool = bonusDistributor.getClaimTime(wallet);
	}
	
	function claimRewards() external {
        require(distributor.getClaimTime(msg.sender) == 0, "Rewards not ready yet");
	    distributor.claimDividend(msg.sender);
	}
	
	function claimBonusRewards() external {
        require(bonusDistributor.getClaimTime(msg.sender) == 0, "Rewards not ready yet");
	    bonusDistributor.claimDividend(msg.sender);
	}

    event BuybackMultiplierActive(uint256 duration);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_discountDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_discountNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpProtectionDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpProtectionNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpProtectionThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpProtectionTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_sellMultiplierDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMultiplierNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":[],"name":"antisnipe","outputs":[{"internalType":"contract IProtect","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBonusDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"checkClaimTimes","outputs":[{"internalType":"uint256","name":"mainPool","type":"uint256"},{"internalType":"uint256","name":"bonusPool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"checkDiscountRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBonusRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","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":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"totalRewardsPaid","type":"uint256"},{"internalType":"uint256","name":"rewardsSacrificed","type":"uint256"},{"internalType":"uint256","name":"totalBonuses","type":"uint256"},{"internalType":"uint256","name":"totalBonusesPaid","type":"uint256"},{"internalType":"uint256","name":"bonusSacrificed","type":"uint256"},{"internalType":"uint256","name":"rewardHolders","type":"uint256"},{"internalType":"uint256","name":"bonusHolders","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"bonus","type":"bool"}],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"myStatistics","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"bonusReward","type":"uint256"},{"internalType":"uint256","name":"rewardClaimed","type":"uint256"},{"internalType":"uint256","name":"bonusClaimed","type":"uint256"},{"internalType":"uint256","name":"rewardsLost","type":"uint256"},{"internalType":"uint256","name":"bonusLost","type":"uint256"}],"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":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDiscountToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAutoBonusDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setDiscountMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_discountToken","type":"address"},{"internalType":"uint256","name":"_discountMaxWallet","type":"uint256"}],"name":"setDiscountToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"},{"internalType":"address","name":"_bonusDistributor","type":"address"}],"name":"setDistributors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"},{"internalType":"uint256","name":"dumpThreshold","type":"uint256"},{"internalType":"uint256","name":"dumpTimer","type":"uint256"}],"name":"setDumpMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"},{"internalType":"uint256","name":"_bonusPercent","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","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":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setSellMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","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":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"toggle","type":"bool"}],"name":"toggleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811661dead17909155600380549091169055620000326009600a620005e9565b620000439064e8d4a5100062000601565b6006556064600654600162000059919062000601565b62000065919062000623565b600755606460065460016200007b919062000601565b62000087919062000623565b600855610190600f55606460105560c8601155600a6012556101f46013556104b06014556127106015556064601655606460175560006018556007546064620000d1919062000601565b60199081556001601a8190556000601b819055601c556064601d819055601e805460ff19169092179091556020919091556021556107086027556028805461ffff191690556030805462ffffff60a01b19166201000160a01b1790556006546200013f906107d09062000623565b6031553480156200014f57600080fd5b5060405162005fd838038062005fd8833981016040819052620001729162000663565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e91906200069b565b600180546001600160a01b0319166001600160a01b039283161790556022546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c391906200069b565b6001546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033b91906200069b565b602380546001600160a01b03199081166001600160a01b03938416178255336000818152600a60208181526040808420737a250d5630b4cf539739df2c5dacb4c659f2488d808652908352818520600019908190553080875294845282862091865290835281852055848452600b8252808420805460ff199081166001908117909255848652600c8452828620805482168317905586865282862080548216831790557f0ec9aca9afadc09fc0bd96ec7d7d6cfbb5408a5bc5bcf87bc0656b65508e559a8054821683179055975489168552600d8352818520805489168217905585855281852080548916821790559284528084208054881684179055600254881684528084208054881684179055600354881684528084208054909716909217909555601e8054610100600160a81b03191661010089891602179055601f8054909416958816959095179092556006548183526009845284832081905593519384529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620006b9565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200052b5781600019048211156200050f576200050f620004d4565b808516156200051d57918102915b93841c9390800290620004ef565b509250929050565b6000826200054457506001620005e3565b816200055357506000620005e3565b81600181146200056c5760028114620005775762000597565b6001915050620005e3565b60ff8411156200058b576200058b620004d4565b50506001821b620005e3565b5060208310610133831016604e8410600b8410161715620005bc575081810a620005e3565b620005c88383620004ea565b8060001904821115620005df57620005df620004d4565b0290505b92915050565b6000620005fa60ff84168362000533565b9392505050565b60008160001904831182151516156200061e576200061e620004d4565b500290565b6000826200064157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200065e57600080fd5b919050565b600080604083850312156200067757600080fd5b620006828362000646565b9150620006926020840162000646565b90509250929050565b600060208284031215620006ae57600080fd5b620005fa8262000646565b61590f80620006c96000396000f3fe608060405260043610620004cb5760003560e01c8063844eb202116200027b578063ba0bba401162000153578063d8573b8411620000c5578063f2fde38b1162000084578063f2fde38b1462000f5c578063f708a64f1462000f81578063f84ba65d1462000fa6578063f887ea401462000fcb578063f8a251461462000fed57600080fd5b8063d8573b841462000e8b578063db78ee2f1462000eb0578063dd62ed3e1462000ec8578063df20fd491462000f12578063f14fd1011462000f3757600080fd5b8063c5363caa1162000112578063c5363caa1462000dd4578063ceafd6da1462000df7578063d08aa7eb1462000e1c578063d51ed1c81462000e41578063d5d035f51462000e6657600080fd5b8063ba0bba401462000d16578063ba3194ed1462000d2e578063be12ac2f1462000d82578063bf56b3711462000d9a578063bfe109281462000db257600080fd5b8063a4b45c0011620001ed578063aceac85611620001ac578063aceac8561462000c50578063ae6093801462000ca3578063b04c1e021462000cc4578063b210b06d1462000ce6578063b930e0311462000cfe57600080fd5b8063a4b45c001462000ba3578063a519121a1462000bc8578063a8aa1b311462000be4578063a9059cbb1462000c06578063abe57e701462000c2b57600080fd5b80638c19ec8b116200023a5780638c19ec8b1462000b0f5780638da5cb5b1462000abb5780638f9a55c01462000b3457806391f915451462000b4c57806395d89b411462000b7157600080fd5b8063844eb2021462000a4357806386f6c3c11462000a5b578063882cfb3f1462000a80578063893d20e81462000abb5780638b42507f1462000adb57600080fd5b80633eedc8c911620003af578063676881fe11620003215780637516baec11620002e05780637516baec14620009a657806377cf1ce014620009c95780637c446b6714620009ee5780637d1db4a51462000a0657806382334b941462000a1e57600080fd5b8063676881fe14620008f45780636844e45a146200090c5780636ddd1713146200093157806370a082311462000954578063715018a6146200098e57600080fd5b8063571ac8b0116200036e578063571ac8b014620008485780635804f1e4146200086d57806361bd34851462000885578063658d4b7f14620008aa5780636724348214620008cf57600080fd5b80633eedc8c914620007985780633f4218e014620007b0578063421dd7c714620007e45780634355855a14620007fc5780634567c058146200083057600080fd5b806320aa655911620004495780632d4efa4711620004085780632d4efa4714620007095780632ff83b4c146200072e578063313ce5671462000746578063372500ab14620007645780633bb8a8d4146200077c57600080fd5b806320aa6559146200064757806323b872dd146200066c5780632403975414620006915780632b112e4914620006cc5780632d48e89614620006e457600080fd5b80631161ae3911620004965780631161ae39146200059c57806318160ddd14620005c15780631a6e937d14620005d85780631faf723b14620005fd578063201e7991146200062257600080fd5b80630445b66714620004d8578063048c7baf146200050357806306fdde03146200052a578063095ea7b3146200056657600080fd5b36620004d357005b600080fd5b348015620004e557600080fd5b50620004f060315481565b6040519081526020015b60405180910390f35b3480156200051057600080fd5b5062000528620005223660046200423a565b62001005565b005b3480156200053757600080fd5b5060408051808201909152600781526626b537b63734b960c91b60208201525b604051620004fa919062004278565b3480156200057357600080fd5b506200058b62000585366004620042ed565b62001064565b6040519015158152602001620004fa565b348015620005a957600080fd5b506200058b620005bb3660046200431a565b620010d2565b348015620005ce57600080fd5b50600654620004f0565b348015620005e557600080fd5b5062000528620005f73660046200433d565b620010e8565b3480156200060a57600080fd5b50620005286200061c3660046200431a565b6200112f565b3480156200062f57600080fd5b5062000528620006413660046200431a565b620011aa565b3480156200065457600080fd5b5062000528620006663660046200435d565b620011e2565b3480156200067957600080fd5b506200058b6200068b36600462004395565b62001355565b3480156200069e57600080fd5b50620006b6620006b0366004620043d6565b620013ef565b60408051928352602083019190915201620004fa565b348015620006d957600080fd5b50620004f0620014de565b348015620006f157600080fd5b5062000528620007033660046200431a565b62001528565b3480156200071657600080fd5b506200052862000728366004620043f4565b6200158e565b3480156200073b57600080fd5b50620004f060165481565b3480156200075357600080fd5b5060405160098152602001620004fa565b3480156200077157600080fd5b5062000528620015c9565b3480156200078957600080fd5b506028546200058b9060ff1681565b348015620007a557600080fd5b50620004f060195481565b348015620007bd57600080fd5b506200058b620007cf366004620043d6565b600b6020526000908152604090205460ff1681565b348015620007f157600080fd5b5062000528620016e1565b3480156200080957600080fd5b506200058b6200081b366004620043d6565b600d6020526000908152604090205460ff1681565b3480156200083d57600080fd5b50620004f0601c5481565b3480156200085557600080fd5b506200058b62000867366004620043d6565b62001723565b3480156200087a57600080fd5b50620004f060255481565b3480156200089257600080fd5b50620004f0620008a4366004620043d6565b62001733565b348015620008b757600080fd5b5062000528620008c93660046200440e565b62001740565b348015620008dc57600080fd5b5062000528620008ee3660046200452e565b62001798565b3480156200090157600080fd5b50620004f060175481565b3480156200091957600080fd5b50620005286200092b3660046200431a565b62001911565b3480156200093e57600080fd5b506030546200058b90600160b01b900460ff1681565b3480156200096157600080fd5b50620004f062000973366004620043d6565b6001600160a01b031660009081526009602052604090205490565b3480156200099b57600080fd5b506200052862001985565b348015620009b357600080fd5b506030546200058b90600160a01b900460ff1681565b348015620009d657600080fd5b50620004f0620009e8366004620045fc565b620019fc565b348015620009fb57600080fd5b50620004f060185481565b34801562000a1357600080fd5b50620004f060075481565b34801562000a2b57600080fd5b506200052862000a3d36600462004650565b62001bd8565b34801562000a5057600080fd5b50620004f0601a5481565b34801562000a6857600080fd5b506200052862000a7a36600462004678565b62001c64565b34801562000a8d57600080fd5b5060305462000aa2906001600160a01b031681565b6040516001600160a01b039091168152602001620004fa565b34801562000ac857600080fd5b506000546001600160a01b031662000aa2565b34801562000ae857600080fd5b506200058b62000afa366004620043d6565b600c6020526000908152604090205460ff1681565b34801562000b1c57600080fd5b506200052862000b2e3660046200433d565b62001d51565b34801562000b4157600080fd5b50620004f060085481565b34801562000b5957600080fd5b506200052862000b6b366004620042ed565b62001d91565b34801562000b7e57600080fd5b5060408051808201909152600781526626a527a62724a960c91b602082015262000557565b34801562000bb057600080fd5b506200052862000bc23660046200435d565b62001e5c565b34801562000bd557600080fd5b50601e546200058b9060ff1681565b34801562000bf157600080fd5b5060235462000aa2906001600160a01b031681565b34801562000c1357600080fd5b506200058b62000c25366004620042ed565b62001ec1565b34801562000c3857600080fd5b506200052862000c4a3660046200431a565b62001ed0565b34801562000c5d57600080fd5b5062000c7562000c6f366004620043d6565b62001f4b565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001620004fa565b34801562000cb057600080fd5b506028546200058b90610100900460ff1681565b34801562000cd157600080fd5b50602f5462000aa2906001600160a01b031681565b34801562000cf357600080fd5b506200052862002213565b34801562000d0b57600080fd5b50620004f0601b5481565b34801562000d2357600080fd5b506200052862002247565b34801562000d3b57600080fd5b5062000d46620023ef565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001620004fa565b34801562000d8f57600080fd5b50620004f0601d5481565b34801562000da757600080fd5b50620004f060245481565b34801562000dbf57600080fd5b50602e5462000aa2906001600160a01b031681565b34801562000de157600080fd5b506030546200058b90600160a81b900460ff1681565b34801562000e0457600080fd5b506200052862000e163660046200433d565b620027e5565b34801562000e2957600080fd5b506200052862000e3b3660046200431a565b6200284f565b34801562000e4e57600080fd5b50620004f062000e60366004620043f4565b620028ae565b34801562000e7357600080fd5b506200052862000e853660046200440e565b620028fa565b34801562000e9857600080fd5b506200052862000eaa366004620046bc565b620029b9565b34801562000ebd57600080fd5b506200052862002a46565b34801562000ed557600080fd5b50620004f062000ee73660046200435d565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801562000f1f57600080fd5b506200052862000f31366004620046ef565b62002ad5565b34801562000f4457600080fd5b506200052862000f5636600462004650565b62002b3e565b34801562000f6957600080fd5b506200052862000f7b366004620043d6565b62002c32565b34801562000f8e57600080fd5b506200052862000fa03660046200440e565b62002d21565b34801562000fb357600080fd5b506200052862000fc53660046200440e565b62002f48565b34801562000fd857600080fd5b5060225462000aa2906001600160a01b031681565b34801562000ffa57600080fd5b506200052862002fa0565b6000546001600160a01b031633146200103b5760405162461bcd60e51b8152600401620010329062004710565b60405180910390fd5b6028805460ff1916941515949094179093556029919091556000602a55602b55602c5543602d55565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620010c09086815260200190565b60405180910390a35060015b92915050565b600082620010e083620028ae565b119392505050565b6000546001600160a01b03163314620011155760405162461bcd60e51b8152600401620010329062004710565b602880549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146200115c5760405162461bcd60e51b8152600401620010329062004710565b6000821180156200116d5750600081115b80156200117c57506127108111155b6200118657600080fd5b80826006546200119791906200475b565b620011a391906200477d565b6007555050565b6000546001600160a01b03163314620011d75760405162461bcd60e51b8152600401620010329062004710565b602091909155602155565b6000546001600160a01b031633146200120f5760405162461bcd60e51b8152600401620010329062004710565b602e80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b5050602f80546001600160a01b0319166001600160a01b0385169081179091556040805163204a7f0760e21b81529051919350638129fc1c925060048082019260009290919082900301818387803b158015620012d657600080fd5b505af1158015620012eb573d6000803e3d6000fd5b5050602f54604051633baddff560e21b81526001600160a01b038681166004830152909116925063eeb77fd491506024015b600060405180830381600087803b1580156200133857600080fd5b505af11580156200134d573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914620013d8576001600160a01b0384166000908152600a60209081526040808320338452909152902054620013b3908390620047a0565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b620013e584848462003087565b90505b9392505050565b602e54604051630994fc3160e11b81526001600160a01b0383811660048301526000928392911690631329f86290602401602060405180830381865afa1580156200143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014649190620047ba565b602f54604051630994fc3160e11b81526001600160a01b038681166004830152929450911690631329f86290602401602060405180830381865afa158015620014b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d79190620047ba565b9050915091565b6003546001600160a01b0390811660009081526009602052604080822054600254909316825281205490916200151491620047d4565b600654620015239190620047a0565b905090565b6000546001600160a01b03163314620015555760405162461bcd60e51b8152600401620010329062004710565b602e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044016200131d565b6000546001600160a01b03163314620015bb5760405162461bcd60e51b8152600401620010329062004710565b620015c68162003661565b50565b602e54604051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa15801562001612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016389190620047ba565b156200167f5760405162461bcd60e51b815260206004820152601560248201527414995dd85c991cc81b9bdd081c9958591e481e595d605a1b604482015260640162001032565b602e54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015b600060405180830381600087803b158015620016c657600080fd5b505af1158015620016db573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146200170e5760405162461bcd60e51b8152600401620010329062004710565b6030805460ff60a81b1916600160a81b179055565b6000620010cc8260001962001064565b6000620010cc8262003a7a565b6000546001600160a01b031633146200176d5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620017c55760405162461bcd60e51b8152600401620010329062004710565b60008251118015620017d8575060008151115b8015620017e6575080518251145b620017f057600080fd5b3360005b8351811015620016db576200183a848281518110620018175762001817620047ef565b60200260200101516001600160a01b031660009081526009602052604090205490565b620018fc576001600d60008684815181106200185a576200185a620047ef565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550620018fa82858381518110620018b357620018b3620047ef565b60200260200101516009600a620018cb919062004902565b868581518110620018e057620018e0620047ef565b6020026020010151620018f491906200475b565b62003087565b505b80620019088162004913565b915050620017f4565b6000546001600160a01b031633146200193e5760405162461bcd60e51b8152600401620010329062004710565b6000811180156200195b575060036200195882846200477d565b11155b6200197a5760405162461bcd60e51b8152600401620010329062004931565b601691909155601755565b6000546001600160a01b03163314620019b25760405162461bcd60e51b8152600401620010329062004710565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043602454600262001a109190620047d4565b111562001a3057600160155462001a289190620047a0565b905062001bd0565b841562001b0057601a5460315462001a4991906200475b565b821115801562001a7f5750601b546001600160a01b0385166000908152600e6020526040902054439162001a7d91620047d4565b105b1562001aa65760175460165460145462001a9a91906200475b565b62001a2891906200477d565b60195460185460145462001abb90856200475b565b62001ac791906200475b565b62001ad391906200477d565b60175460165460145462001ae891906200475b565b62001af491906200477d565b62001a289190620047d4565b6000601954600262001b1391906200475b565b601854601454601a5462001b2890876200475b565b62001b3491906200475b565b62001b4091906200475b565b62001b4c91906200477d565b9050601c546000148062001b7857506001600160a01b0384166000908152600d602052604090205460ff165b1562001b97578060145462001b8e9190620047d4565b91505062001bd0565b80600262001ba58662003a7a565b62001bb191906200477d565b60145462001bc09190620047a0565b62001bcc9190620047d4565b9150505b949350505050565b6000546001600160a01b0316331462001c055760405162461bcd60e51b8152600401620010329062004710565b60025462001c1e9083906001600160a01b031662003c8c565b801562001c6057426026556027546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b5050565b6000546001600160a01b0316331462001c915760405162461bcd60e51b8152600401620010329062004710565b605081111562001cda5760405162461bcd60e51b8152602060048201526013602482015272084dedceae640e0deded840e8dede40d0d2ced606b1b604482015260640162001032565b6012819055600f869055601085905560118490556013839055828462001d018789620047d4565b62001d0d9190620047d4565b62001d199190620047d4565b601455601582905562001d2e6004836200477d565b601454106200134d5760405162461bcd60e51b8152600401620010329062004931565b6000546001600160a01b0316331462001d7e5760405162461bcd60e51b8152600401620010329062004710565b601e805460ff1916911515919091179055565b6000546001600160a01b0316331462001dbe5760405162461bcd60e51b8152600401620010329062004710565b62001dd2826001600160a01b031662003d9f565b62001ddc57600080fd5b6004805460018082019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0394909416939093179092556005805492830181556000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910155565b6000546001600160a01b0316331462001e895760405162461bcd60e51b8152600401620010329062004710565b601e8054610100600160a81b0319166101006001600160a01b0394851602179055601f80546001600160a01b03191691909216179055565b6000620013e833848462003087565b6000546001600160a01b0316331462001efd5760405162461bcd60e51b8152600401620010329062004710565b60008211801562001f0e5750600081115b801562001f1d57506127108111155b62001f2757600080fd5b808260065462001f3891906200475b565b62001f4491906200477d565b6008555050565b602e5460405163051fa63360e31b81526001600160a01b03838116600483015260009283928392839283928392909116906328fd319890602401602060405180830381865afa15801562001fa3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fc99190620047ba565b602f5460405163051fa63360e31b81526001600160a01b038a811660048301529298509116906328fd319890602401602060405180830381865afa15801562002016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200203c9190620047ba565b602e54604051633cbf8a6160e01b81526001600160a01b038a81166004830152929750911690633cbf8a6190602401602060405180830381865afa15801562002089573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020af9190620047ba565b602f54604051633cbf8a6160e01b81526001600160a01b038a81166004830152929650911690633cbf8a6190602401602060405180830381865afa158015620020fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021229190620047ba565b602e54604051635a3f213160e01b81526001600160a01b038a81166004830152929550911690635a3f213190602401602060405180830381865afa1580156200216f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021959190620047ba565b602f54604051635a3f213160e01b81526001600160a01b038a81166004830152929450911690635a3f213190602401602060405180830381865afa158015620021e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022089190620047ba565b905091939550919395565b6000546001600160a01b03163314620022405760405162461bcd60e51b8152600401620010329062004710565b6000602655565b6000546001600160a01b03163314620022745760405162461bcd60e51b8152600401620010329062004710565b602454156200228257600080fd5b60405162002290906200421d565b604051809103906000f080158015620022ad573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b039290921691821790556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200230557600080fd5b505af11580156200231a573d6000803e3d6000fd5b505050506040516200232c906200421d565b604051809103906000f08015801562002349573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b039290921691821790556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b158015620023a157600080fd5b505af1158015620023b6573d6000803e3d6000fd5b5050602f54602e54604051633baddff560e21b81526001600160a01b0391821660048201529116925063eeb77fd49150602401620016ab565b600080600080600080600080602e60009054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200244f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024759190620047ba565b9750602e60009054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620024cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024f19190620047ba565b9650602e60009054906101000a90046001600160a01b03166001600160a01b03166342685d746040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200256d9190620047ba565b9550602f60009054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620025c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025e99190620047ba565b9450602f60009054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200263f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026659190620047ba565b9350602f60009054906101000a90046001600160a01b03166001600160a01b03166342685d746040518163ffffffff1660e01b8152600401602060405180830381865afa158015620026bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026e19190620047ba565b9250602e60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200275d9190620047ba565b9150602f60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027d99190620047ba565b90509091929394959697565b6000546001600160a01b03163314620028125760405162461bcd60e51b8152600401620010329062004710565b80156200283157603054600160a81b900460ff16156200283157600080fd5b60308054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146200287c5760405162461bcd60e51b8152600401620010329062004710565b60008111801562002899575060016200289682846200477d565b11155b620028a357600080fd5b601c91909155601d55565b6000620028ba620014de565b6023546001600160a01b0316600090815260096020526040902054620028e190846200475b565b620028ee9060026200475b565b620010cc91906200477d565b6000546001600160a01b03163314620029275760405162461bcd60e51b8152600401620010329062004710565b6030546001600160a01b038381169116146200297157603054600160a81b900460ff16156200295557600080fd5b603080546001600160a01b0319166001600160a01b0384161790555b801562001c6057603054602354604051633d42475360e01b81523360048201523060248201526001600160a01b039182166044820152911690633d424753906064016200131d565b6000546001600160a01b03163314620029e65760405162461bcd60e51b8152600401620010329062004710565b60008311801562002a035750600362002a0084866200477d565b11155b62002a225760405162461bcd60e51b8152600401620010329062004931565b601884905560075462002a3690846200475b565b601955601a91909155601b555050565b6000546001600160a01b0316331462002a735760405162461bcd60e51b8152600401620010329062004710565b600480548062002a875762002a8762004959565b600082815260209020810160001990810180546001600160a01b0319169055019055600580548062002abd5762002abd62004959565b60019003818190600052602060002001600090559055565b6000546001600160a01b0316331462002b025760405162461bcd60e51b8152600401620010329062004710565b6000811162002b1057600080fd5b6030805460ff60b01b1916600160b01b8415150217905560065462002b379082906200477d565b6031555050565b6000546001600160a01b0316331462002b6b5760405162461bcd60e51b8152600401620010329062004710565b801562002be157602f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002bc357600080fd5b505af115801562002bd8573d6000803e3d6000fd5b50505050505050565b602e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002bc357600080fd5b6000546001600160a01b0316331462002c5f5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03811662002cc65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162001032565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462002d4e5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b038216301480159062002d7657506023546001600160a01b03838116911614155b801562002d9157506002546001600160a01b03838116911614155b801562002dac57506000546001600160a01b03838116911614155b62002db657600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915562002e8657602e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b15801562002e3357600080fd5b505af115801562002e48573d6000803e3d6000fd5b5050602f54604051630a5b654b60e11b81526001600160a01b0386811660048301526000602483015290911692506314b6ca9691506044016200131d565b602e546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801562002ee557600080fd5b505af115801562002efa573d6000803e3d6000fd5b5050602f546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b815260048101929092526024820152911692506314b6ca9691506044016200131d565b6000546001600160a01b0316331462002f755760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b602f54604051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa15801562002fe9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200300f9190620047ba565b15620030565760405162461bcd60e51b815260206004820152601560248201527414995dd85c991cc81b9bdd081c9958591e481e595d605a1b604482015260640162001032565b602f54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401620016ab565b6000808211620030da5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640162001032565b6001600160a01b0384166000908152600960205260409020548211156200313b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640162001032565b60325460ff16156200315c576200315484848462003dd9565b9050620013e8565b62003168848362003e98565b6023546001600160a01b038481169116148015906200319557506002546001600160a01b03848116911614155b15620031c8576001600160a01b0383166000908152600c602052604090205460ff16620031c857620031c8838362003f04565b602454158015620031e657506023546001600160a01b038481169116145b1562003259576000546001600160a01b038581169116146200324b5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640162001032565b620032594360245542602555565b6001600160a01b0384166000908152600960205260409020546200327f908390620047a0565b6001600160a01b038516600090815260096020908152604080832093909355600b90529081205460ff1615620032b65782620032c3565b620032c385858562003fdd565b6001600160a01b0385166000908152600b602052604090205490915060ff166200331e57620032f284620040de565b156200330357620033038362003661565b6200330e8462004153565b156200331e576200331e620041d0565b6001600160a01b03841660009081526009602052604090205462003344908290620047d4565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600d909152205460ff166200345d57602e546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620033d757600080fd5b505af1925050508015620033e9575060015b50602f546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200344957600080fd5b505af19250505080156200345b575060015b505b6001600160a01b0384166000908152600d602052604090205460ff166200356357602e546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620034dd57600080fd5b505af1925050508015620034ef575060015b50602f546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200354f57600080fd5b505af192505050801562003561575060015b505b602454151580156200357e5750603054600160a01b900460ff165b15620036085760305460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015620035e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200360691906200496f565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200364e91815260200190565b60405180910390a3506001949350505050565b6032805460ff19166001179055601a5460315460009162003682916200475b565b8211620036905781620036d5565b601954620036a09060026200475b565b8283601854620036b191906200475b565b620036bd91906200475b565b620036c991906200477d565b620036d59083620047d4565b9050600754811115620036e757506007545b30600090815260096020526040902054811115620037115750306000908152600960205260409020545b6040805160028082526060820183526000926020830190803683370190505090503081600081518110620037495762003749620047ef565b6001600160a01b03928316602091820292909201015260018054835192169183919081106200377c576200377c620047ef565b6001600160a01b03928316602091820292909201015260225460405163791ac94760e01b81524792919091169063791ac94790620037c8908690600090879030904290600401620049d5565b600060405180830381600087803b158015620037e357600080fd5b505af1158015620037f8573d6000803e3d6000fd5b50505050600081476200380c9190620047a0565b90506000601454600f54836200382391906200475b565b6200382f91906200477d565b9050600060145460646200384491906200475b565b6012546011546200385690866200475b565b6200386291906200475b565b6200386e91906200477d565b9050600081601454601154866200388691906200475b565b6200389291906200477d565b6200389e9190620047a0565b9050600060145460105486620038b591906200475b565b620038c191906200477d565b83620038ce8487620047d4565b620038da9190620047d4565b620038e69190620047d4565b620038f29086620047a0565b601e5490915060ff168015620039085750600082115b15620039d957602e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200395f57600080fd5b505af19350505050801562003972575060015b50602f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015620039c457600080fd5b505af193505050508015620039d7575060015b505b801562003a1d57601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562003a1b573d6000803e3d6000fd5b505b831562003a6557601e546040516101009091046001600160a01b0316906108fc8615029086906000818181858888f1935050505015801562003a63573d6000803e3d6000fd5b505b50506032805460ff1916905550505050505050565b600080600460008154811062003a945762003a94620047ef565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa15801562003ae8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b0e9190620047ba565b90506000805b60045481101562003c84576004818154811062003b355762003b35620047ef565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801562003b89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003baf9190620047ba565b92506005818154811062003bc75762003bc7620047ef565b906000526020600020015483111562003bfe576005818154811062003bf05762003bf0620047ef565b906000526020600020015492505b821562003c6f576005818154811062003c1b5762003c1b620047ef565b9060005260206000200154601d5462003c3591906200475b565b601c548460145462003c4891906200475b565b62003c5491906200475b565b62003c6091906200477d565b62003c6c9083620047d4565b91505b8062003c7b8162004913565b91505062003b14565b509392505050565b6032805460ff19166001179055604080516002808252606082018352600092602083019080368337505060015482519293506001600160a01b03169183915060009062003cdd5762003cdd620047ef565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811062003d145762003d14620047ef565b6001600160a01b03928316602091820292909201015260225460405163b6f9de9560e01b815291169063b6f9de9590859062003d5c9060009086908890429060040162004a13565b6000604051808303818588803b15801562003d7657600080fd5b505af115801562003d8b573d6000803e3d6000fd5b50506032805460ff19169055505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159062001bd0575050151592915050565b6001600160a01b03831660009081526009602052604081205462003dff908390620047a0565b6001600160a01b03808616600090815260096020526040808220939093559085168152205462003e31908390620047d4565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062003e869086815260200190565b60405180910390a35060019392505050565b6007548111158062003ec257506001600160a01b0382166000908152600c602052604090205460ff165b62001c605760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640162001032565b600854601c541562003f5257600062003f1d8462003a7a565b9050801562003f505760145462003f3582846200475b565b62003f4191906200477d565b62003f4d9083620047d4565b91505b505b6001600160a01b038316600090815260096020526040902054819062003f7a908490620047d4565b111562003fd85760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840162001032565b505050565b601554602354600091829162004004906001600160a01b03878116911614878787620019fc565b6200401090856200475b565b6200401c91906200477d565b6023549091506001600160a01b038581169116141562004052576001600160a01b0385166000908152600e602052604090204390555b306000908152600960205260409020546200406f908290620047d4565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620040c19085815260200190565b60405180910390a3620040d58184620047a0565b95945050505050565b6023546000906001600160a01b0316331480159062004100575060325460ff16155b8015620041165750603054600160b01b900460ff165b80156200413057506023546001600160a01b038381169116145b8015620010cc575060315430600090815260096020526040902054101592915050565b6023546000906001600160a01b0316331480159062004175575060325460ff16155b801562004184575060285460ff165b8015620041a2575043602c54602d546200419f9190620047d4565b11155b8015620041bc57506023546001600160a01b038381169116145b8015620010cc5750602b5447101592915050565b602b54600254620041eb91906001600160a01b031662003c8c565b43602d55602b54602a54620042019190620047d4565b602a81905560295410156200421b576028805460ff191690555b565b610e8f8062004a4b83390190565b8015158114620015c657600080fd5b600080600080608085870312156200425157600080fd5b84356200425e816200422b565b966020860135965060408601359560600135945092505050565b600060208083528351808285015260005b81811015620042a75785810183015185820160400152820162004289565b81811115620042ba576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114620042e857600080fd5b919050565b600080604083850312156200430157600080fd5b6200430c83620042d0565b946020939093013593505050565b600080604083850312156200432e57600080fd5b50508035926020909101359150565b6000602082840312156200435057600080fd5b8135620013e8816200422b565b600080604083850312156200437157600080fd5b6200437c83620042d0565b91506200438c60208401620042d0565b90509250929050565b600080600060608486031215620043ab57600080fd5b620043b684620042d0565b9250620043c660208501620042d0565b9150604084013590509250925092565b600060208284031215620043e957600080fd5b620013e882620042d0565b6000602082840312156200440757600080fd5b5035919050565b600080604083850312156200442257600080fd5b6200442d83620042d0565b915060208301356200443f816200422b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200448c576200448c6200444a565b604052919050565b600067ffffffffffffffff821115620044b157620044b16200444a565b5060051b60200190565b600082601f830112620044cd57600080fd5b81356020620044e6620044e08362004494565b62004460565b82815260059290921b840181019181810190868411156200450657600080fd5b8286015b848110156200452357803583529183019183016200450a565b509695505050505050565b600080604083850312156200454257600080fd5b823567ffffffffffffffff808211156200455b57600080fd5b818501915085601f8301126200457057600080fd5b8135602062004583620044e08362004494565b82815260059290921b84018101918181019089841115620045a357600080fd5b948201945b83861015620045cc57620045bc86620042d0565b82529482019490820190620045a8565b96505086013592505080821115620045e357600080fd5b50620045f285828601620044bb565b9150509250929050565b600080600080608085870312156200461357600080fd5b843562004620816200422b565b93506200463060208601620042d0565b92506200464060408601620042d0565b9396929550929360600135925050565b600080604083850312156200466457600080fd5b8235915060208301356200443f816200422b565b60008060008060008060c087890312156200469257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060008060808587031215620046d357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156200470357600080fd5b82356200430c816200422b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562004778576200477862004745565b500290565b6000826200479b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015620047b557620047b562004745565b500390565b600060208284031215620047cd57600080fd5b5051919050565b60008219821115620047ea57620047ea62004745565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115620048465781600019048211156200482a576200482a62004745565b808516156200483857918102915b93841c93908002906200480a565b509250929050565b6000826200485f57506001620010cc565b816200486e57506000620010cc565b81600181146200488757600281146200489257620048b2565b6001915050620010cc565b60ff841115620048a657620048a662004745565b50506001821b620010cc565b5060208310610133831016604e8410600b8410161715620048d7575081810a620010cc565b620048e3838362004805565b8060001904821115620048fa57620048fa62004745565b029392505050565b6000620013e860ff8416836200484e565b60006000198214156200492a576200492a62004745565b5060010190565b6020808252600e908201526d0a8c2f0cae640e8dede40d0d2ced60931b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156200498257600080fd5b8151620013e8816200422b565b600081518084526020808501945080840160005b83811015620049ca5781516001600160a01b031687529582019590820190600101620049a3565b509495945050505050565b85815284602082015260a060408201526000620049f660a08301866200498f565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600062004a2e60808301866200498f565b6001600160a01b0394909416604083015250606001529291505056fe60806040526ec097ce7bc90715b34b9f1000000000600a5562015180600b5566038d7ea4c68000600c55600d805460ff60a01b1916905534801561004257600080fd5b50610e3d806100526000396000f3fe6080604052600436106101355760003560e01c806366817df5116100ab578063ce7c2ac21161006f578063ce7c2ac214610309578063d0e30db01461036b578063e2d2e21914610373578063eeb77fd414610389578063efca2eed146103a9578063ffd49c84146103bf57600080fd5b806366817df5146102875780636793141f146102b45780638129fc1c146102c9578063997664d7146102de5780639df62df2146102f457600080fd5b80632d48e896116100fd5780632d48e896146101e55780633a98ef39146102055780633cbf8a611461021b57806342685d741461023b5780634fab0ae8146102515780635a3f21311461026757600080fd5b806311ce023d1461013a5780631329f8621461016357806314b6ca961461018357806315f7e05e146101a557806328fd3198146101c5575b600080fd5b34801561014657600080fd5b50610150600a5481565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061015061017e366004610ce7565b6103d5565b34801561018f57600080fd5b506101a361019e366004610d09565b610470565b005b3480156101b157600080fd5b506101a36101c0366004610ce7565b610721565b3480156101d157600080fd5b506101506101e0366004610ce7565b6107af565b3480156101f157600080fd5b506101a3610200366004610d33565b610850565b34801561021157600080fd5b5061015060055481565b34801561022757600080fd5b50610150610236366004610ce7565b610872565b34801561024757600080fd5b5061015060085481565b34801561025d57600080fd5b50610150600c5481565b34801561027357600080fd5b50610150610282366004610ce7565b6108a9565b34801561029357600080fd5b506101506102a2366004610ce7565b60036020526000908152604090205481565b3480156102c057600080fd5b506101506108e0565b3480156102d557600080fd5b506101a36108ff565b3480156102ea57600080fd5b5061015060065481565b34801561030057600080fd5b5061015061093d565b34801561031557600080fd5b5061034b610324366004610ce7565b60046020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161015a565b6101a361095c565b34801561037f57600080fd5b5061015060095481565b34801561039557600080fd5b506101a36103a4366004610ce7565b6109a3565b3480156103b557600080fd5b5061015060075481565b3480156103cb57600080fd5b50610150600b5481565b600080546001600160a01b031633146103ed57600080fd5b600b546001600160a01b038316600090815260036020526040902054429161041491610d6b565b11158061042a5750600d54600160a01b900460ff165b1561043757506000919050565b600b546001600160a01b038316600090815260036020526040902054429161045e91610d6b565b6104689190610d83565b90505b919050565b6000546001600160a01b0316331461048757600080fd5b6000811180156104ad57506001600160a01b038216600090815260046020526040902054155b1561054557600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055610516816109ff565b6001600160a01b0383166000908152600460209081526040808320600101939093556003905220429055610578565b8015801561056a57506001600160a01b03821660009081526004602052604090205415155b156105785761057882610a2e565b6001600160a01b03821660009081526004602052604081205482119061059d846107af565b9050811561061b576105af8482610b41565b156105be576105be8482610bea565b6001600160a01b0384166000908152600460205260409020546105ea906105e59085610d83565b6109ff565b6001600160a01b03851660009081526004602052604081206001018054909190610615908490610d6b565b90915550505b6001600160a01b038416600090815260046020526040902054600554849161064291610d83565b61064c9190610d6b565b6005556001600160a01b03841660009081526004602052604090208390558161071b578047101561067a5750475b806008546106889190610d6b565b6008556001600160a01b038416600090815260046020526040812060030180548392906106b6908490610d6b565b9091555050600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156106f4573d6000803e3d6000fd5b506106fe836109ff565b6001600160a01b0385166000908152600460205260409020600101555b50505050565b6000546001600160a01b0316331461073857600080fd5b61074a81610745836107af565b610b41565b61079a5760405162461bcd60e51b815260206004820152601b60248201527f4469766964656e6473206e6f7420617661696c61626c65207965740000000000604482015260640160405180910390fd5b6107ac816107a7836107af565b610bea565b50565b600080546001600160a01b031633146107c757600080fd5b6001600160a01b0382166000908152600460205260409020546107ec57506000919050565b6001600160a01b03821660009081526004602052604081205461080e906109ff565b6001600160a01b03841660009081526004602052604090206001015490915080821161083e575060009392505050565b6108488183610d83565b949350505050565b6000546001600160a01b0316331461086757600080fd5b600b91909155600c55565b600080546001600160a01b0316331461088a57600080fd5b506001600160a01b031660009081526004602052604090206002015490565b600080546001600160a01b031633146108c157600080fd5b506001600160a01b031660009081526004602052604090206003015490565b600080546001600160a01b031633146108f857600080fd5b5060075490565b600d54600160a81b900460ff161561091657600080fd5b600080546001600160a01b03191633179055600d805460ff60a81b1916600160a81b179055565b600080546001600160a01b0316331461095557600080fd5b5060015490565b600654349061096c908290610d6b565b600655600554600a54610980908390610d9a565b61098a9190610db9565b6009600082825461099b9190610d6b565b909155505050565b6000546001600160a01b031633146109ba57600080fd5b600d54600160a01b900460ff16156109d157600080fd5b600d80546001600160a81b0319166001600160a01b0390921691909117600160a01b17905562093a80600b55565b600081610a0e57506000919050565b600a54600954610a1e9084610d9a565b610a289190610db9565b92915050565b60018054610a3d908290610d83565b81548110610a4d57610a4d610ddb565b60009182526020808320909101546001600160a01b0384811684526002909252604090922054600180549290931692918110610a8b57610a8b610ddb565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260029182905260408120546001805491939291610ad6908290610d83565b81548110610ae657610ae6610ddb565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610b1c57610b1c610df1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600d54600090600160a01b900460ff16610b9157600b546001600160a01b0384166000908152600360205260409020544291610b7c91610d6b565b108015610b8a5750600c5482115b9050610a28565b62093a80610ba3636220adc042610d83565b610bad9190610db9565b610bba9062093a80610d9a565b610bc890636220adc0610d6b565b6001600160a01b03841660009081526003602052604090205410905092915050565b6001600160a01b038216600090815260046020526040902054610c0b575050565b8015610ccc5780600754610c1f9190610d6b565b6007556001600160a01b03821660009081526003602090815260408083204290556004909152902060020154610c56908290610d6b565b6001600160a01b0383166000908152600460205260409020600281019190915554610c80906109ff565b6001600160a01b038316600081815260046020526040808220600101939093559151909183156108fc02918491818181858888f19350505050158015610cca573d6000803e3d6000fd5b505b5050565b80356001600160a01b038116811461046b57600080fd5b600060208284031215610cf957600080fd5b610d0282610cd0565b9392505050565b60008060408385031215610d1c57600080fd5b610d2583610cd0565b946020939093013593505050565b60008060408385031215610d4657600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b60008219821115610d7e57610d7e610d55565b500190565b600082821015610d9557610d95610d55565b500390565b6000816000190483118215151615610db457610db4610d55565b500290565b600082610dd657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122099586d3f844cdfe3f8eb18f5218eee11f388a24d3485f39813f1938c705262da64736f6c634300080b0033a26469706673582212207aab0d07b4581e45527a502f3d0679fd86ae756e2ac723616248855bffe07af064736f6c634300080b0033000000000000000000000000122817e1f550a668f5e578a88f542a3673d4764200000000000000000000000080bb8fb3485ba241d15f21cbb1aa0416f87ac695

Deployed Bytecode

0x608060405260043610620004cb5760003560e01c8063844eb202116200027b578063ba0bba401162000153578063d8573b8411620000c5578063f2fde38b1162000084578063f2fde38b1462000f5c578063f708a64f1462000f81578063f84ba65d1462000fa6578063f887ea401462000fcb578063f8a251461462000fed57600080fd5b8063d8573b841462000e8b578063db78ee2f1462000eb0578063dd62ed3e1462000ec8578063df20fd491462000f12578063f14fd1011462000f3757600080fd5b8063c5363caa1162000112578063c5363caa1462000dd4578063ceafd6da1462000df7578063d08aa7eb1462000e1c578063d51ed1c81462000e41578063d5d035f51462000e6657600080fd5b8063ba0bba401462000d16578063ba3194ed1462000d2e578063be12ac2f1462000d82578063bf56b3711462000d9a578063bfe109281462000db257600080fd5b8063a4b45c0011620001ed578063aceac85611620001ac578063aceac8561462000c50578063ae6093801462000ca3578063b04c1e021462000cc4578063b210b06d1462000ce6578063b930e0311462000cfe57600080fd5b8063a4b45c001462000ba3578063a519121a1462000bc8578063a8aa1b311462000be4578063a9059cbb1462000c06578063abe57e701462000c2b57600080fd5b80638c19ec8b116200023a5780638c19ec8b1462000b0f5780638da5cb5b1462000abb5780638f9a55c01462000b3457806391f915451462000b4c57806395d89b411462000b7157600080fd5b8063844eb2021462000a4357806386f6c3c11462000a5b578063882cfb3f1462000a80578063893d20e81462000abb5780638b42507f1462000adb57600080fd5b80633eedc8c911620003af578063676881fe11620003215780637516baec11620002e05780637516baec14620009a657806377cf1ce014620009c95780637c446b6714620009ee5780637d1db4a51462000a0657806382334b941462000a1e57600080fd5b8063676881fe14620008f45780636844e45a146200090c5780636ddd1713146200093157806370a082311462000954578063715018a6146200098e57600080fd5b8063571ac8b0116200036e578063571ac8b014620008485780635804f1e4146200086d57806361bd34851462000885578063658d4b7f14620008aa5780636724348214620008cf57600080fd5b80633eedc8c914620007985780633f4218e014620007b0578063421dd7c714620007e45780634355855a14620007fc5780634567c058146200083057600080fd5b806320aa655911620004495780632d4efa4711620004085780632d4efa4714620007095780632ff83b4c146200072e578063313ce5671462000746578063372500ab14620007645780633bb8a8d4146200077c57600080fd5b806320aa6559146200064757806323b872dd146200066c5780632403975414620006915780632b112e4914620006cc5780632d48e89614620006e457600080fd5b80631161ae3911620004965780631161ae39146200059c57806318160ddd14620005c15780631a6e937d14620005d85780631faf723b14620005fd578063201e7991146200062257600080fd5b80630445b66714620004d8578063048c7baf146200050357806306fdde03146200052a578063095ea7b3146200056657600080fd5b36620004d357005b600080fd5b348015620004e557600080fd5b50620004f060315481565b6040519081526020015b60405180910390f35b3480156200051057600080fd5b5062000528620005223660046200423a565b62001005565b005b3480156200053757600080fd5b5060408051808201909152600781526626b537b63734b960c91b60208201525b604051620004fa919062004278565b3480156200057357600080fd5b506200058b62000585366004620042ed565b62001064565b6040519015158152602001620004fa565b348015620005a957600080fd5b506200058b620005bb3660046200431a565b620010d2565b348015620005ce57600080fd5b50600654620004f0565b348015620005e557600080fd5b5062000528620005f73660046200433d565b620010e8565b3480156200060a57600080fd5b50620005286200061c3660046200431a565b6200112f565b3480156200062f57600080fd5b5062000528620006413660046200431a565b620011aa565b3480156200065457600080fd5b5062000528620006663660046200435d565b620011e2565b3480156200067957600080fd5b506200058b6200068b36600462004395565b62001355565b3480156200069e57600080fd5b50620006b6620006b0366004620043d6565b620013ef565b60408051928352602083019190915201620004fa565b348015620006d957600080fd5b50620004f0620014de565b348015620006f157600080fd5b5062000528620007033660046200431a565b62001528565b3480156200071657600080fd5b506200052862000728366004620043f4565b6200158e565b3480156200073b57600080fd5b50620004f060165481565b3480156200075357600080fd5b5060405160098152602001620004fa565b3480156200077157600080fd5b5062000528620015c9565b3480156200078957600080fd5b506028546200058b9060ff1681565b348015620007a557600080fd5b50620004f060195481565b348015620007bd57600080fd5b506200058b620007cf366004620043d6565b600b6020526000908152604090205460ff1681565b348015620007f157600080fd5b5062000528620016e1565b3480156200080957600080fd5b506200058b6200081b366004620043d6565b600d6020526000908152604090205460ff1681565b3480156200083d57600080fd5b50620004f0601c5481565b3480156200085557600080fd5b506200058b62000867366004620043d6565b62001723565b3480156200087a57600080fd5b50620004f060255481565b3480156200089257600080fd5b50620004f0620008a4366004620043d6565b62001733565b348015620008b757600080fd5b5062000528620008c93660046200440e565b62001740565b348015620008dc57600080fd5b5062000528620008ee3660046200452e565b62001798565b3480156200090157600080fd5b50620004f060175481565b3480156200091957600080fd5b50620005286200092b3660046200431a565b62001911565b3480156200093e57600080fd5b506030546200058b90600160b01b900460ff1681565b3480156200096157600080fd5b50620004f062000973366004620043d6565b6001600160a01b031660009081526009602052604090205490565b3480156200099b57600080fd5b506200052862001985565b348015620009b357600080fd5b506030546200058b90600160a01b900460ff1681565b348015620009d657600080fd5b50620004f0620009e8366004620045fc565b620019fc565b348015620009fb57600080fd5b50620004f060185481565b34801562000a1357600080fd5b50620004f060075481565b34801562000a2b57600080fd5b506200052862000a3d36600462004650565b62001bd8565b34801562000a5057600080fd5b50620004f0601a5481565b34801562000a6857600080fd5b506200052862000a7a36600462004678565b62001c64565b34801562000a8d57600080fd5b5060305462000aa2906001600160a01b031681565b6040516001600160a01b039091168152602001620004fa565b34801562000ac857600080fd5b506000546001600160a01b031662000aa2565b34801562000ae857600080fd5b506200058b62000afa366004620043d6565b600c6020526000908152604090205460ff1681565b34801562000b1c57600080fd5b506200052862000b2e3660046200433d565b62001d51565b34801562000b4157600080fd5b50620004f060085481565b34801562000b5957600080fd5b506200052862000b6b366004620042ed565b62001d91565b34801562000b7e57600080fd5b5060408051808201909152600781526626a527a62724a960c91b602082015262000557565b34801562000bb057600080fd5b506200052862000bc23660046200435d565b62001e5c565b34801562000bd557600080fd5b50601e546200058b9060ff1681565b34801562000bf157600080fd5b5060235462000aa2906001600160a01b031681565b34801562000c1357600080fd5b506200058b62000c25366004620042ed565b62001ec1565b34801562000c3857600080fd5b506200052862000c4a3660046200431a565b62001ed0565b34801562000c5d57600080fd5b5062000c7562000c6f366004620043d6565b62001f4b565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001620004fa565b34801562000cb057600080fd5b506028546200058b90610100900460ff1681565b34801562000cd157600080fd5b50602f5462000aa2906001600160a01b031681565b34801562000cf357600080fd5b506200052862002213565b34801562000d0b57600080fd5b50620004f0601b5481565b34801562000d2357600080fd5b506200052862002247565b34801562000d3b57600080fd5b5062000d46620023ef565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001620004fa565b34801562000d8f57600080fd5b50620004f0601d5481565b34801562000da757600080fd5b50620004f060245481565b34801562000dbf57600080fd5b50602e5462000aa2906001600160a01b031681565b34801562000de157600080fd5b506030546200058b90600160a81b900460ff1681565b34801562000e0457600080fd5b506200052862000e163660046200433d565b620027e5565b34801562000e2957600080fd5b506200052862000e3b3660046200431a565b6200284f565b34801562000e4e57600080fd5b50620004f062000e60366004620043f4565b620028ae565b34801562000e7357600080fd5b506200052862000e853660046200440e565b620028fa565b34801562000e9857600080fd5b506200052862000eaa366004620046bc565b620029b9565b34801562000ebd57600080fd5b506200052862002a46565b34801562000ed557600080fd5b50620004f062000ee73660046200435d565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801562000f1f57600080fd5b506200052862000f31366004620046ef565b62002ad5565b34801562000f4457600080fd5b506200052862000f5636600462004650565b62002b3e565b34801562000f6957600080fd5b506200052862000f7b366004620043d6565b62002c32565b34801562000f8e57600080fd5b506200052862000fa03660046200440e565b62002d21565b34801562000fb357600080fd5b506200052862000fc53660046200440e565b62002f48565b34801562000fd857600080fd5b5060225462000aa2906001600160a01b031681565b34801562000ffa57600080fd5b506200052862002fa0565b6000546001600160a01b031633146200103b5760405162461bcd60e51b8152600401620010329062004710565b60405180910390fd5b6028805460ff1916941515949094179093556029919091556000602a55602b55602c5543602d55565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620010c09086815260200190565b60405180910390a35060015b92915050565b600082620010e083620028ae565b119392505050565b6000546001600160a01b03163314620011155760405162461bcd60e51b8152600401620010329062004710565b602880549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146200115c5760405162461bcd60e51b8152600401620010329062004710565b6000821180156200116d5750600081115b80156200117c57506127108111155b6200118657600080fd5b80826006546200119791906200475b565b620011a391906200477d565b6007555050565b6000546001600160a01b03163314620011d75760405162461bcd60e51b8152600401620010329062004710565b602091909155602155565b6000546001600160a01b031633146200120f5760405162461bcd60e51b8152600401620010329062004710565b602e80546001600160a01b0319166001600160a01b0384169081179091556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b5050602f80546001600160a01b0319166001600160a01b0385169081179091556040805163204a7f0760e21b81529051919350638129fc1c925060048082019260009290919082900301818387803b158015620012d657600080fd5b505af1158015620012eb573d6000803e3d6000fd5b5050602f54604051633baddff560e21b81526001600160a01b038681166004830152909116925063eeb77fd491506024015b600060405180830381600087803b1580156200133857600080fd5b505af11580156200134d573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914620013d8576001600160a01b0384166000908152600a60209081526040808320338452909152902054620013b3908390620047a0565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b620013e584848462003087565b90505b9392505050565b602e54604051630994fc3160e11b81526001600160a01b0383811660048301526000928392911690631329f86290602401602060405180830381865afa1580156200143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014649190620047ba565b602f54604051630994fc3160e11b81526001600160a01b038681166004830152929450911690631329f86290602401602060405180830381865afa158015620014b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014d79190620047ba565b9050915091565b6003546001600160a01b0390811660009081526009602052604080822054600254909316825281205490916200151491620047d4565b600654620015239190620047a0565b905090565b6000546001600160a01b03163314620015555760405162461bcd60e51b8152600401620010329062004710565b602e546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044016200131d565b6000546001600160a01b03163314620015bb5760405162461bcd60e51b8152600401620010329062004710565b620015c68162003661565b50565b602e54604051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa15801562001612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016389190620047ba565b156200167f5760405162461bcd60e51b815260206004820152601560248201527414995dd85c991cc81b9bdd081c9958591e481e595d605a1b604482015260640162001032565b602e54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e906024015b600060405180830381600087803b158015620016c657600080fd5b505af1158015620016db573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146200170e5760405162461bcd60e51b8152600401620010329062004710565b6030805460ff60a81b1916600160a81b179055565b6000620010cc8260001962001064565b6000620010cc8262003a7a565b6000546001600160a01b031633146200176d5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620017c55760405162461bcd60e51b8152600401620010329062004710565b60008251118015620017d8575060008151115b8015620017e6575080518251145b620017f057600080fd5b3360005b8351811015620016db576200183a848281518110620018175762001817620047ef565b60200260200101516001600160a01b031660009081526009602052604090205490565b620018fc576001600d60008684815181106200185a576200185a620047ef565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550620018fa82858381518110620018b357620018b3620047ef565b60200260200101516009600a620018cb919062004902565b868581518110620018e057620018e0620047ef565b6020026020010151620018f491906200475b565b62003087565b505b80620019088162004913565b915050620017f4565b6000546001600160a01b031633146200193e5760405162461bcd60e51b8152600401620010329062004710565b6000811180156200195b575060036200195882846200477d565b11155b6200197a5760405162461bcd60e51b8152600401620010329062004931565b601691909155601755565b6000546001600160a01b03163314620019b25760405162461bcd60e51b8152600401620010329062004710565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600043602454600262001a109190620047d4565b111562001a3057600160155462001a289190620047a0565b905062001bd0565b841562001b0057601a5460315462001a4991906200475b565b821115801562001a7f5750601b546001600160a01b0385166000908152600e6020526040902054439162001a7d91620047d4565b105b1562001aa65760175460165460145462001a9a91906200475b565b62001a2891906200477d565b60195460185460145462001abb90856200475b565b62001ac791906200475b565b62001ad391906200477d565b60175460165460145462001ae891906200475b565b62001af491906200477d565b62001a289190620047d4565b6000601954600262001b1391906200475b565b601854601454601a5462001b2890876200475b565b62001b3491906200475b565b62001b4091906200475b565b62001b4c91906200477d565b9050601c546000148062001b7857506001600160a01b0384166000908152600d602052604090205460ff165b1562001b97578060145462001b8e9190620047d4565b91505062001bd0565b80600262001ba58662003a7a565b62001bb191906200477d565b60145462001bc09190620047a0565b62001bcc9190620047d4565b9150505b949350505050565b6000546001600160a01b0316331462001c055760405162461bcd60e51b8152600401620010329062004710565b60025462001c1e9083906001600160a01b031662003c8c565b801562001c6057426026556027546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b5050565b6000546001600160a01b0316331462001c915760405162461bcd60e51b8152600401620010329062004710565b605081111562001cda5760405162461bcd60e51b8152602060048201526013602482015272084dedceae640e0deded840e8dede40d0d2ced606b1b604482015260640162001032565b6012819055600f869055601085905560118490556013839055828462001d018789620047d4565b62001d0d9190620047d4565b62001d199190620047d4565b601455601582905562001d2e6004836200477d565b601454106200134d5760405162461bcd60e51b8152600401620010329062004931565b6000546001600160a01b0316331462001d7e5760405162461bcd60e51b8152600401620010329062004710565b601e805460ff1916911515919091179055565b6000546001600160a01b0316331462001dbe5760405162461bcd60e51b8152600401620010329062004710565b62001dd2826001600160a01b031662003d9f565b62001ddc57600080fd5b6004805460018082019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0394909416939093179092556005805492830181556000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910155565b6000546001600160a01b0316331462001e895760405162461bcd60e51b8152600401620010329062004710565b601e8054610100600160a81b0319166101006001600160a01b0394851602179055601f80546001600160a01b03191691909216179055565b6000620013e833848462003087565b6000546001600160a01b0316331462001efd5760405162461bcd60e51b8152600401620010329062004710565b60008211801562001f0e5750600081115b801562001f1d57506127108111155b62001f2757600080fd5b808260065462001f3891906200475b565b62001f4491906200477d565b6008555050565b602e5460405163051fa63360e31b81526001600160a01b03838116600483015260009283928392839283928392909116906328fd319890602401602060405180830381865afa15801562001fa3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fc99190620047ba565b602f5460405163051fa63360e31b81526001600160a01b038a811660048301529298509116906328fd319890602401602060405180830381865afa15801562002016573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200203c9190620047ba565b602e54604051633cbf8a6160e01b81526001600160a01b038a81166004830152929750911690633cbf8a6190602401602060405180830381865afa15801562002089573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020af9190620047ba565b602f54604051633cbf8a6160e01b81526001600160a01b038a81166004830152929650911690633cbf8a6190602401602060405180830381865afa158015620020fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021229190620047ba565b602e54604051635a3f213160e01b81526001600160a01b038a81166004830152929550911690635a3f213190602401602060405180830381865afa1580156200216f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021959190620047ba565b602f54604051635a3f213160e01b81526001600160a01b038a81166004830152929450911690635a3f213190602401602060405180830381865afa158015620021e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022089190620047ba565b905091939550919395565b6000546001600160a01b03163314620022405760405162461bcd60e51b8152600401620010329062004710565b6000602655565b6000546001600160a01b03163314620022745760405162461bcd60e51b8152600401620010329062004710565b602454156200228257600080fd5b60405162002290906200421d565b604051809103906000f080158015620022ad573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b039290921691821790556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200230557600080fd5b505af11580156200231a573d6000803e3d6000fd5b505050506040516200232c906200421d565b604051809103906000f08015801562002349573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b039290921691821790556040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b158015620023a157600080fd5b505af1158015620023b6573d6000803e3d6000fd5b5050602f54602e54604051633baddff560e21b81526001600160a01b0391821660048201529116925063eeb77fd49150602401620016ab565b600080600080600080600080602e60009054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200244f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024759190620047ba565b9750602e60009054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620024cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620024f19190620047ba565b9650602e60009054906101000a90046001600160a01b03166001600160a01b03166342685d746040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002547573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200256d9190620047ba565b9550602f60009054906101000a90046001600160a01b03166001600160a01b031663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620025c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025e99190620047ba565b9450602f60009054906101000a90046001600160a01b03166001600160a01b031663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200263f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026659190620047ba565b9350602f60009054906101000a90046001600160a01b03166001600160a01b03166342685d746040518163ffffffff1660e01b8152600401602060405180830381865afa158015620026bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026e19190620047ba565b9250602e60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002737573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200275d9190620047ba565b9150602f60009054906101000a90046001600160a01b03166001600160a01b0316639df62df26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027d99190620047ba565b90509091929394959697565b6000546001600160a01b03163314620028125760405162461bcd60e51b8152600401620010329062004710565b80156200283157603054600160a81b900460ff16156200283157600080fd5b60308054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146200287c5760405162461bcd60e51b8152600401620010329062004710565b60008111801562002899575060016200289682846200477d565b11155b620028a357600080fd5b601c91909155601d55565b6000620028ba620014de565b6023546001600160a01b0316600090815260096020526040902054620028e190846200475b565b620028ee9060026200475b565b620010cc91906200477d565b6000546001600160a01b03163314620029275760405162461bcd60e51b8152600401620010329062004710565b6030546001600160a01b038381169116146200297157603054600160a81b900460ff16156200295557600080fd5b603080546001600160a01b0319166001600160a01b0384161790555b801562001c6057603054602354604051633d42475360e01b81523360048201523060248201526001600160a01b039182166044820152911690633d424753906064016200131d565b6000546001600160a01b03163314620029e65760405162461bcd60e51b8152600401620010329062004710565b60008311801562002a035750600362002a0084866200477d565b11155b62002a225760405162461bcd60e51b8152600401620010329062004931565b601884905560075462002a3690846200475b565b601955601a91909155601b555050565b6000546001600160a01b0316331462002a735760405162461bcd60e51b8152600401620010329062004710565b600480548062002a875762002a8762004959565b600082815260209020810160001990810180546001600160a01b0319169055019055600580548062002abd5762002abd62004959565b60019003818190600052602060002001600090559055565b6000546001600160a01b0316331462002b025760405162461bcd60e51b8152600401620010329062004710565b6000811162002b1057600080fd5b6030805460ff60b01b1916600160b01b8415150217905560065462002b379082906200477d565b6031555050565b6000546001600160a01b0316331462002b6b5760405162461bcd60e51b8152600401620010329062004710565b801562002be157602f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002bc357600080fd5b505af115801562002bd8573d6000803e3d6000fd5b50505050505050565b602e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002bc357600080fd5b6000546001600160a01b0316331462002c5f5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03811662002cc65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162001032565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462002d4e5760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b038216301480159062002d7657506023546001600160a01b03838116911614155b801562002d9157506002546001600160a01b03838116911614155b801562002dac57506000546001600160a01b03838116911614155b62002db657600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915562002e8657602e54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b15801562002e3357600080fd5b505af115801562002e48573d6000803e3d6000fd5b5050602f54604051630a5b654b60e11b81526001600160a01b0386811660048301526000602483015290911692506314b6ca9691506044016200131d565b602e546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801562002ee557600080fd5b505af115801562002efa573d6000803e3d6000fd5b5050602f546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b815260048101929092526024820152911692506314b6ca9691506044016200131d565b6000546001600160a01b0316331462002f755760405162461bcd60e51b8152600401620010329062004710565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b602f54604051630994fc3160e11b81523360048201526001600160a01b0390911690631329f86290602401602060405180830381865afa15801562002fe9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200300f9190620047ba565b15620030565760405162461bcd60e51b815260206004820152601560248201527414995dd85c991cc81b9bdd081c9958591e481e595d605a1b604482015260640162001032565b602f54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401620016ab565b6000808211620030da5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20616d6f756e74207472616e73666572726564000000000000000000604482015260640162001032565b6001600160a01b0384166000908152600960205260409020548211156200313b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640162001032565b60325460ff16156200315c576200315484848462003dd9565b9050620013e8565b62003168848362003e98565b6023546001600160a01b038481169116148015906200319557506002546001600160a01b03848116911614155b15620031c8576001600160a01b0383166000908152600c602052604090205460ff16620031c857620031c8838362003f04565b602454158015620031e657506023546001600160a01b038481169116145b1562003259576000546001600160a01b038581169116146200324b5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000604482015260640162001032565b620032594360245542602555565b6001600160a01b0384166000908152600960205260409020546200327f908390620047a0565b6001600160a01b038516600090815260096020908152604080832093909355600b90529081205460ff1615620032b65782620032c3565b620032c385858562003fdd565b6001600160a01b0385166000908152600b602052604090205490915060ff166200331e57620032f284620040de565b156200330357620033038362003661565b6200330e8462004153565b156200331e576200331e620041d0565b6001600160a01b03841660009081526009602052604090205462003344908290620047d4565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600d909152205460ff166200345d57602e546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620033d757600080fd5b505af1925050508015620033e9575060015b50602f546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200344957600080fd5b505af19250505080156200345b575060015b505b6001600160a01b0384166000908152600d602052604090205460ff166200356357602e546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620034dd57600080fd5b505af1925050508015620034ef575060015b50602f546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200354f57600080fd5b505af192505050801562003561575060015b505b602454151580156200357e5750603054600160a01b900460ff165b15620036085760305460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015620035e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200360691906200496f565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200364e91815260200190565b60405180910390a3506001949350505050565b6032805460ff19166001179055601a5460315460009162003682916200475b565b8211620036905781620036d5565b601954620036a09060026200475b565b8283601854620036b191906200475b565b620036bd91906200475b565b620036c991906200477d565b620036d59083620047d4565b9050600754811115620036e757506007545b30600090815260096020526040902054811115620037115750306000908152600960205260409020545b6040805160028082526060820183526000926020830190803683370190505090503081600081518110620037495762003749620047ef565b6001600160a01b03928316602091820292909201015260018054835192169183919081106200377c576200377c620047ef565b6001600160a01b03928316602091820292909201015260225460405163791ac94760e01b81524792919091169063791ac94790620037c8908690600090879030904290600401620049d5565b600060405180830381600087803b158015620037e357600080fd5b505af1158015620037f8573d6000803e3d6000fd5b50505050600081476200380c9190620047a0565b90506000601454600f54836200382391906200475b565b6200382f91906200477d565b9050600060145460646200384491906200475b565b6012546011546200385690866200475b565b6200386291906200475b565b6200386e91906200477d565b9050600081601454601154866200388691906200475b565b6200389291906200477d565b6200389e9190620047a0565b9050600060145460105486620038b591906200475b565b620038c191906200477d565b83620038ce8487620047d4565b620038da9190620047d4565b620038e69190620047d4565b620038f29086620047a0565b601e5490915060ff168015620039085750600082115b15620039d957602e60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200395f57600080fd5b505af19350505050801562003972575060015b50602f60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015620039c457600080fd5b505af193505050508015620039d7575060015b505b801562003a1d57601f546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562003a1b573d6000803e3d6000fd5b505b831562003a6557601e546040516101009091046001600160a01b0316906108fc8615029086906000818181858888f1935050505015801562003a63573d6000803e3d6000fd5b505b50506032805460ff1916905550505050505050565b600080600460008154811062003a945762003a94620047ef565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038581166004830152909116906370a0823190602401602060405180830381865afa15801562003ae8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b0e9190620047ba565b90506000805b60045481101562003c84576004818154811062003b355762003b35620047ef565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa15801562003b89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003baf9190620047ba565b92506005818154811062003bc75762003bc7620047ef565b906000526020600020015483111562003bfe576005818154811062003bf05762003bf0620047ef565b906000526020600020015492505b821562003c6f576005818154811062003c1b5762003c1b620047ef565b9060005260206000200154601d5462003c3591906200475b565b601c548460145462003c4891906200475b565b62003c5491906200475b565b62003c6091906200477d565b62003c6c9083620047d4565b91505b8062003c7b8162004913565b91505062003b14565b509392505050565b6032805460ff19166001179055604080516002808252606082018352600092602083019080368337505060015482519293506001600160a01b03169183915060009062003cdd5762003cdd620047ef565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811062003d145762003d14620047ef565b6001600160a01b03928316602091820292909201015260225460405163b6f9de9560e01b815291169063b6f9de9590859062003d5c9060009086908890429060040162004a13565b6000604051808303818588803b15801562003d7657600080fd5b505af115801562003d8b573d6000803e3d6000fd5b50506032805460ff19169055505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159062001bd0575050151592915050565b6001600160a01b03831660009081526009602052604081205462003dff908390620047a0565b6001600160a01b03808616600090815260096020526040808220939093559085168152205462003e31908390620047d4565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062003e869086815260200190565b60405180910390a35060019392505050565b6007548111158062003ec257506001600160a01b0382166000908152600c602052604090205460ff165b62001c605760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640162001032565b600854601c541562003f5257600062003f1d8462003a7a565b9050801562003f505760145462003f3582846200475b565b62003f4191906200477d565b62003f4d9083620047d4565b91505b505b6001600160a01b038316600090815260096020526040902054819062003f7a908490620047d4565b111562003fd85760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b606482015260840162001032565b505050565b601554602354600091829162004004906001600160a01b03878116911614878787620019fc565b6200401090856200475b565b6200401c91906200477d565b6023549091506001600160a01b038581169116141562004052576001600160a01b0385166000908152600e602052604090204390555b306000908152600960205260409020546200406f908290620047d4565b30600081815260096020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620040c19085815260200190565b60405180910390a3620040d58184620047a0565b95945050505050565b6023546000906001600160a01b0316331480159062004100575060325460ff16155b8015620041165750603054600160b01b900460ff165b80156200413057506023546001600160a01b038381169116145b8015620010cc575060315430600090815260096020526040902054101592915050565b6023546000906001600160a01b0316331480159062004175575060325460ff16155b801562004184575060285460ff165b8015620041a2575043602c54602d546200419f9190620047d4565b11155b8015620041bc57506023546001600160a01b038381169116145b8015620010cc5750602b5447101592915050565b602b54600254620041eb91906001600160a01b031662003c8c565b43602d55602b54602a54620042019190620047d4565b602a81905560295410156200421b576028805460ff191690555b565b610e8f8062004a4b83390190565b8015158114620015c657600080fd5b600080600080608085870312156200425157600080fd5b84356200425e816200422b565b966020860135965060408601359560600135945092505050565b600060208083528351808285015260005b81811015620042a75785810183015185820160400152820162004289565b81811115620042ba576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114620042e857600080fd5b919050565b600080604083850312156200430157600080fd5b6200430c83620042d0565b946020939093013593505050565b600080604083850312156200432e57600080fd5b50508035926020909101359150565b6000602082840312156200435057600080fd5b8135620013e8816200422b565b600080604083850312156200437157600080fd5b6200437c83620042d0565b91506200438c60208401620042d0565b90509250929050565b600080600060608486031215620043ab57600080fd5b620043b684620042d0565b9250620043c660208501620042d0565b9150604084013590509250925092565b600060208284031215620043e957600080fd5b620013e882620042d0565b6000602082840312156200440757600080fd5b5035919050565b600080604083850312156200442257600080fd5b6200442d83620042d0565b915060208301356200443f816200422b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156200448c576200448c6200444a565b604052919050565b600067ffffffffffffffff821115620044b157620044b16200444a565b5060051b60200190565b600082601f830112620044cd57600080fd5b81356020620044e6620044e08362004494565b62004460565b82815260059290921b840181019181810190868411156200450657600080fd5b8286015b848110156200452357803583529183019183016200450a565b509695505050505050565b600080604083850312156200454257600080fd5b823567ffffffffffffffff808211156200455b57600080fd5b818501915085601f8301126200457057600080fd5b8135602062004583620044e08362004494565b82815260059290921b84018101918181019089841115620045a357600080fd5b948201945b83861015620045cc57620045bc86620042d0565b82529482019490820190620045a8565b96505086013592505080821115620045e357600080fd5b50620045f285828601620044bb565b9150509250929050565b600080600080608085870312156200461357600080fd5b843562004620816200422b565b93506200463060208601620042d0565b92506200464060408601620042d0565b9396929550929360600135925050565b600080604083850312156200466457600080fd5b8235915060208301356200443f816200422b565b60008060008060008060c087890312156200469257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060008060808587031215620046d357600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156200470357600080fd5b82356200430c816200422b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562004778576200477862004745565b500290565b6000826200479b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015620047b557620047b562004745565b500390565b600060208284031215620047cd57600080fd5b5051919050565b60008219821115620047ea57620047ea62004745565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115620048465781600019048211156200482a576200482a62004745565b808516156200483857918102915b93841c93908002906200480a565b509250929050565b6000826200485f57506001620010cc565b816200486e57506000620010cc565b81600181146200488757600281146200489257620048b2565b6001915050620010cc565b60ff841115620048a657620048a662004745565b50506001821b620010cc565b5060208310610133831016604e8410600b8410161715620048d7575081810a620010cc565b620048e3838362004805565b8060001904821115620048fa57620048fa62004745565b029392505050565b6000620013e860ff8416836200484e565b60006000198214156200492a576200492a62004745565b5060010190565b6020808252600e908201526d0a8c2f0cae640e8dede40d0d2ced60931b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156200498257600080fd5b8151620013e8816200422b565b600081518084526020808501945080840160005b83811015620049ca5781516001600160a01b031687529582019590820190600101620049a3565b509495945050505050565b85815284602082015260a060408201526000620049f660a08301866200498f565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600062004a2e60808301866200498f565b6001600160a01b0394909416604083015250606001529291505056fe60806040526ec097ce7bc90715b34b9f1000000000600a5562015180600b5566038d7ea4c68000600c55600d805460ff60a01b1916905534801561004257600080fd5b50610e3d806100526000396000f3fe6080604052600436106101355760003560e01c806366817df5116100ab578063ce7c2ac21161006f578063ce7c2ac214610309578063d0e30db01461036b578063e2d2e21914610373578063eeb77fd414610389578063efca2eed146103a9578063ffd49c84146103bf57600080fd5b806366817df5146102875780636793141f146102b45780638129fc1c146102c9578063997664d7146102de5780639df62df2146102f457600080fd5b80632d48e896116100fd5780632d48e896146101e55780633a98ef39146102055780633cbf8a611461021b57806342685d741461023b5780634fab0ae8146102515780635a3f21311461026757600080fd5b806311ce023d1461013a5780631329f8621461016357806314b6ca961461018357806315f7e05e146101a557806328fd3198146101c5575b600080fd5b34801561014657600080fd5b50610150600a5481565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061015061017e366004610ce7565b6103d5565b34801561018f57600080fd5b506101a361019e366004610d09565b610470565b005b3480156101b157600080fd5b506101a36101c0366004610ce7565b610721565b3480156101d157600080fd5b506101506101e0366004610ce7565b6107af565b3480156101f157600080fd5b506101a3610200366004610d33565b610850565b34801561021157600080fd5b5061015060055481565b34801561022757600080fd5b50610150610236366004610ce7565b610872565b34801561024757600080fd5b5061015060085481565b34801561025d57600080fd5b50610150600c5481565b34801561027357600080fd5b50610150610282366004610ce7565b6108a9565b34801561029357600080fd5b506101506102a2366004610ce7565b60036020526000908152604090205481565b3480156102c057600080fd5b506101506108e0565b3480156102d557600080fd5b506101a36108ff565b3480156102ea57600080fd5b5061015060065481565b34801561030057600080fd5b5061015061093d565b34801561031557600080fd5b5061034b610324366004610ce7565b60046020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161015a565b6101a361095c565b34801561037f57600080fd5b5061015060095481565b34801561039557600080fd5b506101a36103a4366004610ce7565b6109a3565b3480156103b557600080fd5b5061015060075481565b3480156103cb57600080fd5b50610150600b5481565b600080546001600160a01b031633146103ed57600080fd5b600b546001600160a01b038316600090815260036020526040902054429161041491610d6b565b11158061042a5750600d54600160a01b900460ff165b1561043757506000919050565b600b546001600160a01b038316600090815260036020526040902054429161045e91610d6b565b6104689190610d83565b90505b919050565b6000546001600160a01b0316331461048757600080fd5b6000811180156104ad57506001600160a01b038216600090815260046020526040902054155b1561054557600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055610516816109ff565b6001600160a01b0383166000908152600460209081526040808320600101939093556003905220429055610578565b8015801561056a57506001600160a01b03821660009081526004602052604090205415155b156105785761057882610a2e565b6001600160a01b03821660009081526004602052604081205482119061059d846107af565b9050811561061b576105af8482610b41565b156105be576105be8482610bea565b6001600160a01b0384166000908152600460205260409020546105ea906105e59085610d83565b6109ff565b6001600160a01b03851660009081526004602052604081206001018054909190610615908490610d6b565b90915550505b6001600160a01b038416600090815260046020526040902054600554849161064291610d83565b61064c9190610d6b565b6005556001600160a01b03841660009081526004602052604090208390558161071b578047101561067a5750475b806008546106889190610d6b565b6008556001600160a01b038416600090815260046020526040812060030180548392906106b6908490610d6b565b9091555050600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156106f4573d6000803e3d6000fd5b506106fe836109ff565b6001600160a01b0385166000908152600460205260409020600101555b50505050565b6000546001600160a01b0316331461073857600080fd5b61074a81610745836107af565b610b41565b61079a5760405162461bcd60e51b815260206004820152601b60248201527f4469766964656e6473206e6f7420617661696c61626c65207965740000000000604482015260640160405180910390fd5b6107ac816107a7836107af565b610bea565b50565b600080546001600160a01b031633146107c757600080fd5b6001600160a01b0382166000908152600460205260409020546107ec57506000919050565b6001600160a01b03821660009081526004602052604081205461080e906109ff565b6001600160a01b03841660009081526004602052604090206001015490915080821161083e575060009392505050565b6108488183610d83565b949350505050565b6000546001600160a01b0316331461086757600080fd5b600b91909155600c55565b600080546001600160a01b0316331461088a57600080fd5b506001600160a01b031660009081526004602052604090206002015490565b600080546001600160a01b031633146108c157600080fd5b506001600160a01b031660009081526004602052604090206003015490565b600080546001600160a01b031633146108f857600080fd5b5060075490565b600d54600160a81b900460ff161561091657600080fd5b600080546001600160a01b03191633179055600d805460ff60a81b1916600160a81b179055565b600080546001600160a01b0316331461095557600080fd5b5060015490565b600654349061096c908290610d6b565b600655600554600a54610980908390610d9a565b61098a9190610db9565b6009600082825461099b9190610d6b565b909155505050565b6000546001600160a01b031633146109ba57600080fd5b600d54600160a01b900460ff16156109d157600080fd5b600d80546001600160a81b0319166001600160a01b0390921691909117600160a01b17905562093a80600b55565b600081610a0e57506000919050565b600a54600954610a1e9084610d9a565b610a289190610db9565b92915050565b60018054610a3d908290610d83565b81548110610a4d57610a4d610ddb565b60009182526020808320909101546001600160a01b0384811684526002909252604090922054600180549290931692918110610a8b57610a8b610ddb565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260029182905260408120546001805491939291610ad6908290610d83565b81548110610ae657610ae6610ddb565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610b1c57610b1c610df1565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600d54600090600160a01b900460ff16610b9157600b546001600160a01b0384166000908152600360205260409020544291610b7c91610d6b565b108015610b8a5750600c5482115b9050610a28565b62093a80610ba3636220adc042610d83565b610bad9190610db9565b610bba9062093a80610d9a565b610bc890636220adc0610d6b565b6001600160a01b03841660009081526003602052604090205410905092915050565b6001600160a01b038216600090815260046020526040902054610c0b575050565b8015610ccc5780600754610c1f9190610d6b565b6007556001600160a01b03821660009081526003602090815260408083204290556004909152902060020154610c56908290610d6b565b6001600160a01b0383166000908152600460205260409020600281019190915554610c80906109ff565b6001600160a01b038316600081815260046020526040808220600101939093559151909183156108fc02918491818181858888f19350505050158015610cca573d6000803e3d6000fd5b505b5050565b80356001600160a01b038116811461046b57600080fd5b600060208284031215610cf957600080fd5b610d0282610cd0565b9392505050565b60008060408385031215610d1c57600080fd5b610d2583610cd0565b946020939093013593505050565b60008060408385031215610d4657600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b60008219821115610d7e57610d7e610d55565b500190565b600082821015610d9557610d95610d55565b500390565b6000816000190483118215151615610db457610db4610d55565b500290565b600082610dd657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122099586d3f844cdfe3f8eb18f5218eee11f388a24d3485f39813f1938c705262da64736f6c634300080b0033a26469706673582212207aab0d07b4581e45527a502f3d0679fd86ae756e2ac723616248855bffe07af064736f6c634300080b0033

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

000000000000000000000000122817e1f550a668f5e578a88f542a3673d4764200000000000000000000000080bb8fb3485ba241d15f21cbb1aa0416f87ac695

-----Decoded View---------------
Arg [0] : _marketing (address): 0x122817e1F550a668F5E578A88f542A3673d47642
Arg [1] : _dev (address): 0x80bb8FB3485bA241D15f21CBb1aa0416f87aC695

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000122817e1f550a668f5e578a88f542a3673d47642
Arg [1] : 00000000000000000000000080bb8fb3485ba241d15f21cbb1aa0416f87ac695


Deployed Bytecode Sourcemap

20614:23046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23217:50;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;23217:50:0;;;;;;;;36758:358;;;;;;;;;;-1:-1:-1;36758:358:0;;;;;:::i;:::-;;:::i;:::-;;24610:71;;;;;;;;;;-1:-1:-1;24673:5:0;;;;;;;;;;;;-1:-1:-1;;;24673:5:0;;;;24610:71;;;;;;;:::i;25531:216::-;;;;;;;;;;-1:-1:-1;25531:216:0;;;;;:::i;:::-;;:::i;:::-;;;1974:14:1;;1967:22;1949:41;;1937:2;1922:18;25531:216:0;1809:187:1;41401:150:0;;;;;;;;;;-1:-1:-1;41401:150:0;;;;;:::i;:::-;;:::i;24358:88::-;;;;;;;;;;-1:-1:-1;24431:12:0;;24358:88;;37128:107;;;;;;;;;;-1:-1:-1;37128:107:0;;;;;:::i;:::-;;:::i;37461:213::-;;;;;;;;;;-1:-1:-1;37461:213:0;;;;;:::i;:::-;;:::i;40707:182::-;;;;;;;;;;-1:-1:-1;40707:182:0;;;;;:::i;:::-;;:::i;30043:365::-;;;;;;;;;;-1:-1:-1;30043:365:0;;;;;:::i;:::-;;:::i;26049:341::-;;;;;;;;;;-1:-1:-1;26049:341:0;;;;;:::i;:::-;;:::i;42996:217::-;;;;;;;;;;-1:-1:-1;42996:217:0;;;;;:::i;:::-;;:::i;:::-;;;;3463:25:1;;;3519:2;3504:18;;3497:34;;;;3436:18;42996:217:0;3289:248:1;41087:138:0;;;;;;;;;;;;;:::i;40897:182::-;;;;;;;;;;-1:-1:-1;40897:182:0;;;;;:::i;:::-;;:::i;35763:90::-;;;;;;;;;;-1:-1:-1;35763:90:0;;;;;:::i;:::-;;:::i;21772:45::-;;;;;;;;;;;;;;;;24452:71;;;;;;;;;;-1:-1:-1;24452:71:0;;21022:1;3869:36:1;;3857:2;3842:18;24452:71:0;3727:184:1;43219:169:0;;;;;;;;;;;;;:::i;22701:38::-;;;;;;;;;;-1:-1:-1;22701:38:0;;;;;;;;21928:62;;;;;;;;;;;;;;;;21340:44;;;;;;;;;;-1:-1:-1;21340:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29939:92;;;;;;;;;;;;;:::i;21446:49::-;;;;;;;;;;-1:-1:-1;21446:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22093:37;;;;;;;;;;;;;;;;25755:122;;;;;;;;;;-1:-1:-1;25755:122:0;;;;;:::i;:::-;;:::i;22569:27::-;;;;;;;;;;;;;;;;41563:124;;;;;;;;;;-1:-1:-1;41563:124:0;;;;;:::i;:::-;;:::i;39375:119::-;;;;;;;;;;-1:-1:-1;39375:119:0;;;;;:::i;:::-;;:::i;25020:503::-;;;;;;;;;;-1:-1:-1;25020:503:0;;;;;:::i;:::-;;:::i;21824:47::-;;;;;;;;;;;;;;;;37917:263;;;;;;;;;;-1:-1:-1;37917:263:0;;;;;:::i;:::-;;:::i;23180:30::-;;;;;;;;;;-1:-1:-1;23180:30:0;;;;-1:-1:-1;;;23180:30:0;;;;;;24764:105;;;;;;;;;;-1:-1:-1;24764:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;24848:18:0;24830:7;24848:18;;;:9;:18;;;;;;;24764:105;10783:148;;;;;;;;;;;;;:::i;23090:36::-;;;;;;;;;;-1:-1:-1;23090:36:0;;;;-1:-1:-1;;;23090:36:0;;;;;;31415:967;;;;;;;;;;-1:-1:-1;31415:967:0;;;;;:::i;:::-;;:::i;21878:43::-;;;;;;;;;;;;;;;;21099:54;;;;;;;;;;;;;;;;35203:317;;;;;;;;;;-1:-1:-1;35203:317:0;;;;;:::i;:::-;;:::i;21997:43::-;;;;;;;;;;;;;;;;39637:606;;;;;;;;;;-1:-1:-1;39637:606:0;;;;;:::i;:::-;;:::i;23058:25::-;;;;;;;;;;-1:-1:-1;23058:25:0;;;;-1:-1:-1;;;;;23058:25:0;;;;;;-1:-1:-1;;;;;8140:32:1;;;8122:51;;8110:2;8095:18;23058:25:0;7959:220:1;24687:71:0;;;;;;;;;;-1:-1:-1;24730:7:0;10207:6;-1:-1:-1;;;;;10207:6:0;24687:71;41087:138;21391:48;;;;;;;;;;-1:-1:-1;21391:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35865:96;;;;;;;;;;-1:-1:-1;35865:96:0;;;;;:::i;:::-;;:::i;21160:56::-;;;;;;;;;;;;;;;;30420:264;;;;;;;;;;-1:-1:-1;30420:264:0;;;;;:::i;:::-;;:::i;24529:75::-;;;;;;;;;;-1:-1:-1;24594:7:0;;;;;;;;;;;;-1:-1:-1;;;24594:7:0;;;;24529:75;;40251:224;;;;;;;;;;-1:-1:-1;40251:224:0;;;;;:::i;:::-;;:::i;22185:32::-;;;;;;;;;;-1:-1:-1;22185:32:0;;;;;;;;22509:19;;;;;;;;;;-1:-1:-1;22509:19:0;;;;-1:-1:-1;;;;;22509:19:0;;;25885:156;;;;;;;;;;-1:-1:-1;25885:156:0;;;;;:::i;:::-;;:::i;37686:219::-;;;;;;;;;;-1:-1:-1;37686:219:0;;;;;:::i;:::-;;:::i;42445:545::-;;;;;;;;;;-1:-1:-1;42445:545:0;;;;;:::i;:::-;;:::i;:::-;;;;8679:25:1;;;8735:2;8720:18;;8713:34;;;;8763:18;;;8756:34;;;;8821:2;8806:18;;8799:34;8864:3;8849:19;;8842:35;8908:3;8893:19;;8886:35;8666:3;8651:19;42445:545:0;8392:535:1;22746:36:0;;;;;;;;;;-1:-1:-1;22746:36:0;;;;;;;;;;;23006:43;;;;;;;;;;-1:-1:-1;23006:43:0;;;;-1:-1:-1;;;;;23006:43:0;;;35969:104;;;;;;;;;;;;;:::i;22047:39::-;;;;;;;;;;;;;;;;29079:326;;;;;;;;;;;;;:::i;41699:734::-;;;;;;;;;;;;;:::i;:::-;;;;9511:25:1;;;9567:2;9552:18;;9545:34;;;;9595:18;;;9588:34;;;;9653:2;9638:18;;9631:34;;;;9696:3;9681:19;;9674:35;9740:3;9725:19;;9718:35;9784:3;9769:19;;9762:35;9828:3;9813:19;;9806:35;9498:3;9483:19;41699:734:0;9168:679:1;22137:41:0;;;;;;;;;;;;;;;;22537:25;;;;;;;;;;;;;;;;22961:38;;;;;;;;;;-1:-1:-1;22961:38:0;;;;-1:-1:-1;;;;;22961:38:0;;;23133;;;;;;;;;;-1:-1:-1;23133:38:0;;;;-1:-1:-1;;;23133:38:0;;;;;;29413:177;;;;;;;;;;-1:-1:-1;29413:177:0;;;;;:::i;:::-;;:::i;38619:237::-;;;;;;;;;;-1:-1:-1;38619:237:0;;;;;:::i;:::-;;:::i;41233:160::-;;;;;;;;;;-1:-1:-1;41233:160:0;;;;;:::i;:::-;;:::i;29602:325::-;;;;;;;;;;-1:-1:-1;29602:325:0;;;;;:::i;:::-;;:::i;38192:415::-;;;;;;;;;;-1:-1:-1;38192:415:0;;;;;:::i;:::-;;:::i;30696:128::-;;;;;;;;;;;;;:::i;24875:133::-;;;;;;;;;;-1:-1:-1;24875:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;24977:19:0;;;24959:7;24977:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;24875:133;40483:216;;;;;;;;;;-1:-1:-1;40483:216:0;;;;;:::i;:::-;;:::i;35532:219::-;;;;;;;;;;-1:-1:-1;35532:219:0;;;;;:::i;:::-;;:::i;11086:244::-;;;;;;;;;;-1:-1:-1;11086:244:0;;;;;:::i;:::-;;:::i;38864:503::-;;;;;;;;;;-1:-1:-1;38864:503:0;;;;;:::i;:::-;;:::i;39502:127::-;;;;;;;;;;-1:-1:-1;39502:127:0;;;;;:::i;:::-;;:::i;22392:24::-;;;;;;;;;;-1:-1:-1;22392:24:0;;;;-1:-1:-1;;;;;22392:24:0;;;43394:184;;;;;;;;;;;;;:::i;36758:358::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;;;;;;;;;36883:18:::1;:29:::0;;-1:-1:-1;;36883:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36923:14:::1;:21:::0;;;;-1:-1:-1;36955:22:0::1;:26:::0;36992:17:::1;:27:::0;37030:22:::1;:32:::0;37096:12:::1;37073:20;:35:::0;36758:358::o;25531:216::-;25635:10;25606:4;25623:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;25623:32:0;;;;;;;;;;:41;;;25680:37;25606:4;;25623:32;;25680:37;;;;25658:6;160:25:1;;148:2;133:18;;14:177;25680:37:0;;;;;;;;-1:-1:-1;25735:4:0;25531:216;;;;;:::o;41401:150::-;41481:4;41537:6;41505:29;41525:8;41505:19;:29::i;:::-;:38;;41401:150;-1:-1:-1;;;41401:150:0:o;37128:107::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;37201:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;37201:26:0;;::::1;::::0;;;::::1;::::0;;37128:107::o;37461:213::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;37567:1:::1;37555:9;:13;:28;;;;;37582:1;37572:7;:11;37555:28;:48;;;;;37598:5;37587:7;:16;;37555:48;37547:57;;;::::0;::::1;;37659:7;37646:9;37631:12;;:24;;;;:::i;:::-;37630:36;;;;:::i;:::-;37615:12;:51:::0;-1:-1:-1;;37461:213:0:o;40707:182::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;40804:15:::1;:25:::0;;;;40840:26:::1;:41:::0;40707:182::o;30043:365::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;30147:11:::1;:47:::0;;-1:-1:-1;;;;;;30147:47:0::1;-1:-1:-1::0;;;;;30147:47:0;::::1;::::0;;::::1;::::0;;;30205:24:::1;::::0;;-1:-1:-1;;;30205:24:0;;;;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;-1:-1:-1;;30205:24:0;;;;;;;;-1:-1:-1;30147:47:0;30205:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30240:16:0::1;:57:::0;;-1:-1:-1;;;;;;30240:57:0::1;-1:-1:-1::0;;;;;30240:57:0;::::1;::::0;;::::1;::::0;;;30308:29:::1;::::0;;-1:-1:-1;;;30308:29:0;;;;30240:57;;-1:-1:-1;30308:27:0::1;::::0;-1:-1:-1;30308:29:0::1;::::0;;::::1;::::0;-1:-1:-1;;30308:29:0;;;;;;;;-1:-1:-1;30240:57:0;30308:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30348:16:0::1;::::0;:52:::1;::::0;-1:-1:-1;;;30348:52:0;;-1:-1:-1;;;;;8140:32:1;;;30348:52:0::1;::::0;::::1;8122:51:1::0;30348:16:0;;::::1;::::0;-1:-1:-1;30348:38:0::1;::::0;-1:-1:-1;8095:18:1;;30348:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30043:365:::0;;:::o;26049:341::-;-1:-1:-1;;;;;26169:19:0;;26149:4;26169:19;;;:11;:19;;;;;;;;26189:10;26169:31;;;;;;;;-1:-1:-1;;26169:52:0;26166:157;;-1:-1:-1;;;;;26271:19:0;;;;;;:11;:19;;;;;;;;26291:10;26271:31;;;;;;;;:40;;26305:6;;26271:40;:::i;:::-;-1:-1:-1;;;;;26237:19:0;;;;;;:11;:19;;;;;;;;26257:10;26237:31;;;;;;;:74;26166:157;26342:40;26356:6;26364:9;26375:6;26342:13;:40::i;:::-;26335:47;;26049:341;;;;;;:::o;42996:217::-;43116:11;;:32;;-1:-1:-1;;;43116:32:0;;-1:-1:-1;;;;;8140:32:1;;;43116::0;;;8122:51:1;43060:16:0;;;;43116:11;;;:24;;8095:18:1;;43116:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43171:16;;:37;;-1:-1:-1;;;43171:37:0;;-1:-1:-1;;;;;8140:32:1;;;43171:37:0;;;8122:51:1;43105:43:0;;-1:-1:-1;43171:16:0;;;:29;;8095:18:1;;43171:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43159:49;;42996:217;;;:::o;41087:138::-;41211:4;;-1:-1:-1;;;;;41211:4:0;;;41140:7;24848:18;;;:9;:18;;;;;;;41193:4;;;;;24848:18;;;;;41140:7;;41183:33;;;:::i;:::-;41167:12;;:50;;;;:::i;:::-;41160:57;;41087:138;:::o;40897:182::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;41006:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;41006:65:0;;::::1;::::0;::::1;3463:25:1::0;;;3504:18;;;3497:34;;;-1:-1:-1;;;;;41006:11:0;;::::1;::::0;:35:::1;::::0;3436:18:1;;41006:65:0::1;3289:248:1::0;35763:90:0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;35829:16:::1;35838:6;35829:8;:16::i;:::-;35763:90:::0;:::o;43219:169::-;43271:11;;:36;;-1:-1:-1;;;43271:36:0;;43296:10;43271:36;;;8122:51:1;-1:-1:-1;;;;;43271:11:0;;;;:24;;8095:18:1;;43271:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;43263:75;;;;-1:-1:-1;;;43263:75:0;;12324:2:1;43263:75:0;;;12306:21:1;12363:2;12343:18;;;12336:30;-1:-1:-1;;;12382:18:1;;;12375:51;12443:18;;43263:75:0;12122:345:1;43263:75:0;43346:11;;:37;;-1:-1:-1;;;43346:37:0;;43372:10;43346:37;;;8122:51:1;-1:-1:-1;;;;;43346:11:0;;;;:25;;8095:18:1;;43346:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43219:169::o;29939:92::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;29998:18:::1;:25:::0;;-1:-1:-1;;;;29998:25:0::1;-1:-1:-1::0;;;29998:25:0::1;::::0;;29939:92::o;25755:122::-;25810:4;25834:35;25842:7;-1:-1:-1;;25834:7:0;:35::i;41563:124::-;41629:7;41656:23;41672:6;41656:15;:23::i;39375:119::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39458:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;39458:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39375:119::o;25020:503::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;25148:1:::1;25129:9;:16;:20;:42;;;;;25170:1;25153:7;:14;:18;25129:42;:80;;;;;25195:7;:14;25175:9;:16;:34;25129:80;25121:89;;;::::0;::::1;;25236:10;25221:12;25257:259;25278:9;:16;25274:1;:20;25257:259;;;25319:23;25329:9;25339:1;25329:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24848:18:0;24830:7;24848:18;;;:9;:18;;;;;;;24764:105;25319:23:::1;25316:189;;25401:4;25368:16;:30;25385:9;25395:1;25385:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;25368:30:0::1;-1:-1:-1::0;;;;;25368:30:0::1;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25424:65;25438:4;25444:9;25454:1;25444:12;;;;;;;;:::i;:::-;;;;;;;21022:1;25472:2;:15;;;;:::i;:::-;25458:7;25466:1;25458:10;;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;25424:13;:65::i;:::-;;25316:189;25296:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25257:259;;37917:263:::0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;38030:1:::1;38020:7;:11;:39;;;;-1:-1:-1::0;38058:1:0::1;38035:19;38047:7:::0;38035:9;:19:::1;:::i;:::-;:24;;38020:39;38012:66;;;;-1:-1:-1::0;;;38012:66:0::1;;;;;;;:::i;:::-;38089:24;:36:::0;;;;38136:26:::1;:36:::0;37917:263::o;10783:148::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;10890:1:::1;10874:6:::0;;10853:40:::1;::::0;-1:-1:-1;;;;;10874:6:0;;::::1;::::0;10853:40:::1;::::0;10890:1;;10853:40:::1;10921:1;10904:19:::0;;-1:-1:-1;;;;;;10904:19:0::1;::::0;;10783:148::o;31415:967::-;31522:7;31562:12;31545:10;;31558:1;31545:14;;;;:::i;:::-;:29;31542:63;;;31601:1;31584:14;;:18;;;;:::i;:::-;31577:25;;;;31542:63;31618:7;31615:432;;;31671:24;;31655:13;;:40;;;;:::i;:::-;31645:6;:50;;:108;;;;-1:-1:-1;31718:20:0;;-1:-1:-1;;;;;31699:16:0;;;;;;:8;:16;;;;;;31741:12;;31699:39;;;:::i;:::-;:54;31645:108;31641:394;;;31819:26;;31791:24;;31780:8;;:35;;;;:::i;:::-;31779:66;;;;:::i;31641:394::-;32008:26;;31979:24;;31968:8;;31959:17;;:6;:17;:::i;:::-;:44;;;;:::i;:::-;31958:77;;;;:::i;:::-;31929:26;;31901:24;;31890:8;;:35;;;;:::i;:::-;31889:66;;;;:::i;:::-;:146;;;;:::i;31641:394::-;32057:16;32153:26;;32180:1;32153:28;;;;:::i;:::-;32124:24;;32113:8;;32086:24;;32077:33;;:6;:33;:::i;:::-;:44;;;;:::i;:::-;:71;;;;:::i;:::-;32076:106;;;;:::i;:::-;32057:125;;32197:18;;32219:1;32197:23;:54;;;-1:-1:-1;;;;;;32224:27:0;;;;;;:16;:27;;;;;;;;32197:54;32193:100;;;32285:8;32274;;:19;;;;:::i;:::-;32267:26;;;;;32193:100;32365:8;32360:1;32333:26;32349:9;32333:15;:26::i;:::-;:28;;;;:::i;:::-;32322:8;;:39;;;;:::i;:::-;32321:52;;;;:::i;:::-;32314:59;;;31415:967;;;;;;;:::o;35203:317::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;35328:4:::1;::::0;35310:23:::1;::::0;35320:6;;-1:-1:-1;;;;;35328:4:0::1;35310:9;:23::i;:::-;35347:24;35344:169;;;35418:15;35387:28;:46:::0;35477:23:::1;::::0;35453:48:::1;::::0;160:25:1;;;35453:48:0::1;::::0;148:2:1;133:18;35453:48:0::1;;;;;;;35344:169;35203:317:::0;;:::o;39637:606::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;39842:2:::1;39825:13;:19;;39817:51;;;::::0;-1:-1:-1;;;39817:51:0;;14672:2:1;39817:51:0::1;::::0;::::1;14654:21:1::0;14711:2;14691:18;;;14684:30;-1:-1:-1;;;14730:18:1;;;14723:49;14789:18;;39817:51:0::1;14470:343:1::0;39817:51:0::1;39879:12;:28:::0;;;39918:6:::1;:16:::0;;;39945:10:::1;:24:::0;;;39980:13:::1;:30:::0;;;40021:12:::1;:28:::0;;;40036:13;39996:14;40071:21:::1;39958:11:::0;39927:7;40071:21:::1;:::i;:::-;:38;;;;:::i;:::-;:54;;;;:::i;:::-;40060:8;:65:::0;40136:14:::1;:32:::0;;;40198:18:::1;40215:1;40153:15:::0;40198:18:::1;:::i;:::-;40187:8;;:29;40179:56;;;;-1:-1:-1::0;;;40179:56:0::1;;;;;;;:::i;35865:96::-:0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;35931:13:::1;:22:::0;;-1:-1:-1;;35931:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35865:96::o;30420:264::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;30536:27:::1;:14;-1:-1:-1::0;;;;;30536:25:0::1;;:27::i;:::-;30528:36;;;::::0;::::1;;30575:14;:43:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;30575:43:0::1;-1:-1:-1::0;;;;;30575:43:0;;;::::1;::::0;;;::::1;::::0;;;30629:22:::1;:47:::0;;;;::::1;::::0;;-1:-1:-1;30629:47:0;;;;::::1;::::0;30420:264::o;40251:224::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;40362:14:::1;:41:::0;;-1:-1:-1;;;;;;40362:41:0::1;;-1:-1:-1::0;;;;;40362:41:0;;::::1;;;::::0;;40414:20:::1;:53:::0;;-1:-1:-1;;;;;;40414:53:0::1;::::0;;;::::1;;::::0;;40251:224::o;25885:156::-;25965:4;25989:44;26003:10;26015:9;26026:6;25989:13;:44::i;37686:219::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;37796:1:::1;37784:9;:13;:28;;;;;37811:1;37801:7;:11;37784:28;:48;;;;;37827:5;37816:7;:16;;37784:48;37776:57;;;::::0;::::1;;37890:7;37877:9;37862:12;;:24;;;;:::i;:::-;37861:36;;;;:::i;:::-;37844:14;:53:::0;-1:-1:-1;;37686:219:0:o;42445:545::-;42645:11;;:37;;-1:-1:-1;;;42645:37:0;;-1:-1:-1;;;;;8140:32:1;;;42645:37:0;;;8122:51:1;42506:14:0;;;;;;;;;;;;42645:11;;;;:29;;8095:18:1;;42645:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42704:16;;:42;;-1:-1:-1;;;42704:42:0;;-1:-1:-1;;;;;8140:32:1;;;42704:42:0;;;8122:51:1;42636:46:0;;-1:-1:-1;42704:16:0;;;:34;;8095:18:1;;42704:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42770:11;;:36;;-1:-1:-1;;;42770:36:0;;-1:-1:-1;;;;;8140:32:1;;;42770:36:0;;;8122:51:1;42690:56:0;;-1:-1:-1;42770:11:0;;;:28;;8095:18:1;;42770:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42829:16;;:41;;-1:-1:-1;;;42829:41:0;;-1:-1:-1;;;;;8140:32:1;;;42829:41:0;;;8122:51:1;42754:52:0;;-1:-1:-1;42829:16:0;;;:33;;8095:18:1;;42829:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42892:11;;:34;;-1:-1:-1;;;42892:34:0;;-1:-1:-1;;;;;8140:32:1;;;42892:34:0;;;8122:51:1;42814:56:0;;-1:-1:-1;42892:11:0;;;:26;;8095:18:1;;42892:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42946:16;;:39;;-1:-1:-1;;;42946:39:0;;-1:-1:-1;;;;;8140:32:1;;;42946:39:0;;;8122:51:1;42878:48:0;;-1:-1:-1;42946:16:0;;;:31;;8095:18:1;;42946:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42934:51;;42445:545;;;;;;;:::o;35969:104::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;36064:1:::1;36033:28;:32:::0;35969:104::o;29079:326::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;37310:10;;:15;29126:20:::1;;;::::0;::::1;;29171:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29157:11:0::1;:39:::0;;-1:-1:-1;;;;;;29157:39:0::1;-1:-1:-1::0;;;;;29157:39:0;;;::::1;::::0;;::::1;::::0;;29207:24:::1;::::0;;-1:-1:-1;;;29207:24:0;;;;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;-1:-1:-1;;29207:24:0;;;;;;;;-1:-1:-1;29157:39:0;29207:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29261:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29242:16:0::1;:44:::0;;-1:-1:-1;;;;;;29242:44:0::1;-1:-1:-1::0;;;;;29242:44:0;;;::::1;::::0;;::::1;::::0;;29297:29:::1;::::0;;-1:-1:-1;;;29297:29:0;;;;:27:::1;::::0;:29:::1;::::0;;::::1;::::0;-1:-1:-1;;29297:29:0;;;;;;;;-1:-1:-1;29242:44:0;29297:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29337:16:0::1;::::0;29384:11:::1;::::0;29337:60:::1;::::0;-1:-1:-1;;;29337:60:0;;-1:-1:-1;;;;;29384:11:0;;::::1;29337:60;::::0;::::1;8122:51:1::0;29337:16:0;::::1;::::0;-1:-1:-1;29337:38:0::1;::::0;-1:-1:-1;8095:18:1;;29337:60:0::1;7959:220:1::0;41699:734:0;41751:20;41773:24;41799:25;41826:20;41848:24;41874:23;41899:21;41922:20;41970:11;;;;;;;;;-1:-1:-1;;;;;41970:11:0;-1:-1:-1;;;;;41970:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41955:43;;42028:11;;;;;;;;;-1:-1:-1;;;;;42028:11:0;-1:-1:-1;;;;;42028:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42009:49;;42089:11;;;;;;;;;-1:-1:-1;;;;;42089:11:0;-1:-1:-1;;;;;42089:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42069:49;;42144:16;;;;;;;;;-1:-1:-1;;;;;42144:16:0;-1:-1:-1;;;;;42144:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42129:48;;42207:16;;;;;;;;;-1:-1:-1;;;;;42207:16:0;-1:-1:-1;;;;;42207:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42188:54;;42271:16;;;;;;;;;-1:-1:-1;;;;;42271:16:0;-1:-1:-1;;;;;42271:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42253:52;;42332:11;;;;;;;;;-1:-1:-1;;;;;42332:11:0;-1:-1:-1;;;;;42332:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42316:47;;42389:16;;;;;;;;;-1:-1:-1;;;;;42389:16:0;-1:-1:-1;;;;;42389:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42374:51;;41699:734;;;;;;;;:::o;29413:177::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;29492:8:::1;29488:55;;;29524:18;::::0;-1:-1:-1;;;29524:18:0;::::1;;;29523:19;29515:28;;;::::0;::::1;;29554:17;:28:::0;;;::::1;;-1:-1:-1::0;;;29554:28:0::1;-1:-1:-1::0;;;;29554:28:0;;::::1;::::0;;;::::1;::::0;;29413:177::o;38619:237::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;38736:1:::1;38726:7;:11;:39;;;;-1:-1:-1::0;38764:1:0::1;38741:19;38753:7:::0;38741:9;:19:::1;:::i;:::-;:24;;38726:39;38718:48;;;::::0;::::1;;38777:18;:30:::0;;;;38818:20:::1;:30:::0;38619:237::o;41233:160::-;41301:7;41363:22;:20;:22::i;:::-;41350:4;;-1:-1:-1;;;;;41350:4:0;24830:7;24848:18;;;:9;:18;;;;;;41329:26;;:8;:26;:::i;:::-;:30;;41358:1;41329:30;:::i;:::-;41328:57;;;;:::i;29602:325::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;29715:9:::1;::::0;-1:-1:-1;;;;;29692:33:0;;::::1;29715:9:::0;::::1;29692:33;29688:141;;29750:18;::::0;-1:-1:-1;;;29750:18:0;::::1;;;29749:19;29741:28;;;::::0;::::1;;29784:9;:33:::0;;-1:-1:-1;;;;;;29784:33:0::1;-1:-1:-1::0;;;;;29784:33:0;::::1;;::::0;;29688:141:::1;29843:5;29839:80;;;29863:9;::::0;29914:4:::1;::::0;29863:56:::1;::::0;-1:-1:-1;;;29863:56:0;;29887:10:::1;29863:56;::::0;::::1;15058:34:1::0;29907:4:0::1;15108:18:1::0;;;15101:43;-1:-1:-1;;;;;29914:4:0;;::::1;15160:18:1::0;;;15153:43;29863:9:0;::::1;::::0;:23:::1;::::0;14993:18:1;;29863:56:0::1;14818:384:1::0;38192:415:0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;38347:1:::1;38337:7;:11;:39;;;;-1:-1:-1::0;38375:1:0::1;38352:19;38364:7:::0;38352:9;:19:::1;:::i;:::-;:24;;38337:39;38329:67;;;;-1:-1:-1::0;;;38329:67:0::1;;;;;;;:::i;:::-;38407:24;:36:::0;;;38493:12:::1;::::0;38483:22:::1;::::0;:7;:22:::1;:::i;:::-;38454:26;:51:::0;38516:24:::1;:40:::0;;;;38567:20:::1;:32:::0;-1:-1:-1;;38192:415:0:o;30696:128::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;30757:14:::1;:20;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30757:20:0;;;;;-1:-1:-1;;;;;;30757:20:0::1;::::0;;;;;30788:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30696:128::o:0;40483:216::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;40602:1:::1;40587:12;:16;40579:25;;;::::0;::::1;;40615:11;:22:::0;;-1:-1:-1;;;;40615:22:0::1;-1:-1:-1::0;;;40615:22:0;::::1;;;;::::0;;40664:12:::1;::::0;:27:::1;::::0;40679:12;;40664:27:::1;:::i;:::-;40648:13;:43:::0;-1:-1:-1;;40483:216:0:o;35532:219::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;35617:5:::1;35613:130;;;35637:16;;;;;;;;;-1:-1:-1::0;;;;;35637:16:0::1;-1:-1:-1::0;;;;;35637:24:0::1;;35669:6;35637:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35203:317:::0;;:::o;35613:130::-:1;35707:11;;;;;;;;;-1:-1:-1::0;;;;;35707:11:0::1;-1:-1:-1::0;;;;;35707:19:0::1;;35734:6;35707:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;11086:244:::0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11175:22:0;::::1;11167:73;;;::::0;-1:-1:-1;;;11167:73:0;;15541:2:1;11167:73:0::1;::::0;::::1;15523:21:1::0;15580:2;15560:18;;;15553:30;15619:34;15599:18;;;15592:62;-1:-1:-1;;;15670:18:1;;;15663:36;15716:19;;11167:73:0::1;15339:402:1::0;11167:73:0::1;11277:6;::::0;;11256:38:::1;::::0;-1:-1:-1;;;;;11256:38:0;;::::1;::::0;11277:6;::::1;::::0;11256:38:::1;::::0;::::1;11305:6;:17:::0;;-1:-1:-1;;;;;;11305:17:0::1;-1:-1:-1::0;;;;;11305:17:0;;;::::1;::::0;;;::::1;::::0;;11086:244::o;38864:503::-;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38960:23:0;::::1;38978:4;38960:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;38997:4:0::1;::::0;-1:-1:-1;;;;;38987:14:0;;::::1;38997:4:::0;::::1;38987:14;;38960:41;:59;;;;-1:-1:-1::0;39015:4:0::1;::::0;-1:-1:-1;;;;;39005:14:0;;::::1;39015:4:::0;::::1;39005:14;;38960:59;:80;;;;-1:-1:-1::0;10180:7:0;10207:6;-1:-1:-1;;;;;39023:17:0;;::::1;10207:6:::0;;39023:17:::1;;38960:80;38952:89;;;::::0;::::1;;-1:-1:-1::0;;;;;39052:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;39052:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;39096:264:::1;;39121:11;::::0;:31:::1;::::0;-1:-1:-1;;;39121:31:0;;-1:-1:-1;;;;;15946:32:1;;;39121:31:0::1;::::0;::::1;15928:51:1::0;39121:11:0::1;15995:18:1::0;;;15988:34;39121:11:0;;::::1;::::0;:20:::1;::::0;15901:18:1;;39121:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39167:16:0::1;::::0;:36:::1;::::0;-1:-1:-1;;;39167:36:0;;-1:-1:-1;;;;;15946:32:1;;;39167:36:0::1;::::0;::::1;15928:51:1::0;39167:16:0::1;15995:18:1::0;;;15988:34;39167:16:0;;::::1;::::0;-1:-1:-1;39167:25:0::1;::::0;-1:-1:-1;15901:18:1;;39167:36:0::1;15746:282:1::0;39096:264:0::1;39234:11;::::0;-1:-1:-1;;;;;39263:17:0;;::::1;39234:11;39263:17:::0;;;:9:::1;:17;::::0;;;;;;;39234:47;;-1:-1:-1;;;39234:47:0;;::::1;::::0;::::1;15928:51:1::0;;;;15995:18;;;15988:34;39234:11:0;::::1;::::0;:20:::1;::::0;15901:18:1;;39234:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39296:16:0::1;::::0;-1:-1:-1;;;;;39330:17:0;;::::1;39296:16;39330:17:::0;;;:9:::1;:17;::::0;;;;;;;39296:52;;-1:-1:-1;;;39296:52:0;;::::1;::::0;::::1;15928:51:1::0;;;;15995:18;;;15988:34;39296:16:0;::::1;::::0;-1:-1:-1;39296:25:0::1;::::0;-1:-1:-1;15901:18:1;;39296:52:0::1;15746:282:1::0;39502:127:0;10354:6;;-1:-1:-1;;;;;10354:6:0;6317:10;10354:22;10346:67;;;;-1:-1:-1;;;10346:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39589:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;39589:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39502:127::o;43394:184::-;43451:16;;:41;;-1:-1:-1;;;43451:41:0;;43481:10;43451:41;;;8122:51:1;-1:-1:-1;;;;;43451:16:0;;;;:29;;8095:18:1;;43451:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;43443:80;;;;-1:-1:-1;;;43443:80:0;;12324:2:1;43443:80:0;;;12306:21:1;12363:2;12343:18;;;12336:30;-1:-1:-1;;;12382:18:1;;;12375:51;12443:18;;43443:80:0;12122:345:1;43443:80:0;43531:16;;:42;;-1:-1:-1;;;43531:42:0;;43562:10;43531:42;;;8122:51:1;-1:-1:-1;;;;;43531:16:0;;;;:30;;8095:18:1;;43531:42:0;7959:220:1;26398:1717:0;26490:4;26524:1;26515:6;:10;26507:46;;;;-1:-1:-1;;;26507:46:0;;16514:2:1;26507:46:0;;;16496:21:1;16553:2;16533:18;;;16526:30;16592:25;16572:18;;;16565:53;16635:18;;26507:46:0;16312:347:1;26507:46:0;-1:-1:-1;;;;;26572:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;26572:27:0;26564:60;;;;-1:-1:-1;;;26564:60:0;;16866:2:1;26564:60:0;;;16848:21:1;16905:2;16885:18;;;16878:30;-1:-1:-1;;;16924:18:1;;;16917:50;16984:18;;26564:60:0;16664:344:1;26564:60:0;26638:6;;;;26635:63;;;26654:41;26669:6;26677:9;26688:6;26654:14;:41::i;:::-;26647:48;;;;26635:63;26710:28;26723:6;26731;26710:12;:28::i;:::-;26776:4;;-1:-1:-1;;;;;26763:17:0;;;26776:4;;26763:17;;;;:38;;-1:-1:-1;26797:4:0;;-1:-1:-1;;;;;26784:17:0;;;26797:4;;26784:17;;26763:38;26759:139;;;-1:-1:-1;;;;;26823:26:0;;;;;;:15;:26;;;;;;;;26818:68;;26851:35;26868:9;26879:6;26851:16;:35::i;:::-;37310:10;;:15;;;26913:32;;-1:-1:-1;26941:4:0;;-1:-1:-1;;;;;26928:17:0;;;26941:4;;26928:17;26913:32;26910:107;;;10180:7;10207:6;-1:-1:-1;;;;;26956:17:0;;;10207:6;;26956:17;26948:56;;;;-1:-1:-1;;;26948:56:0;;17215:2:1;26948:56:0;;;17197:21:1;17254:2;17234:18;;;17227:30;17293:28;17273:18;;;17266:56;17339:18;;26948:56:0;17013:350:1;26948:56:0;27006:8;37392:12;37379:10;:25;37430:15;37415:12;:30;37341:112;27006:8;-1:-1:-1;;;;;27049:17:0;;;;;;:9;:17;;;;;;:26;;27069:6;;27049:26;:::i;:::-;-1:-1:-1;;;;;27029:17:0;;;;;;:9;:17;;;;;;;;:46;;;;27114:11;:19;;;;;;;;27113:20;:66;;27173:6;27113:66;;;27136:34;27144:6;27152:9;27163:6;27136:7;:34::i;:::-;-1:-1:-1;;;;;27204:22:0;;;;;;:11;:22;;;;;;27088:91;;-1:-1:-1;27204:22:0;;27200:175;;27246:25;27261:9;27246:14;:25::i;:::-;27243:50;;;27274:16;27283:6;27274:8;:16::i;:::-;27310:28;27328:9;27310:17;:28::i;:::-;27307:57;;;27341:20;:18;:20::i;:::-;-1:-1:-1;;;;;27419:20:0;;;;;;:9;:20;;;;;;:37;;27442:14;;27419:37;:::i;:::-;-1:-1:-1;;;;;27396:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;27473:24;;;;;:16;:24;;;;;;;27469:202;;27518:11;;-1:-1:-1;;;;;27547:17:0;;;27518:11;27547:17;;;:9;:17;;;;;;;;27518:47;;-1:-1:-1;;;27518:47:0;;;;;15928:51:1;;;;15995:18;;;15988:34;27518:11:0;;;:20;;15901:18:1;;27518:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27514:63;27596:16;;-1:-1:-1;;;;;27630:17:0;;;27596:16;27630:17;;;:9;:17;;;;;;;;27596:52;;-1:-1:-1;;;27596:52:0;;;;;15928:51:1;;;;15995:18;;;15988:34;27596:16:0;;;:25;;15901:18:1;;27596:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27592:68;;-1:-1:-1;;;;;27685:27:0;;;;;;:16;:27;;;;;;;;27681:217;;27733:11;;-1:-1:-1;;;;;27765:20:0;;;27733:11;27765:20;;;:9;:20;;;;;;;;27733:53;;-1:-1:-1;;;27733:53:0;;;;;15928:51:1;;;;15995:18;;;15988:34;27733:11:0;;;:20;;15901:18:1;;27733:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27729:69;27817:16;;-1:-1:-1;;;;;27854:20:0;;;27817:16;27854:20;;;:9;:20;;;;;;;;27817:58;;-1:-1:-1;;;27817:58:0;;;;;15928:51:1;;;;15995:18;;;15988:34;27817:16:0;;;:25;;15901:18:1;;27817:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27813:74;;37310:10;;:15;;27913:31;;;;-1:-1:-1;27927:17:0;;-1:-1:-1;;;27927:17:0;;;;27913:31;27910:104;;;27959:9;;:55;;-1:-1:-1;;;27959:55:0;;-1:-1:-1;;;;;17626:15:1;;;27959:55:0;;;17608:34:1;17678:15;;;17658:18;;;17651:43;17710:18;;;17703:34;;;27959:9:0;;;;:28;;17543:18:1;;27959:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27910:104;28049:9;-1:-1:-1;;;;;28032:43:0;28041:6;-1:-1:-1;;;;;28032:43:0;;28060:14;28032:43;;;;160:25:1;;148:2;133:18;;14:177;28032:43:0;;;;;;;;-1:-1:-1;28103:4:0;;26398:1717;-1:-1:-1;;;;26398:1717:0:o;33132:1706::-;23314:6;:13;;-1:-1:-1;;23314:13:0;23323:4;23314:13;;;33251:24:::1;::::0;33235:13:::1;::::0;23314:6;;33235:40:::1;::::0;::::1;:::i;:::-;33226:6;:49;:147;;33367:6;33226:147;;;33335:26;::::0;:28:::1;::::0;33362:1:::1;33335:28;:::i;:::-;33324:6;33315;33288:24;;:33;;;;:::i;:::-;:42;;;;:::i;:::-;33287:77;;;;:::i;:::-;33278:86;::::0;:6;:86:::1;:::i;:::-;33195:178;;33411:12;;33388:20;:35;33384:76;;;-1:-1:-1::0;33448:12:0::1;::::0;33384:76:::1;33493:4;33475:24;::::0;;;:9:::1;:24;::::0;;;;;:47;-1:-1:-1;33471:100:0::1;;;-1:-1:-1::0;33565:4:0::1;33547:24;::::0;;;:9:::1;:24;::::0;;;;;33471:100:::1;33608:16;::::0;;33622:1:::1;33608:16:::0;;;;;::::1;::::0;;33584:21:::1;::::0;33608:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33608:16:0::1;33584:40;;33653:4;33635;33640:1;33635:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33635:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;33679:4:::1;::::0;;33669:7;;33679:4;::::1;::::0;33669;;33679;33669:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;33669:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;33762:6:::1;::::0;:196:::1;::::0;-1:-1:-1;;;33762:196:0;;33728:21:::1;::::0;33762:6;;;::::1;::::0;:57:::1;::::0;:196:::1;::::0;33834:20;;33704:21:::1;::::0;33885:4;;33912::::1;::::0;33932:15:::1;::::0;33762:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33971:17;34015:13;33991:21;:37;;;;:::i;:::-;33971:57;;34041:17;34084:8;;34074:6;;34062:9;:18;;;;:::i;:::-;34061:31;;;;:::i;:::-;34041:51;;34103:23;34175:8;;34186:3;34175:14;;;;:::i;:::-;34158:12;::::0;34142:13:::1;::::0;34130:25:::1;::::0;:9;:25:::1;:::i;:::-;:40;;;;:::i;:::-;34129:61;;;;:::i;:::-;34103:87;;34201:23;34270:15;34258:8;;34241:13;;34229:9;:25;;;;:::i;:::-;34228:38;;;;:::i;:::-;34227:58;;;;:::i;:::-;34201:84;;34296:23;34410:8;;34396:10;;34384:9;:22;;;;:::i;:::-;34383:35;;;;:::i;:::-;34365:15:::0;34335:27:::1;34347:15:::0;34335:9;:27:::1;:::i;:::-;:45;;;;:::i;:::-;:83;;;;:::i;:::-;34322:97;::::0;:9;:97:::1;:::i;:::-;34444:13;::::0;34296:123;;-1:-1:-1;34444:13:0::1;;:36:::0;::::1;;;;34479:1;34461:15;:19;34444:36;34440:208;;;34500:11;;;;;;;;;-1:-1:-1::0;;;;;34500:11:0::1;-1:-1:-1::0;;;;;34500:19:0::1;;34527:15;34500:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;34496:61:::0;34575:16:::1;;;;;;;;;-1:-1:-1::0;;;;;34575:16:0::1;-1:-1:-1::0;;;;;34575:24:0::1;;34607:15;34575:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;34571:66:::0;::::1;34672:19:::0;;34668:84:::1;;34706:20;::::0;:46:::1;::::0;-1:-1:-1;;;;;34706:20:0;;::::1;::::0;:46;::::1;;;::::0;34736:15;;34706:20:::1;:46:::0;:20;:46;34736:15;34706:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34668:84;34768:13:::0;;34765:65:::1;;34796:14;::::0;:34:::1;::::0;:14:::1;::::0;;::::1;-1:-1:-1::0;;;;;34796:14:0::1;::::0;:34:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;:14;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34765:65;-1:-1:-1::0;;23332:6:0;:14;;-1:-1:-1;;23332:14:0;;;-1:-1:-1;;;;;;;33132:1706:0:o;30836:571::-;30901:7;30921:15;30939:14;30954:1;30939:17;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;-1:-1:-1;;;30939:36:0;;-1:-1:-1;;;;;8140:32:1;;;30939:36:0;;;8122:51:1;30939:17:0;;;;:27;;8095:18:1;;30939:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30921:54;-1:-1:-1;30986:16:0;;31013:361;31034:14;:21;31030:25;;31013:361;;;31087:14;31102:1;31087:17;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;-1:-1:-1;;;31087:36:0;;-1:-1:-1;;;;;8140:32:1;;;31087:36:0;;;8122:51:1;31087:17:0;;;;:27;;8095:18:1;;31087:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31077:46;;31152:22;31175:1;31152:25;;;;;;;;:::i;:::-;;;;;;;;;31142:7;:35;31138:76;;;31189:22;31212:1;31189:25;;;;;;;;:::i;:::-;;;;;;;;;31179:35;;31138:76;31233:11;;31229:133;;31336:22;31359:1;31336:25;;;;;;;;:::i;:::-;;;;;;;;;31313:20;;:48;;;;:::i;:::-;31290:18;;31280:7;31269:8;;:18;;;;:::i;:::-;:39;;;;:::i;:::-;31268:94;;;;:::i;:::-;31257:105;;:8;:105;:::i;:::-;31246:116;;31229:133;31057:3;;;;:::i;:::-;;;;31013:361;;;-1:-1:-1;31391:8:0;30836:571;-1:-1:-1;;;30836:571:0:o;36389:361::-;23314:6;:13;;-1:-1:-1;;23314:13:0;23323:4;23314:13;;;36489:16:::1;::::0;;36503:1:::1;36489:16:::0;;;;;::::1;::::0;;-1:-1:-1;;36489:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;36526:4:0::1;::::0;36516:7;;;;-1:-1:-1;;;;;;36526:4:0::1;::::0;36516:7;;-1:-1:-1;36526:4:0::1;::::0;36516:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;36516:14:0::1;;;-1:-1:-1::0;;;;;36516:14:0::1;;;::::0;::::1;36559:4;36541;36546:1;36541:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36541:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;36577:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;36577:165:0;;:6;::::1;::::0;:57:::1;::::0;36642:6;;36577:165:::1;::::0;:6:::1;::::0;36680:4;;36699:2;;36716:15:::1;::::0;36577:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;23332:6:0;:14;;-1:-1:-1;;23332:14:0;;;-1:-1:-1;;;;;;36389:361:0:o;718:619::-;778:4;1246:20;;1089:66;1286:23;;;;;;:42;;-1:-1:-1;;1313:15:0;;;1278:51;-1:-1:-1;;718:619:0:o;28123:300::-;-1:-1:-1;;;;;28253:17:0;;28216:4;28253:17;;;:9;:17;;;;;;:26;;28273:6;;28253:26;:::i;:::-;-1:-1:-1;;;;;28233:17:0;;;;;;;:9;:17;;;;;;:46;;;;28313:20;;;;;;;:29;;28336:6;;28313:29;:::i;:::-;-1:-1:-1;;;;;28290:20:0;;;;;;;:9;:20;;;;;;;:52;;;;28358:35;;;;;;;;;;28386:6;160:25:1;;148:2;133:18;;14:177;28358:35:0;;;;;;;;-1:-1:-1;28411:4:0;28123:300;;;;;:::o;28901:166::-;28998:12;;28988:6;:22;;:49;;;-1:-1:-1;;;;;;29014:23:0;;;;;;:15;:23;;;;;;;;28988:49;28980:79;;;;-1:-1:-1;;;28980:79:0;;19768:2:1;28980:79:0;;;19750:21:1;19807:2;19787:18;;;19780:30;-1:-1:-1;;;19826:18:1;;;19819:47;19883:18;;28980:79:0;19566:341:1;28435:458:0;28543:14;;28572:18;;:22;28568:213;;28611:16;28630:26;28646:9;28630:15;:26::i;:::-;28611:45;-1:-1:-1;28675:12:0;;28671:98;;28761:8;;28735:22;28749:8;28735:11;:22;:::i;:::-;28734:35;;;;:::i;:::-;28720:49;;:11;:49;:::i;:::-;28706:63;;28671:98;28596:185;28568:213;-1:-1:-1;;;;;28799:20:0;;;;;;:9;:20;;;;;;28832:11;;28799:29;;28822:6;;28799:29;:::i;:::-;:44;;28791:94;;;;-1:-1:-1;;;28791:94:0;;20114:2:1;28791:94:0;;;20096:21:1;20153:2;20133:18;;;20126:30;20192:34;20172:18;;;20165:62;-1:-1:-1;;;20243:18:1;;;20236:35;20288:19;;28791:94:0;19912:401:1;28791:94:0;28510:383;28435:458;;:::o;32390:482::-;32587:14;;32551:4;;32476:7;;;;32526:57;;-1:-1:-1;;;;;32538:17:0;;;32551:4;;32538:17;32557:6;32538:9;32576:6;32526:11;:57::i;:::-;32517:66;;:6;:66;:::i;:::-;32516:85;;;;:::i;:::-;32629:4;;32496:105;;-1:-1:-1;;;;;;32616:17:0;;;32629:4;;32616:17;32612:81;;;-1:-1:-1;;;;;32650:16:0;;;;;;:8;:16;;;;;32669:12;32650:31;;32612:81;32750:4;32732:24;;;;:9;:24;;;;;;:36;;32759:9;;32732:36;:::i;:::-;32723:4;32705:24;;;;:9;:24;;;;;;;:63;;;;32784:42;;-1:-1:-1;;;;;32784:42:0;;;;;;;32816:9;160:25:1;;148:2;133:18;;14:177;32784:42:0;;;;;;;;32846:18;32855:9;32846:6;:18;:::i;:::-;32839:25;32390:482;-1:-1:-1;;;;;32390:482:0:o;32880:244::-;32984:4;;32946;;-1:-1:-1;;;;;32984:4:0;32970:10;:18;;;;:38;;-1:-1:-1;33002:6:0;;;;33001:7;32970:38;:62;;;;-1:-1:-1;33021:11:0;;-1:-1:-1;;;33021:11:0;;;;32970:62;:92;;;;-1:-1:-1;33058:4:0;;-1:-1:-1;;;;;33045:17:0;;;33058:4;;33045:17;32970:92;:146;;;;-1:-1:-1;33103:13:0;;33093:4;33075:24;;;;:9;:24;;;;;;:41;;32963:153;32880:244;-1:-1:-1;;32880:244:0:o;34846:349::-;34953:4;;34915;;-1:-1:-1;;;;;34953:4:0;34939:10;:18;;;;:42;;-1:-1:-1;34975:6:0;;;;34974:7;34939:42;:77;;;;-1:-1:-1;34998:18:0;;;;34939:77;:155;;;;;35082:12;35056:22;;35033:20;;:45;;;;:::i;:::-;:61;;34939:155;:189;;;;-1:-1:-1;35124:4:0;;-1:-1:-1;;;;;35111:17:0;;;35124:4;;35111:17;34939:189;:248;;;;;35170:17;;35145:21;:42;;34932:255;34846:349;-1:-1:-1;;34846:349:0:o;36081:300::-;36141:17;;36160:4;;36131:34;;36141:17;-1:-1:-1;;;;;36160:4:0;36131:9;:34::i;:::-;36199:12;36176:20;:35;36272:17;;36247:22;;:42;;36272:17;36247:42;:::i;:::-;36222:22;:67;;;36328:14;;-1:-1:-1;36300:74:0;;;36345:18;:26;;-1:-1:-1;;36345:26:0;;;36300:74;36081:300::o;-1:-1:-1:-;;;;;;;;:::o;196:118:1:-;282:5;275:13;268:21;261:5;258:32;248:60;;304:1;301;294:12;319:446;402:6;410;418;426;479:3;467:9;458:7;454:23;450:33;447:53;;;496:1;493;486:12;447:53;535:9;522:23;554:28;576:5;554:28;:::i;:::-;601:5;653:2;638:18;;625:32;;-1:-1:-1;704:2:1;689:18;;676:32;;755:2;740:18;727:32;;-1:-1:-1;319:446:1;-1:-1:-1;;;319:446:1:o;770:597::-;882:4;911:2;940;929:9;922:21;972:6;966:13;1015:6;1010:2;999:9;995:18;988:34;1040:1;1050:140;1064:6;1061:1;1058:13;1050:140;;;1159:14;;;1155:23;;1149:30;1125:17;;;1144:2;1121:26;1114:66;1079:10;;1050:140;;;1208:6;1205:1;1202:13;1199:91;;;1278:1;1273:2;1264:6;1253:9;1249:22;1245:31;1238:42;1199:91;-1:-1:-1;1351:2:1;1330:15;-1:-1:-1;;1326:29:1;1311:45;;;;1358:2;1307:54;;770:597;-1:-1:-1;;;770:597:1:o;1372:173::-;1440:20;;-1:-1:-1;;;;;1489:31:1;;1479:42;;1469:70;;1535:1;1532;1525:12;1469:70;1372:173;;;:::o;1550:254::-;1618:6;1626;1679:2;1667:9;1658:7;1654:23;1650:32;1647:52;;;1695:1;1692;1685:12;1647:52;1718:29;1737:9;1718:29;:::i;:::-;1708:39;1794:2;1779:18;;;;1766:32;;-1:-1:-1;;;1550:254:1:o;2001:248::-;2069:6;2077;2130:2;2118:9;2109:7;2105:23;2101:32;2098:52;;;2146:1;2143;2136:12;2098:52;-1:-1:-1;;2169:23:1;;;2239:2;2224:18;;;2211:32;;-1:-1:-1;2001:248:1:o;2254:241::-;2310:6;2363:2;2351:9;2342:7;2338:23;2334:32;2331:52;;;2379:1;2376;2369:12;2331:52;2418:9;2405:23;2437:28;2459:5;2437:28;:::i;2500:260::-;2568:6;2576;2629:2;2617:9;2608:7;2604:23;2600:32;2597:52;;;2645:1;2642;2635:12;2597:52;2668:29;2687:9;2668:29;:::i;:::-;2658:39;;2716:38;2750:2;2739:9;2735:18;2716:38;:::i;:::-;2706:48;;2500:260;;;;;:::o;2765:328::-;2842:6;2850;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:52;;;2927:1;2924;2917:12;2879:52;2950:29;2969:9;2950:29;:::i;:::-;2940:39;;2998:38;3032:2;3021:9;3017:18;2998:38;:::i;:::-;2988:48;;3083:2;3072:9;3068:18;3055:32;3045:42;;2765:328;;;;;:::o;3098:186::-;3157:6;3210:2;3198:9;3189:7;3185:23;3181:32;3178:52;;;3226:1;3223;3216:12;3178:52;3249:29;3268:9;3249:29;:::i;3542:180::-;3601:6;3654:2;3642:9;3633:7;3629:23;3625:32;3622:52;;;3670:1;3667;3660:12;3622:52;-1:-1:-1;3693:23:1;;3542:180;-1:-1:-1;3542:180:1:o;3916:315::-;3981:6;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;4081:29;4100:9;4081:29;:::i;:::-;4071:39;;4160:2;4149:9;4145:18;4132:32;4173:28;4195:5;4173:28;:::i;:::-;4220:5;4210:15;;;3916:315;;;;;:::o;4236:127::-;4297:10;4292:3;4288:20;4285:1;4278:31;4328:4;4325:1;4318:15;4352:4;4349:1;4342:15;4368:275;4439:2;4433:9;4504:2;4485:13;;-1:-1:-1;;4481:27:1;4469:40;;4539:18;4524:34;;4560:22;;;4521:62;4518:88;;;4586:18;;:::i;:::-;4622:2;4615:22;4368:275;;-1:-1:-1;4368:275:1:o;4648:183::-;4708:4;4741:18;4733:6;4730:30;4727:56;;;4763:18;;:::i;:::-;-1:-1:-1;4808:1:1;4804:14;4820:4;4800:25;;4648:183::o;4836:662::-;4890:5;4943:3;4936:4;4928:6;4924:17;4920:27;4910:55;;4961:1;4958;4951:12;4910:55;4997:6;4984:20;5023:4;5047:60;5063:43;5103:2;5063:43;:::i;:::-;5047:60;:::i;:::-;5141:15;;;5227:1;5223:10;;;;5211:23;;5207:32;;;5172:12;;;;5251:15;;;5248:35;;;5279:1;5276;5269:12;5248:35;5315:2;5307:6;5303:15;5327:142;5343:6;5338:3;5335:15;5327:142;;;5409:17;;5397:30;;5447:12;;;;5360;;5327:142;;;-1:-1:-1;5487:5:1;4836:662;-1:-1:-1;;;;;;4836:662:1:o;5503:1146::-;5621:6;5629;5682:2;5670:9;5661:7;5657:23;5653:32;5650:52;;;5698:1;5695;5688:12;5650:52;5738:9;5725:23;5767:18;5808:2;5800:6;5797:14;5794:34;;;5824:1;5821;5814:12;5794:34;5862:6;5851:9;5847:22;5837:32;;5907:7;5900:4;5896:2;5892:13;5888:27;5878:55;;5929:1;5926;5919:12;5878:55;5965:2;5952:16;5987:4;6011:60;6027:43;6067:2;6027:43;:::i;6011:60::-;6105:15;;;6187:1;6183:10;;;;6175:19;;6171:28;;;6136:12;;;;6211:19;;;6208:39;;;6243:1;6240;6233:12;6208:39;6267:11;;;;6287:148;6303:6;6298:3;6295:15;6287:148;;;6369:23;6388:3;6369:23;:::i;:::-;6357:36;;6320:12;;;;6413;;;;6287:148;;;6454:5;-1:-1:-1;;6497:18:1;;6484:32;;-1:-1:-1;;6528:16:1;;;6525:36;;;6557:1;6554;6547:12;6525:36;;6580:63;6635:7;6624:8;6613:9;6609:24;6580:63;:::i;:::-;6570:73;;;5503:1146;;;;;:::o;6654:458::-;6737:6;6745;6753;6761;6814:3;6802:9;6793:7;6789:23;6785:33;6782:53;;;6831:1;6828;6821:12;6782:53;6870:9;6857:23;6889:28;6911:5;6889:28;:::i;:::-;6936:5;-1:-1:-1;6960:38:1;6994:2;6979:18;;6960:38;:::i;:::-;6950:48;;7017:38;7051:2;7040:9;7036:18;7017:38;:::i;:::-;6654:458;;;;-1:-1:-1;7007:48:1;;7102:2;7087:18;7074:32;;-1:-1:-1;;6654:458:1:o;7117:309::-;7182:6;7190;7243:2;7231:9;7222:7;7218:23;7214:32;7211:52;;;7259:1;7256;7249:12;7211:52;7295:9;7282:23;7272:33;;7355:2;7344:9;7340:18;7327:32;7368:28;7390:5;7368:28;:::i;7431:523::-;7535:6;7543;7551;7559;7567;7575;7628:3;7616:9;7607:7;7603:23;7599:33;7596:53;;;7645:1;7642;7635:12;7596:53;-1:-1:-1;;7668:23:1;;;7738:2;7723:18;;7710:32;;-1:-1:-1;7789:2:1;7774:18;;7761:32;;7840:2;7825:18;;7812:32;;-1:-1:-1;7891:3:1;7876:19;;7863:33;;-1:-1:-1;7943:3:1;7928:19;7915:33;;-1:-1:-1;7431:523:1;-1:-1:-1;7431:523:1:o;9852:385::-;9938:6;9946;9954;9962;10015:3;10003:9;9994:7;9990:23;9986:33;9983:53;;;10032:1;10029;10022:12;9983:53;-1:-1:-1;;10055:23:1;;;10125:2;10110:18;;10097:32;;-1:-1:-1;10176:2:1;10161:18;;10148:32;;10227:2;10212:18;10199:32;;-1:-1:-1;9852:385:1;-1:-1:-1;9852:385:1:o;10242:309::-;10307:6;10315;10368:2;10356:9;10347:7;10343:23;10339:32;10336:52;;;10384:1;10381;10374:12;10336:52;10423:9;10410:23;10442:28;10464:5;10442:28;:::i;10782:356::-;10984:2;10966:21;;;11003:18;;;10996:30;11062:34;11057:2;11042:18;;11035:62;11129:2;11114:18;;10782:356::o;11143:127::-;11204:10;11199:3;11195:20;11192:1;11185:31;11235:4;11232:1;11225:15;11259:4;11256:1;11249:15;11275:168;11315:7;11381:1;11377;11373:6;11369:14;11366:1;11363:21;11358:1;11351:9;11344:17;11340:45;11337:71;;;11388:18;;:::i;:::-;-1:-1:-1;11428:9:1;;11275:168::o;11448:217::-;11488:1;11514;11504:132;;11558:10;11553:3;11549:20;11546:1;11539:31;11593:4;11590:1;11583:15;11621:4;11618:1;11611:15;11504:132;-1:-1:-1;11650:9:1;;11448:217::o;11670:125::-;11710:4;11738:1;11735;11732:8;11729:34;;;11743:18;;:::i;:::-;-1:-1:-1;11780:9:1;;11670:125::o;11800:184::-;11870:6;11923:2;11911:9;11902:7;11898:23;11894:32;11891:52;;;11939:1;11936;11929:12;11891:52;-1:-1:-1;11962:16:1;;11800:184;-1:-1:-1;11800:184:1:o;11989:128::-;12029:3;12060:1;12056:6;12053:1;12050:13;12047:39;;;12066:18;;:::i;:::-;-1:-1:-1;12102:9:1;;11989:128::o;12472:127::-;12533:10;12528:3;12524:20;12521:1;12514:31;12564:4;12561:1;12554:15;12588:4;12585:1;12578:15;12604:422;12693:1;12736:5;12693:1;12750:270;12771:7;12761:8;12758:21;12750:270;;;12830:4;12826:1;12822:6;12818:17;12812:4;12809:27;12806:53;;;12839:18;;:::i;:::-;12889:7;12879:8;12875:22;12872:55;;;12909:16;;;;12872:55;12988:22;;;;12948:15;;;;12750:270;;;12754:3;12604:422;;;;;:::o;13031:806::-;13080:5;13110:8;13100:80;;-1:-1:-1;13151:1:1;13165:5;;13100:80;13199:4;13189:76;;-1:-1:-1;13236:1:1;13250:5;;13189:76;13281:4;13299:1;13294:59;;;;13367:1;13362:130;;;;13274:218;;13294:59;13324:1;13315:10;;13338:5;;;13362:130;13399:3;13389:8;13386:17;13383:43;;;13406:18;;:::i;:::-;-1:-1:-1;;13462:1:1;13448:16;;13477:5;;13274:218;;13576:2;13566:8;13563:16;13557:3;13551:4;13548:13;13544:36;13538:2;13528:8;13525:16;13520:2;13514:4;13511:12;13507:35;13504:77;13501:159;;;-1:-1:-1;13613:19:1;;;13645:5;;13501:159;13692:34;13717:8;13711:4;13692:34;:::i;:::-;13762:6;13758:1;13754:6;13750:19;13741:7;13738:32;13735:58;;;13773:18;;:::i;:::-;13811:20;;13031:806;-1:-1:-1;;;13031:806:1:o;13842:140::-;13900:5;13929:47;13970:4;13960:8;13956:19;13950:4;13929:47;:::i;13987:135::-;14026:3;-1:-1:-1;;14047:17:1;;14044:43;;;14067:18;;:::i;:::-;-1:-1:-1;14114:1:1;14103:13;;13987:135::o;14127:338::-;14329:2;14311:21;;;14368:2;14348:18;;;14341:30;-1:-1:-1;;;14402:2:1;14387:18;;14380:44;14456:2;14441:18;;14127:338::o;15207:127::-;15268:10;15263:3;15259:20;15256:1;15249:31;15299:4;15296:1;15289:15;15323:4;15320:1;15313:15;17748:245;17815:6;17868:2;17856:9;17847:7;17843:23;17839:32;17836:52;;;17884:1;17881;17874:12;17836:52;17916:9;17910:16;17935:28;17957:5;17935:28;:::i;17998:461::-;18051:3;18089:5;18083:12;18116:6;18111:3;18104:19;18142:4;18171:2;18166:3;18162:12;18155:19;;18208:2;18201:5;18197:14;18229:1;18239:195;18253:6;18250:1;18247:13;18239:195;;;18318:13;;-1:-1:-1;;;;;18314:39:1;18302:52;;18374:12;;;;18409:15;;;;18350:1;18268:9;18239:195;;;-1:-1:-1;18450:3:1;;17998:461;-1:-1:-1;;;;;17998:461:1:o;18464:582::-;18763:6;18752:9;18745:25;18806:6;18801:2;18790:9;18786:18;18779:34;18849:3;18844:2;18833:9;18829:18;18822:31;18726:4;18870:57;18922:3;18911:9;18907:19;18899:6;18870:57;:::i;:::-;-1:-1:-1;;;;;18963:32:1;;;;18958:2;18943:18;;18936:60;-1:-1:-1;19027:3:1;19012:19;19005:35;18862:65;18464:582;-1:-1:-1;;;18464:582:1:o;19051:510::-;19322:6;19311:9;19304:25;19365:3;19360:2;19349:9;19345:18;19338:31;19285:4;19386:57;19438:3;19427:9;19423:19;19415:6;19386:57;:::i;:::-;-1:-1:-1;;;;;19479:32:1;;;;19474:2;19459:18;;19452:60;-1:-1:-1;19543:2:1;19528:18;19521:34;19378:65;19051:510;-1:-1:-1;;19051:510:1:o

Swarm Source

ipfs://7aab0d07b4581e45527a502f3d0679fd86ae756e2ac723616248855bffe07af0

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.