ETH Price: $2,486.62 (+0.97%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Increment Curren...226448172025-06-06 9:59:2322 hrs ago1749203963IN
0x0c02439D...00FBE8800
0 ETH0.000479051.7452728
Buy With ETH Wer...226394852025-06-05 16:05:2340 hrs ago1749139523IN
0x0c02439D...00FBE8800
0.00386647 ETH0.001101736.54806403
Increment Curren...226233952025-06-03 10:00:593 days ago1748944859IN
0x0c02439D...00FBE8800
0 ETH0.001104933.33806735
Buy With Eth225948122025-05-30 9:59:477 days ago1748599187IN
0x0c02439D...00FBE8800
0.00017759 ETH0.000606533.42695887
Buy With Eth225944882025-05-30 8:54:117 days ago1748595251IN
0x0c02439D...00FBE8800
0.001 ETH0.000826394.09126145
Transfer Ownersh...225937182025-05-30 6:19:118 days ago1748585951IN
0x0c02439D...00FBE8800
0 ETH0.000099423.46140086
Set Splits225894452025-05-29 15:58:358 days ago1748534315IN
0x0c02439D...00FBE8800
0 ETH0.000814175.03503162
Buy With Eth225875752025-05-29 9:40:358 days ago1748511635IN
0x0c02439D...00FBE8800
0.001 ETH0.000614372.11289466
Buy With USDT225738292025-05-27 11:29:4710 days ago1748345387IN
0x0c02439D...00FBE8800
0 ETH0.000532622.43110099
Buy With USDC225738282025-05-27 11:29:3510 days ago1748345375IN
0x0c02439D...00FBE8800
0 ETH0.000586052.46150837
Buy With Eth225738252025-05-27 11:28:5910 days ago1748345339IN
0x0c02439D...00FBE8800
0.1 ETH0.000886212.4846459
Start Claim225738232025-05-27 11:28:3510 days ago1748345315IN
0x0c02439D...00FBE8800
0 ETH0.000519013.59764829
Buy With USDC225737642025-05-27 11:16:2310 days ago1748344583IN
0x0c02439D...00FBE8800
0 ETH0.000232051.97095718
Buy With USDT225737632025-05-27 11:16:1110 days ago1748344571IN
0x0c02439D...00FBE8800
0 ETH0.000237022.04611238
Buy With USDC225737622025-05-27 11:15:5910 days ago1748344559IN
0x0c02439D...00FBE8800
0 ETH0.000225981.91942888
Buy With Eth225737462025-05-27 11:12:4710 days ago1748344367IN
0x0c02439D...00FBE8800
0.1 ETH0.000356952.03670737
Whitelist Users ...225735672025-05-27 10:36:5910 days ago1748342219IN
0x0c02439D...00FBE8800
0 ETH0.000140372
Set Sanctions225735672025-05-27 10:36:5910 days ago1748342219IN
0x0c02439D...00FBE8800
0 ETH0.000093112
Set Admin225735672025-05-27 10:36:5910 days ago1748342219IN
0x0c02439D...00FBE8800
0 ETH0.000092392

Latest 18 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer226394852025-06-05 16:05:2340 hrs ago1749139523
0x0c02439D...00FBE8800
0.00003828 ETH
Transfer226394852025-06-05 16:05:2340 hrs ago1749139523
0x0c02439D...00FBE8800
1 wei
Transfer226394852025-06-05 16:05:2340 hrs ago1749139523
0x0c02439D...00FBE8800
0.0001914 ETH
Transfer226394852025-06-05 16:05:2340 hrs ago1749139523
0x0c02439D...00FBE8800
0.00363677 ETH
Transfer225948122025-05-30 9:59:477 days ago1748599187
0x0c02439D...00FBE8800
0.00000175 ETH
Transfer225948122025-05-30 9:59:477 days ago1748599187
0x0c02439D...00FBE8800
1 wei
Transfer225948122025-05-30 9:59:477 days ago1748599187
0x0c02439D...00FBE8800
0.00000879 ETH
Transfer225948122025-05-30 9:59:477 days ago1748599187
0x0c02439D...00FBE8800
0.00016704 ETH
Transfer225944882025-05-30 8:54:117 days ago1748595251
0x0c02439D...00FBE8800
0.00001719 ETH
Transfer225944882025-05-30 8:54:117 days ago1748595251
0x0c02439D...00FBE8800
1 wei
Transfer225944882025-05-30 8:54:117 days ago1748595251
0x0c02439D...00FBE8800
0.00004914 ETH
Transfer225944882025-05-30 8:54:117 days ago1748595251
0x0c02439D...00FBE8800
0.00093366 ETH
Transfer225875752025-05-29 9:40:358 days ago1748511635
0x0c02439D...00FBE8800
0.00001964 ETH
Transfer225875752025-05-29 9:40:358 days ago1748511635
0x0c02439D...00FBE8800
0.00098035 ETH
Transfer225738252025-05-27 11:28:5910 days ago1748345339
0x0c02439D...00FBE8800
0.09825491 ETH
Transfer225738252025-05-27 11:28:5910 days ago1748345339
0x0c02439D...00FBE8800
0.00174508 ETH
Transfer225737462025-05-27 11:12:4710 days ago1748344367
0x0c02439D...00FBE8800
0.09825491 ETH
Transfer225737462025-05-27 11:12:4710 days ago1748344367
0x0c02439D...00FBE8800
0.00174508 ETH

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Presale

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-05-27
*/

// SPDX-License-Identifier: MIT
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}


// File contracts/ETH/PresaleV1.sol

//               _    _____                                        _
// __      _____| |__|___ / _ __   __ _ _   _ _ __ ___   ___ _ __ | |_ ___
// \ \ /\ / / _ \ '_ \ |_ \| '_ \ / _` | | | | '_ ` _ \ / _ \ '_ \| __/ __|
//  \ V  V /  __/ |_) |__) | |_) | (_| | |_| | | | | | |  __/ | | | |_\__ \
//   \_/\_/ \___|_.__/____/| .__/ \__,_|\__, |_| |_| |_|\___|_| |_|\__|___/
//                         |_|          |___/
//
pragma solidity 0.8.9;
interface Aggregator {
  function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

interface StakingManager {
  function depositByPresale(address _user, uint256 _amount) external;
}

interface ISanctionsList {
  function isSanctioned(address addr) external view returns (bool);
}

contract Presale is ReentrancyGuard, Ownable, Pausable {
  // Structs for input grouping only
  struct ContractAddresses {
    address oracle;
    address usdt;
    address usdc;
  }

  struct PresaleConfig {
    uint256 startTime;
    uint256 maxTokensToBuy;
    bool dynamicTimeFlag;
    uint256 timeConstant;
  }

  // Presale config
  uint256 public startTime;
  uint256 public claimStart;
  uint256 public maxTokensToBuy;
  uint256 public baseDecimals;
  bool public dynamicTimeFlag;
  uint256 public timeConstant;

  // Token and payment tracking
  uint256 public totalTokensSold;
  uint256 public totalBoughtAndStaked;
  uint256 public usdRaised;
  address public saleToken;
  address public paymentWallet;
  address public admin;
  address public manager;

  // Round and checkpoint data
  uint256 public currentStep;
  uint256 public checkPoint;
  uint256[][3] public rounds;
  uint256[] public prevCheckpoints;
  uint256[] public remainingTokensTracker;
  uint256[] public percentages;
  address[] public wallets;

  // Interfaces
  IERC20 public USDTInterface;
  IERC20 public USDCInterface;
  Aggregator public aggregatorInterface;
  StakingManager public stakingManagerInterface;
  ISanctionsList public sanctionsList;

  // Flags and lists
  bool public applySanctions;
  bool public stakingWhitelistStatus;

  //New Variables
  address public web3PaymentWallet;
  uint256 public web3PaymentPercentage;
  uint256 public referrerPercentage;
  uint256 public initialReferrerPercentage;
  bool public referrersMustBeBuyers;
  bool public payInitialReferrers;
  uint256 public seededAmount;
  uint256 public seededUsers;

  mapping(address => uint256) public userDeposits;
  mapping(address => bool) public hasClaimed;
  mapping(address => bool) public isBlacklisted;
  mapping(address => bool) public isWhitelisted;
  mapping(address => bool) public wertWhitelisted;
  mapping(address => bool) public blacklistedReferrers;
  mapping(address => address) public initialReferrers;

  // Events
  event SaleTokenUpdated(address token);
  event SaleTimeSet(uint256 _start, uint256 timestamp);
  event SaleTimeUpdated(bytes32 indexed key, uint256 prevValue, uint256 newValue, uint256 timestamp);
  event TokensBought(address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 usdEq, uint256 timestamp);
  event TokensAdded(address indexed token, uint256 noOfTokens, uint256 timestamp);
  event TokensClaimed(address indexed user, uint256 amount, uint256 timestamp);
  event ClaimStartUpdated(uint256 prevValue, uint256 newValue, uint256 timestamp);
  event TokensBoughtAndStaked(address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 usdEq, uint256 timestamp);
  event TokensClaimedAndStaked(address indexed user, uint256 amount, uint256 timestamp);

  /**
   * @notice Constructor for the Presale contract.
   * @param _contracts Struct containing addresses of external contracts (oracle, USDT, USDC).
   * @param _config Struct containing configuration parameters for the presale (start/end times, max tokens, etc.).
   * @param _rounds A 3-dimensional array defining the rounds of the presale, containing price tiers or limits per round.
   */
  constructor(ContractAddresses memory _contracts, PresaleConfig memory _config, uint256[][3] memory _rounds) {
    // --- Input Validations ---
    require(_contracts.oracle != address(0), 'Zero aggregator address');
    require(_contracts.usdt != address(0), 'Zero USDT address');
    require(_contracts.usdc != address(0), 'Zero USDC address');
    require(_config.startTime > block.timestamp, 'Invalid time');

    // --- Contract Interface Initializations ---
    aggregatorInterface = Aggregator(_contracts.oracle);
    USDTInterface = IERC20(_contracts.usdt);
    USDCInterface = IERC20(_contracts.usdc);

    // --- State Variable Initializations ---
    baseDecimals = (10 ** 18);
    startTime = _config.startTime;
    rounds = _rounds;
    maxTokensToBuy = _config.maxTokensToBuy;
    paymentWallet = msg.sender;
    dynamicTimeFlag = _config.dynamicTimeFlag;
    timeConstant = _config.timeConstant;
    manager = msg.sender;

    // --- Event Emission ---
    emit SaleTimeSet(startTime, block.timestamp);
  }

  //Role Check Functions
  //Info : Used functions instead of modifiers to reduce contract size

  function _onlyManagerOrOwner() internal view {
    require(msg.sender == manager || msg.sender == owner(), 'caller not manager or owner');
  }

  function _onlyAdminOrManagerOrOwner() internal view {
    require(msg.sender == admin || msg.sender == manager || msg.sender == owner(), 'caller not admin, manager or owner');
  }

  function _onlyManager() internal view {
    require(msg.sender == manager, 'caller not manager');
  }

  /**
   * @dev To pause the presale
   */
  function pause() external {
    _onlyManagerOrOwner();
    _pause();
  }

  /**
   * @dev To unpause the presale
   */
  function unpause() external {
    _onlyManagerOrOwner();
    _unpause();
  }

  /**
   * @dev To calculate the price in USD for given amount of tokens.
   * @param _amount No of tokens
   */
  function calculatePrice(uint256 _amount) public view returns (uint256) {
    uint256 USDTAmount;
    uint256 total = checkPoint == 0 ? totalTokensSold : checkPoint;
    require(_amount <= maxTokensToBuy, 'Amount exceeds max tokens to buy');
    if (_amount + total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) {
      require(currentStep < (rounds[0].length - 1), 'Wrong params');
      if (block.timestamp >= rounds[2][currentStep]) {
        require(rounds[0][currentStep] + _amount <= rounds[0][currentStep + 1], 'Cant Purchase More in individual tx');
        USDTAmount = _amount * rounds[1][currentStep + 1];
      } else {
        uint256 tokenAmountForCurrentPrice = rounds[0][currentStep] - total;
        USDTAmount = tokenAmountForCurrentPrice * rounds[1][currentStep] + (_amount - tokenAmountForCurrentPrice) * rounds[1][currentStep + 1];
      }
    } else USDTAmount = _amount * rounds[1][currentStep];
    return USDTAmount;
  }

  /**
   * @dev To update the sale times
   * @param _startTime New start time
   */
  function changeSaleTimes(uint256 _startTime) external {
    _onlyManagerOrOwner();
    require(_startTime > 0, 'Invalid parameters');
    require(block.timestamp < _startTime, 'Sale time in past');
    uint256 prevValue = startTime;
    startTime = _startTime;
    emit SaleTimeUpdated(bytes32('START'), prevValue, _startTime, block.timestamp);
  }

  /**
   * @dev To get latest ETH price in 10**18 format
   */
  function getLatestPrice() public view returns (uint256) {
    (, int256 price, , , ) = aggregatorInterface.latestRoundData();
    price = (price * (10 ** 10));
    return uint256(price);
  }

  function setSplits(address[] memory _wallets, uint256[] memory _percentages) public {
    _onlyManager();
    require(_wallets.length == _percentages.length, 'Mismatched arrays');
    delete wallets;
    delete percentages;
    uint256 totalPercentage = 0;

    for (uint256 i = 0; i < _wallets.length; i++) {
      require(_percentages[i] > 0, 'Percentage must be greater than 0');
      totalPercentage += _percentages[i];
      wallets.push(_wallets[i]);
      percentages.push(_percentages[i]);
    }

    require(totalPercentage == 100000, 'Total percentage must equal 100');
  }

  modifier checkSaleState(uint256 amount) {
    require(block.timestamp >= startTime, 'Invalid time for buying');
    require(amount > 0, 'Invalid sale amount');
    _;
  }

  /**
   * @dev To buy into a presale using USDT
   * @param amount No of tokens to buy
   * @param stake boolean flag for token staking
   * @param referrer Address of referrer, can pass zero address if no referrer
   */
  function buyWithUSDT(uint256 amount, bool stake, address referrer) external checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused returns (bool) {
    uint256 usdPrice = calculatePrice(amount);
    totalTokensSold += amount;
    uint256 price = usdPrice / (10 ** 12);
    if (checkPoint != 0) checkPoint += amount;
    uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint;
    if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) {
      if (block.timestamp >= rounds[2][currentStep]) {
        checkPoint = rounds[0][currentStep] + amount;
      }
      if (dynamicTimeFlag) {
        manageTimeDiff();
      }
      uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount;
      remainingTokensTracker.push(unsoldTokens);
      currentStep += 1;
    }
    if (stake) {
      if (stakingWhitelistStatus) {
        require(isWhitelisted[_msgSender()], 'User not whitelisted for stake');
      }
      stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals);
      totalBoughtAndStaked += amount;
      emit TokensBoughtAndStaked(_msgSender(), amount, address(USDTInterface), price, usdPrice, block.timestamp);
    } else {
      userDeposits[_msgSender()] += (amount * baseDecimals);
      emit TokensBought(_msgSender(), amount, address(USDTInterface), price, usdPrice, block.timestamp);
    }
    usdRaised += usdPrice;
    uint256 ourAllowance = USDTInterface.allowance(_msgSender(), address(this));
    require(price <= ourAllowance, 'Make sure to add enough allowance');
    splitUSDTValue(price, referrer);

    return true;
  }

  /**
   * @dev To buy into a presale using USDC
   * @param amount No of tokens to buy
   * @param stake boolean flag for token staking
   * @param referrer Address of referrer, can pass zero address if no referrer
   */
  function buyWithUSDC(uint256 amount, bool stake, address referrer) external checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused returns (bool) {
    uint256 usdPrice = calculatePrice(amount);
    totalTokensSold += amount;
    uint256 price = usdPrice / (10 ** 12);
    if (checkPoint != 0) checkPoint += amount;
    uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint;
    if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) {
      if (block.timestamp >= rounds[2][currentStep]) {
        checkPoint = rounds[0][currentStep] + amount;
      }
      if (dynamicTimeFlag) {
        manageTimeDiff();
      }
      uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount;
      remainingTokensTracker.push(unsoldTokens);
      currentStep += 1;
    }
    if (stake) {
      if (stakingWhitelistStatus) {
        require(isWhitelisted[_msgSender()], 'User not whitelisted for stake');
      }
      stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals);
      totalBoughtAndStaked += amount;
      emit TokensBoughtAndStaked(_msgSender(), amount, address(USDCInterface), price, usdPrice, block.timestamp);
    } else {
      userDeposits[_msgSender()] += (amount * baseDecimals);
      emit TokensBought(_msgSender(), amount, address(USDCInterface), price, usdPrice, block.timestamp);
    }
    usdRaised += usdPrice;
    uint256 ourAllowance = USDCInterface.allowance(_msgSender(), address(this));
    require(price <= ourAllowance, 'Make sure to add enough allowance');
    splitUSDCValue(price, referrer);

    return true;
  }

  /**
   * @dev To buy into a presale using ETH
   * @param amount No of tokens to buy
   * @param stake boolean flag for token staking
   * @param referrer Address of referrer, can pass zero address if no referrer
   */
  function buyWithEth(uint256 amount, bool stake, address referrer) external payable checkSaleState(amount) checkSanction(_msgSender()) whenNotPaused nonReentrant returns (bool) {
    uint256 usdPrice = calculatePrice(amount);
    uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
    require(msg.value >= ethAmount, 'Less payment');
    uint256 excess = msg.value - ethAmount;
    totalTokensSold += amount;
    if (checkPoint != 0) checkPoint += amount;
    uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint;
    if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) {
      if (block.timestamp >= rounds[2][currentStep]) {
        checkPoint = rounds[0][currentStep] + amount;
      }
      if (dynamicTimeFlag) {
        manageTimeDiff();
      }
      uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - amount;
      remainingTokensTracker.push(unsoldTokens);
      currentStep += 1;
    }
    if (stake) {
      if (stakingWhitelistStatus) {
        require(isWhitelisted[_msgSender()], 'User not whitelisted for stake');
      }
      stakingManagerInterface.depositByPresale(_msgSender(), amount * baseDecimals);
      totalBoughtAndStaked += amount;
      emit TokensBoughtAndStaked(_msgSender(), amount, address(0), ethAmount, usdPrice, block.timestamp);
    } else {
      userDeposits[_msgSender()] += (amount * baseDecimals);
      emit TokensBought(_msgSender(), amount, address(0), ethAmount, usdPrice, block.timestamp);
    }
    usdRaised += usdPrice;
    splitETHValue(ethAmount, referrer, _msgSender());
    if (excess > 0) sendValue(payable(_msgSender()), excess);
    return true;
  }

  /**
   * @dev To buy ETH directly from wert .*wert contract address should be whitelisted if wertBuyRestrictionStatus is set true
   * @param _user address of the user
   * @param _amount No of ETH to buy
   * @param stake boolean flag for token staking
   * @param referrer Address of referrer, can pass zero address if no referrer
   */
  function buyWithETHWert(address _user, uint256 _amount, bool stake, address referrer) external payable checkSaleState(_amount) checkSanction(_user) whenNotPaused nonReentrant returns (bool) {
    require(wertWhitelisted[_msgSender()], 'User not whitelisted for this tx');
    uint256 usdPrice = calculatePrice(_amount);
    uint256 ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
    require(msg.value >= ethAmount, 'Less payment');
    uint256 excess = msg.value - ethAmount;
    totalTokensSold += _amount;
    if (checkPoint != 0) checkPoint += _amount;
    uint256 total = totalTokensSold > checkPoint ? totalTokensSold : checkPoint;
    if (total > rounds[0][currentStep] || block.timestamp >= rounds[2][currentStep]) {
      if (block.timestamp >= rounds[2][currentStep]) {
        checkPoint = rounds[0][currentStep] + _amount;
      }
      if (dynamicTimeFlag) {
        manageTimeDiff();
      }
      uint256 unsoldTokens = total > rounds[0][currentStep] ? 0 : rounds[0][currentStep] - total - _amount;
      remainingTokensTracker.push(unsoldTokens);
      currentStep += 1;
    }
    if (stake) {
      if (stakingWhitelistStatus) {
        require(isWhitelisted[_user], 'User not whitelisted for stake');
      }
      stakingManagerInterface.depositByPresale(_user, _amount * baseDecimals);
      totalBoughtAndStaked += _amount;
      emit TokensBoughtAndStaked(_user, _amount, address(0), ethAmount, usdPrice, block.timestamp);
    } else {
      userDeposits[_user] += (_amount * baseDecimals);
      emit TokensBought(_user, _amount, address(0), ethAmount, usdPrice, block.timestamp);
    }
    usdRaised += usdPrice;
    splitETHValue(ethAmount, referrer, _user);
    if (excess > 0) sendValue(payable(_user), excess);
    return true;
  }

  /**
   * @dev Helper function to get ETH price for given amount
   * @param amount No of tokens to buy
   */
  function ethBuyHelper(uint256 amount) external view returns (uint256 ethAmount) {
    uint256 usdPrice = calculatePrice(amount);
    ethAmount = (usdPrice * baseDecimals) / getLatestPrice();
  }

  /**
   * @dev Helper function to get USDT price for given amount
   * @param amount No of tokens to buy
   */
  function usdtBuyHelper(uint256 amount) external view returns (uint256 usdPrice) {
    usdPrice = calculatePrice(amount);
    usdPrice = usdPrice / (10 ** 12);
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, 'Low balance');
    (bool success, ) = recipient.call{value: amount}('');
    require(success, 'ETH Payment failed');
  }

  function splitETHValue(uint256 _amount, address _referrer, address _user) internal {
    uint256 amountForWeb3PaymentWallet;
    if (web3PaymentWallet != address(0)) {
      amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(0));
    }

    uint256 amountForReferrers = payReferrers(_amount, _user, _referrer, address(0));
    _amount -= (amountForWeb3PaymentWallet + amountForReferrers);
    if (wallets.length == 0) {
      require(paymentWallet != address(0), 'Payment wallet not set');
      sendValue(payable(paymentWallet), _amount);
    } else {
      uint256 tempCalc;
      for (uint256 i = 0; i < wallets.length; i++) {
        uint256 amountToTransfer = (_amount * percentages[i]) / 100000;
        sendValue(payable(wallets[i]), amountToTransfer);
        tempCalc += amountToTransfer;
      }
      if ((_amount - tempCalc) > 0) {
        sendValue(payable(wallets[wallets.length - 1]), _amount - tempCalc);
      }
    }
  }

  function splitUSDTValue(uint256 _amount, address _referrer) internal {
    uint256 amountForWeb3PaymentWallet;
    if (web3PaymentWallet != address(0)) {
      amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(USDTInterface));
    }

    uint256 amountForReferrers = payReferrers(_amount, _msgSender(), _referrer, address(USDTInterface));
    _amount -= (amountForWeb3PaymentWallet + amountForReferrers);

    if (wallets.length == 0) {
      require(paymentWallet != address(0), 'Payment wallet not set');
      (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), paymentWallet, _amount));
      require(success, 'Token payment failed');
    } else {
      uint256 tempCalc;
      for (uint256 i = 0; i < wallets.length; i++) {
        uint256 amountToTransfer = (_amount * percentages[i]) / 100000;
        (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[i], amountToTransfer));
        require(success, 'Token payment failed');
        tempCalc += amountToTransfer;
      }
      if ((_amount - tempCalc) > 0) {
        (bool success, ) = address(USDTInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[wallets.length - 1], _amount - tempCalc));
        require(success, 'Token payment failed');
      }
    }
  }

  function splitUSDCValue(uint256 _amount, address _referrer) internal {
    uint256 amountForWeb3PaymentWallet;
    if (web3PaymentWallet != address(0)) {
      amountForWeb3PaymentWallet = payReferrersHelper(_amount, web3PaymentWallet, web3PaymentPercentage, address(USDCInterface));
    }

    uint256 amountForReferrers = payReferrers(_amount, _msgSender(), _referrer, address(USDCInterface));
    _amount -= (amountForWeb3PaymentWallet + amountForReferrers);

    if (wallets.length == 0) {
      require(paymentWallet != address(0), 'Payment wallet not set');
      (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), paymentWallet, _amount));
      require(success, 'Token payment failed');
    } else {
      uint256 tempCalc;
      for (uint256 i = 0; i < wallets.length; i++) {
        uint256 amountToTransfer = (_amount * percentages[i]) / 100000;
        (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[i], amountToTransfer));
        require(success, 'Token payment failed');
        tempCalc += amountToTransfer;
      }
      if ((_amount - tempCalc) > 0) {
        (bool success, ) = address(USDCInterface).call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), wallets[wallets.length - 1], _amount - tempCalc));
        require(success, 'Token payment failed');
      }
    }
  }

  /**
   * @dev to initialize staking manager with new address
   * @param _stakingManagerAddress address of the staking smartcontract
   */
  function setStakingManager(address _stakingManagerAddress) external {
    _onlyManagerOrOwner();
    require(_stakingManagerAddress != address(0), 'staking manager cannot be initialized with zero address');
    stakingManagerInterface = StakingManager(_stakingManagerAddress);
    IERC20(saleToken).approve(_stakingManagerAddress, type(uint256).max);
  }

  /**
   * @dev To set the claim start time and sale token address by the owner
   * @param noOfTokens no of tokens to add to the contract
   * @param _saleToken sale toke address
   */
  function startClaim(uint256 noOfTokens, address _saleToken, address _stakingManagerAddress) external returns (bool) {
    _onlyManagerOrOwner();
    require(_saleToken != address(0), 'Zero token address');
    saleToken = _saleToken;
    stakingManagerInterface = StakingManager(_stakingManagerAddress);
    IERC20(_saleToken).approve(_stakingManagerAddress, type(uint256).max);
    bool success = IERC20(_saleToken).transferFrom(_msgSender(), address(this), noOfTokens);
    require(success, 'Token transfer failed');
    emit TokensAdded(_saleToken, noOfTokens, block.timestamp);
    return true;
  }

  /**
   * @dev To set status for claim whitelisting
   * @param _status bool value
   */
  function setStakingWhitelistStatus(bool _status) external {
    _onlyManagerOrOwner();
    stakingWhitelistStatus = _status;
  }

  function setSaleToken(address _saleToken) external {
    _onlyManagerOrOwner();
    require(_saleToken != address(0), 'Zero token address');
    saleToken = _saleToken;
    emit SaleTokenUpdated(saleToken);
  }

  /**
   * @dev To change the claim start time by the owner
   * @param _claimStart new claim start time
   */
  function changeClaimStart(uint256 _claimStart) external returns (bool) {
    _onlyManagerOrOwner();
    uint256 prevValue = claimStart;
    claimStart = _claimStart;
    emit ClaimStartUpdated(prevValue, _claimStart, block.timestamp);
    return true;
  }

  /**
   * @dev To claim tokens after claiming starts
   */
  function claim() external whenNotPaused returns (bool) {
    require(saleToken != address(0), 'Sale token not added');
    require(!isBlacklisted[_msgSender()], 'This Address is Blacklisted');
    require((claimStart > 0 && block.timestamp >= claimStart) || isWhitelisted[_msgSender()], 'Claim has not started yet');
    require(!hasClaimed[_msgSender()], 'Already claimed');
    hasClaimed[_msgSender()] = true;
    uint256 amount = userDeposits[_msgSender()];
    require(amount > 0, 'Nothing to claim');
    delete userDeposits[_msgSender()];
    bool success = IERC20(saleToken).transfer(_msgSender(), amount);
    require(success, 'Token transfer failed');
    emit TokensClaimed(_msgSender(), amount, block.timestamp);
    return true;
  }

  function claimAndStake() external whenNotPaused returns (bool) {
    require(saleToken != address(0), 'Sale token not added');
    require(!isBlacklisted[_msgSender()], 'This Address is Blacklisted');
    if (stakingWhitelistStatus) {
      require(isWhitelisted[_msgSender()], 'User not whitelisted for stake');
    }
    uint256 amount = userDeposits[_msgSender()];
    require(amount > 0, 'Nothing to stake');
    totalBoughtAndStaked += amount / baseDecimals;
    stakingManagerInterface.depositByPresale(_msgSender(), amount);
    delete userDeposits[_msgSender()];
    emit TokensClaimedAndStaked(_msgSender(), amount, block.timestamp);
    return true;
  }

  /**
   * @dev To add wert contract addresses to whitelist
   * @param _whitelistStatus true for whitelisting, false to remove from whitelist
   * @param _addressesToWhitelist addresses of the contract
   */
  function whitelistUsersForWERT(bool _whitelistStatus, address[] calldata _addressesToWhitelist) external {
    _onlyManagerOrOwner();
    for (uint256 i = 0; i < _addressesToWhitelist.length; i++) {
      wertWhitelisted[_addressesToWhitelist[i]] = _whitelistStatus;
    }
  }

  function changeMaxTokensToBuy(uint256 _maxTokensToBuy) external {
    _onlyManagerOrOwner();
    require(_maxTokensToBuy > 0, 'Zero max tokens to buy value');
    maxTokensToBuy = _maxTokensToBuy;
  }

  function changeRoundsData(uint256[][3] memory _rounds) external {
    _onlyManagerOrOwner();
    rounds = _rounds;
  }

  /**
   * @dev To add users to blacklist which restricts blacklisted users from claiming
   * @param _blacklistStatus true for blacklisting, false to remove from blacklist
   * @param _usersToBlacklist addresses of the users
   */
  function blacklistUsers(bool _blacklistStatus, address[] calldata _usersToBlacklist) external {
    _onlyManagerOrOwner();
    for (uint256 i = 0; i < _usersToBlacklist.length; i++) {
      isBlacklisted[_usersToBlacklist[i]] = _blacklistStatus;
    }
  }

  /**
   * @dev To add users to whitelist which restricts users from claiming if claimWhitelistStatus is true
   * @param _whitelistStatus true for whitelisting, false to remove from whitelist
   * @param _usersToWhitelist addresses of the users
   */
  function whitelistUsers(bool _whitelistStatus, address[] calldata _usersToWhitelist) external {
    _onlyManagerOrOwner();
    for (uint256 i = 0; i < _usersToWhitelist.length; i++) {
      isWhitelisted[_usersToWhitelist[i]] = _whitelistStatus;
    }
  }

  /**
   * @dev To set payment wallet address
   * @param _newPaymentWallet new payment wallet address
   */
  function changePaymentWallet(address _newPaymentWallet) external {
    _onlyManagerOrOwner();
    require(_newPaymentWallet != address(0), 'address cannot be zero');
    paymentWallet = _newPaymentWallet;
  }

  /**
   * @dev To manage time gap between two rounds
   */
  function manageTimeDiff() internal {
    for (uint256 i; i < rounds[2].length - currentStep; i++) {
      rounds[2][currentStep + i] = block.timestamp + i * timeConstant;
    }
  }

  /**
   * @dev To set time constant for manageTimeDiff()
   * @param _timeConstant time in <days>*24*60*60 format
   */
  function setTimeConstant(uint256 _timeConstant) external {
    _onlyManagerOrOwner();
    timeConstant = _timeConstant;
  }

  /**
   * @dev To get array of round details at once
   * @param _no array index
   */
  function roundDetails(uint256 _no) external view returns (uint256[] memory) {
    return rounds[_no];
  }

  /**
   * @dev to update userDeposits for purchases made on other chains
   * @param _users array of users
   * @param _userDeposits array of userDeposits associated with users
   */
  function userSeeder(address[] calldata _users, uint256[] calldata _userDeposits) external {
    _onlyManagerOrOwner();
    require(_users.length == _userDeposits.length, 'Length mismatch');
    uint256 totalDepositsInCall = 0;
    for (uint256 i = 0; i < _users.length; i++) {
      userDeposits[_users[i]] += _userDeposits[i];
      totalDepositsInCall += _userDeposits[i];
    }
    seededUsers += _users.length;
    seededAmount += totalDepositsInCall;
  }

  /**
   * @dev To increment the rounds from backend
   */
  function incrementCurrentStep() external {
    _onlyAdminOrManagerOrOwner();
    prevCheckpoints.push(checkPoint);
    if (dynamicTimeFlag) {
      manageTimeDiff();
    }
    if (checkPoint < rounds[0][currentStep]) {
      if (currentStep == 0) {
        remainingTokensTracker.push(rounds[0][currentStep] - totalTokensSold);
      } else {
        remainingTokensTracker.push(rounds[0][currentStep] - checkPoint);
      }
      checkPoint = rounds[0][currentStep];
    }
    currentStep++;
  }

  /**
   * @dev To set admin
   * @param _admin new admin wallet address
   */
  function setAdmin(address _admin) external {
    _onlyManagerOrOwner();
    admin = _admin;
  }

  /**
   * @dev To change details of the round
   * @param _step round for which you want to change the details
   * @param _checkpoint token tracker amount
   */
  function setCurrentStep(uint256 _step, uint256 _checkpoint) external {
    _onlyManagerOrOwner();
    currentStep = _step;
    checkPoint = _checkpoint;
  }

  /**
   * @dev To set time shift functionality on/off
   * @param _dynamicTimeFlag bool value
   */
  function setDynamicTimeFlag(bool _dynamicTimeFlag) external {
    _onlyManagerOrOwner();
    dynamicTimeFlag = _dynamicTimeFlag;
  }

  /**
   * @dev     Function to return remainingTokenTracker Array
   */
  function trackRemainingTokens() external view returns (uint256[] memory) {
    return remainingTokensTracker;
  }

  /**
   * @dev     To update remainingTokensTracker Array (pass 0 to delete existing array)
   * @param   _unsoldTokens  input parameters in uint256 array format
   */
  function setRemainingTokensArray(uint256[] memory _unsoldTokens) public {
    _onlyAdminOrManagerOrOwner();
    require(_unsoldTokens.length != 0, 'cannot update invalid values');
    if (_unsoldTokens.length == 1 && _unsoldTokens[0] == 0) {
      delete remainingTokensTracker;
    } else {
      delete remainingTokensTracker;
      for (uint256 i; i < _unsoldTokens.length; i++) {
        remainingTokensTracker.push(_unsoldTokens[i]);
      }
    }
  }

  /**
   * @dev Sets the sanction details
   * @param _sanctionContract addresses of the contract
   * @param _applySanction boolean on whether the contract has to consider sanction list or not
   */
  function setSanctions(address _sanctionContract, bool _applySanction) external {
    _onlyManagerOrOwner();
    require(_sanctionContract != address(0));
    sanctionsList = ISanctionsList(_sanctionContract);
    applySanctions = _applySanction;
  }

  /**
   * @dev Checks if sanction list is enabled and if user is in sanction list, reverts the transaction.
   * @param _user addresses of the user
   */
  modifier checkSanction(address _user) {
    if (applySanctions) {
      require(!sanctionsList.isSanctioned(_user), 'Address present in sanction list');
    }
    _;
  }

  function changeManager(address _manager) external {
    _onlyManager();
    manager = _manager;
  }

  function renounceManager() external onlyOwner {
    manager = address(0);
  }

  /**
   * @dev To Update referral Details in a single go
   * @param _refereePercentage new percentage for referrals.
   * @param _initialReferrerPercentage new percentage for initial referrals.
   * @param _paymentAddress new web3 payment wallet address
   * @param _percentage new percentage.
   * @param _referrersMustBeBuyers boolean value
   * @param _payInitialReferrers boolean value
   */
  function referrerDetails(uint256 _refereePercentage, uint256 _initialReferrerPercentage, address _paymentAddress, uint256 _percentage, bool _referrersMustBeBuyers, bool _payInitialReferrers) external {
    _onlyManagerOrOwner();
    referrerPercentage = _refereePercentage;
    initialReferrerPercentage = _initialReferrerPercentage;
    web3PaymentWallet = _paymentAddress;
    web3PaymentPercentage = _percentage;
    referrersMustBeBuyers = _referrersMustBeBuyers;
    payInitialReferrers = _payInitialReferrers;
  }

  /**
   * @dev To Update referral percentage
   * @param _refereePercentage new percentage for referrals.
   * @param _initialReferrerPercentage new percentage for initial referrals.
   */
  function updateReferrerPercentage(uint256 _refereePercentage, uint256 _initialReferrerPercentage) external {
    _onlyManagerOrOwner();
    referrerPercentage = _refereePercentage;
    initialReferrerPercentage = _initialReferrerPercentage;
  }

  /**
   * @dev To Update referrers should be buyers or not for referral
   * @param _referrersMustBeBuyers boolean value
   */
  function updateReferrersMustBeBuyers(bool _referrersMustBeBuyers) external {
    _onlyManagerOrOwner();
    referrersMustBeBuyers = _referrersMustBeBuyers;
  }

  /**
   * @dev To determine if initial referees are to be paid
   * @param _payInitialReferrers boolean value
   */
  function shouldPayInitialReferrers(bool _payInitialReferrers) external {
    _onlyManagerOrOwner();
    payInitialReferrers = _payInitialReferrers;
  }

  /**
   * @dev To Update web3 payment details
   * @param _paymentAddress new web3 payment wallet address
   * @param _percentage new percentage.
   */
  function updateWeb3PaymentDetails(address _paymentAddress, uint256 _percentage) external {
    _onlyManagerOrOwner();
    web3PaymentWallet = _paymentAddress;
    web3PaymentPercentage = _percentage;
  }

  /**
   * @dev To add users to blacklisted Referral mapping
   * @param _referrers addresses of the users
   */
  function blacklistReferrer(address[] calldata _referrers) external {
    _onlyManagerOrOwner();
    uint256 referrersLen = _referrers.length;
    for (uint256 i = 0; i < referrersLen; i++) {
      blacklistedReferrers[_referrers[i]] = true;
    }
  }

  /**
   * @dev To remove users from blacklisted Referral mapping
   * @param _referrers addresses of the users
   */
  function removeFromBlacklistedReferrerMapping(address[] calldata _referrers) external {
    _onlyManagerOrOwner();
    uint256 referrersLen = _referrers.length;
    for (uint256 i = 0; i < referrersLen; i++) {
      blacklistedReferrers[_referrers[i]] = false;
    }
  }

  /**
   * @dev Returns a boolean based on referral can be applied or not
   * @param _referrer addresses of the users
   */
  function checkReferralStatus(address _referrer) public view returns (bool) {
    if (_referrer == address(0) || blacklistedReferrers[_referrer] || _referrer == _msgSender()) {
      return false;
    }

    if (!referrersMustBeBuyers) {
      return true;
    }

    return userDeposits[_referrer] > 0;
  }

  /**
   * @dev Pays referrers in USDT/ETH and returns the total amount paid.
   * @param _amount The base amount used for referral payment calculations.
   * @param _referred The address of the referred user.
   * @param _referrer The address of the referring user.
   */
  function payReferrers(uint256 _amount, address _referred, address _referrer, address _token) internal returns (uint256) {
    uint256 totalPaid;
    address referrer = getOrInsertInitialReferrer(_referred, _referrer);
    if (!checkReferralStatus(referrer)) {
      return totalPaid;
    }
    totalPaid += payReferrersHelper(_amount, referrer, referrerPercentage, _token);
    if (!payInitialReferrers) {
      return totalPaid;
    }
    address initialReferrer = getOrInsertInitialReferrer(referrer, address(0));
    if (!checkReferralStatus(initialReferrer)) {
      return totalPaid;
    }
    return (totalPaid + payReferrersHelper(_amount, initialReferrer, initialReferrerPercentage, _token));
  }

  /**
   * @dev Helper function to pay a referrer and return the amount paid.
   * @param _amount The base amount for payment calculation.
   * @param _referrer The address of the referrer.
   * @param _percentage The percentage of the base amount to pay.
   */
  function payReferrersHelper(uint256 _amount, address _referrer, uint256 _percentage, address _token) internal returns (uint256) {
    uint256 amountForReferrer = (_amount * _percentage) / 100;
    if (_token != address(0)) {
      (bool success, ) = _token.call(abi.encodeWithSignature('transferFrom(address,address,uint256)', _msgSender(), _referrer, amountForReferrer));
      require(success, 'Token payment failed');
    } else {
      sendValue(payable(_referrer), amountForReferrer);
    }

    return amountForReferrer;
  }

  /**
   * @dev Returns the initial referrer or inserts one if not present.
   * @param _referred The address of the referred user.
   * @param _referrer The address of the referrer to insert if missing.
   */
  function getOrInsertInitialReferrer(address _referred, address _referrer) internal returns (address) {
    if (initialReferrers[_referred] == address(0) && _referred != _referrer) {
      initialReferrers[_referred] = _referrer;
    }
    return initialReferrers[_referred];
  }

  function tokenTransfer(address _token, uint256 amount) external {
    _onlyManagerOrOwner();
    bool success = IERC20(_token).transfer(msg.sender, amount);
    require(success, 'Token transfer failed');
  }

  /**
   * @notice Resets the presale to its initial state with new round configurations.
   * @dev This function can only be called by the manager or owner of the contract.
   * @param _rounds A 3-element array of arrays, where each inner array defines a presale round.
   * @return success A boolean indicating whether the presale reset was successful (always true).
   */
  function resetPresale(uint256[][3] memory _rounds) external returns (bool) {
    _onlyManagerOrOwner();
    rounds = _rounds;
    currentStep = 0;
    checkPoint = 0;
    delete remainingTokensTracker;
    return true;
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"address","name":"usdt","type":"address"},{"internalType":"address","name":"usdc","type":"address"}],"internalType":"struct Presale.ContractAddresses","name":"_contracts","type":"tuple"},{"components":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"maxTokensToBuy","type":"uint256"},{"internalType":"bool","name":"dynamicTimeFlag","type":"bool"},{"internalType":"uint256","name":"timeConstant","type":"uint256"}],"internalType":"struct Presale.PresaleConfig","name":"_config","type":"tuple"},{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ClaimStartUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SaleTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"SaleTokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdEq","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBoughtAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimedAndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"USDCInterface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatorInterface","outputs":[{"internalType":"contract Aggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applySanctions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_referrers","type":"address[]"}],"name":"blacklistReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_blacklistStatus","type":"bool"},{"internalType":"address[]","name":"_usersToBlacklist","type":"address[]"}],"name":"blacklistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklistedReferrers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithETHWert","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithUSDC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"}],"name":"changeClaimStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensToBuy","type":"uint256"}],"name":"changeMaxTokensToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPaymentWallet","type":"address"}],"name":"changePaymentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"name":"changeRoundsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"changeSaleTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"checkReferralStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAndStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTimeFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialReferrerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialReferrers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensToBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payInitialReferrers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"percentages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prevCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_refereePercentage","type":"uint256"},{"internalType":"uint256","name":"_initialReferrerPercentage","type":"uint256"},{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"bool","name":"_referrersMustBeBuyers","type":"bool"},{"internalType":"bool","name":"_payInitialReferrers","type":"bool"}],"name":"referrerDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referrerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrersMustBeBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"remainingTokensTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_referrers","type":"address[]"}],"name":"removeFromBlacklistedReferrerMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[][3]","name":"_rounds","type":"uint256[][3]"}],"name":"resetPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_no","type":"uint256"}],"name":"roundDetails","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sanctionsList","outputs":[{"internalType":"contract ISanctionsList","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seededAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seededUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_step","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"name":"setCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_dynamicTimeFlag","type":"bool"}],"name":"setDynamicTimeFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_unsoldTokens","type":"uint256[]"}],"name":"setRemainingTokensArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"}],"name":"setSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sanctionContract","type":"address"},{"internalType":"bool","name":"_applySanction","type":"bool"}],"name":"setSanctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"}],"name":"setSplits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"setStakingManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakingWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeConstant","type":"uint256"}],"name":"setTimeConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_payInitialReferrers","type":"bool"}],"name":"shouldPayInitialReferrers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingManagerInterface","outputs":[{"internalType":"contract StakingManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingWhitelistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"noOfTokens","type":"uint256"},{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"address","name":"_stakingManagerAddress","type":"address"}],"name":"startClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBoughtAndStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trackRemainingTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_refereePercentage","type":"uint256"},{"internalType":"uint256","name":"_initialReferrerPercentage","type":"uint256"}],"name":"updateReferrerPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_referrersMustBeBuyers","type":"bool"}],"name":"updateReferrersMustBeBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentAddress","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"updateWeb3PaymentDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_userDeposits","type":"uint256[]"}],"name":"userSeeder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"web3PaymentPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"web3PaymentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wertWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistStatus","type":"bool"},{"internalType":"address[]","name":"_usersToWhitelist","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistStatus","type":"bool"},{"internalType":"address[]","name":"_addressesToWhitelist","type":"address[]"}],"name":"whitelistUsersForWERT","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620063153803806200631583398101604081905262000034916200057c565b6001600055620000443362000286565b6001805460ff60a01b1916905582516001600160a01b0316620000ae5760405162461bcd60e51b815260206004820152601760248201527f5a65726f2061676772656761746f72206164647265737300000000000000000060448201526064015b60405180910390fd5b60208301516001600160a01b0316620000fe5760405162461bcd60e51b81526020600482015260116024820152705a65726f2055534454206164647265737360781b6044820152606401620000a5565b60408301516001600160a01b03166200014e5760405162461bcd60e51b81526020600482015260116024820152705a65726f2055534443206164647265737360781b6044820152606401620000a5565b815142106200018f5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642074696d6560a01b6044820152606401620000a5565b8251601a80546001600160a01b039283166001600160a01b031991821617909155602085015160188054918416918316919091179055604085015160198054919093169116179055670de0b6b3a76400006005558151600255620001f76011826003620002d8565b50602082810151600455600c8054336001600160a01b031991821681179092556040808601516006805460ff19169115159190911790556060860151600755600e80549092169092179055600254815190815242928101929092527f10b2d77c859ecee49aef95d7c6b9c94edec77023fb4bbd93271da218a1a551f5910160405180910390a150505062000669565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82600381019282156200031d579160200282015b828111156200031d57825180516200030c9184916020909101906200032f565b5091602001919060010190620002ec565b506200032b9291506200037b565b5090565b8280548282559060005260206000209081019282156200036d579160200282015b828111156200036d57825182559160200191906001019062000350565b506200032b9291506200039c565b808211156200032b576000620003928282620003b3565b506001016200037b565b5b808211156200032b57600081556001016200039d565b5080546000825590600052602060002090810190620003d391906200039c565b50565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715620004115762000411620003d6565b60405290565b604051608081016001600160401b0381118282101715620004115762000411620003d6565b604051601f8201601f191681016001600160401b0381118282101715620004675762000467620003d6565b604052919050565b80516001600160a01b03811681146200048757600080fd5b919050565b6000601f83818401126200049f57600080fd5b620004a9620003ec565b806060850186811115620004bc57600080fd5b855b81811015620005705780516001600160401b0380821115620004e05760008081fd5b81890191508987830112620004f55760008081fd5b81516020828211156200050c576200050c620003d6565b8160051b92506200051f8184016200043c565b828152928401810192818101908d8511156200053d57600093508384fd5b948201945b848610156200055d5785518252948201949082019062000542565b89525090960195505050602001620004be565b50909695505050505050565b60008060008385036101008112156200059457600080fd5b6060811215620005a357600080fd5b620005ad620003ec565b620005b8866200046f565b8152620005c8602087016200046f565b6020820152620005db604087016200046f565b604082015293506080605f1982011215620005f557600080fd5b506200060062000417565b606085015181526080850151602082015260a085015180151581146200062557600080fd5b604082015260c0850151606082015260e08501519092506001600160401b038111156200065157600080fd5b6200065f868287016200048c565b9150509250925092565b615c9c80620006796000396000f3fe6080604052600436106105025760003560e01c80638dcf67ca11610297578063d1690fec11610165578063f0120ff8116100cc578063f851a44011610085578063f851a44014610f8b578063f885838614610fab578063f8b91abe14610fcb578063fe21a94f14610fe0578063fe575a8714610ff3578063ff14ca111461102357600080fd5b8063f0120ff814610ed5578063f04d688f14610ef5578063f056633414610f0b578063f0ff892314610f2b578063f2fde38b14610f4b578063f597573f14610f6b57600080fd5b8063e985e3671161011e578063e985e36714610e1f578063eac0d11514610e3f578063eadd94ec14610e5f578063eb66e2ef14610e75578063ec571c6a14610e95578063efc8647814610eb557600080fd5b8063d1690fec14610d69578063d258919614610d89578063e19648db14610da9578063e32204dd14610dc9578063e6da921314610de9578063e6e78d0614610e0957600080fd5b8063b4d94f4411610209578063c6cc2672116101c2578063c6cc267214610cd9578063c8adff0114610cef578063ca1600b614610d04578063cad0055614610d1e578063cb1a4fc014610d3e578063cff805ab14610d5357600080fd5b8063b4d94f4414610bf6578063b8d612ec14610c2c578063ba166a3914610c4c578063bb695f2a14610c79578063c23326f314610c99578063c49cc64514610cb957600080fd5b8063a29f481c1161025b578063a29f481c14610b36578063a2db641614610b56578063a3fbbaae14610b76578063a6d42e4e14610b96578063ae10426514610bb6578063b00bba6a14610bd657600080fd5b80638dcf67ca14610aac5780638e15f47314610acb5780639a89c1fb14610ae05780639cfa0f7c14610b00578063a1fe1dee14610b1657600080fd5b80634e71d92d116103d45780636ddcca29116103465780637ad71f72116102ff5780637ad71f7214610a0d5780637f6fb25314610a2d5780638456cb5914610a4357806386fc6ea814610a5857806388c3e45814610a785780638da5cb5b14610a8e57600080fd5b80636ddcca29146109525780636e6973dd14610972578063704b6c0214610992578063715018a6146109b257806373b2e80e146109c757806378e97925146109f757600080fd5b80635df4f353116103985780635df4f3531461089757806361ad0b7c146108c757806363b20117146108e757806363e40879146108fd578063641046f41461091d57806368cdafe61461093257600080fd5b80634e71d92d1461080d57806350429ee4146108225780635bc34f71146108425780635c975abb146108585780635ddc56881461087757600080fd5b80632dc358e8116104785780633f4ba83a116104315780633f4ba83a146107795780634151848f1461078e578063415eed46146107a157806343568eae146107c1578063481c6a75146107d75780634bc6191a146107f757600080fd5b80632dc358e8146106bc57806330e74f08146106dc57806333f76178146106fd57806337ba50941461071357806338646608146107295780633af32abf1461074957600080fd5b8063232e95be116104ca578063232e95be146105e357806323a8f1c01461060457806325312e5414610624578063278c278b1461065c57806329a5a0b61461067c5780632c73304d1461069c57600080fd5b8063032bd1f71461050757806307f180821461054c5780630a200fc71461056c5780630ba36dcd1461058e5780631fa2bc92146105c9575b600080fd5b34801561051357600080fd5b50610537610522366004615212565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561055857600080fd5b5061053761056736600461522d565b611043565b34801561057857600080fd5b5061058c610587366004615254565b61109d565b005b34801561059a57600080fd5b506105bb6105a9366004615212565b60246020526000908152604090205481565b604051908152602001610543565b3480156105d557600080fd5b506006546105379060ff1681565b3480156105ef57600080fd5b50601c5461053790600160a81b900460ff1681565b34801561061057600080fd5b5061058c61061f36600461522d565b6110b8565b34801561063057600080fd5b50601954610644906001600160a01b031681565b6040516001600160a01b039091168152602001610543565b34801561066857600080fd5b5061058c61067736600461522d565b6110c5565b34801561068857600080fd5b506105bb61069736600461522d565b611127565b3480156106a857600080fd5b5061058c6106b7366004615271565b61115b565b3480156106c857600080fd5b5061058c6106d73660046153a7565b6111a3565b3480156106e857600080fd5b50601c5461053790600160a01b900460ff1681565b34801561070957600080fd5b506105bb60055481565b34801561071f57600080fd5b506105bb60225481565b34801561073557600080fd5b50601b54610644906001600160a01b031681565b34801561075557600080fd5b50610537610764366004615212565b60276020526000908152604090205460ff1681565b34801561078557600080fd5b5061058c611299565b61053761079c3660046153dc565b6112ab565b3480156107ad57600080fd5b506105376107bc36600461541a565b6117b9565b3480156107cd57600080fd5b506105bb60075481565b3480156107e357600080fd5b50600e54610644906001600160a01b031681565b34801561080357600080fd5b506105bb601e5481565b34801561081957600080fd5b506105376117f1565b34801561082e57600080fd5b50601d54610644906001600160a01b031681565b34801561084e57600080fd5b506105bb600f5481565b34801561086457600080fd5b50600154600160a01b900460ff16610537565b34801561088357600080fd5b5061058c6108923660046154b5565b611ad9565b3480156108a357600080fd5b506105376108b2366004615212565b60286020526000908152604090205460ff1681565b3480156108d357600080fd5b5061058c6108e2366004615254565b611cd4565b3480156108f357600080fd5b506105bb60085481565b34801561090957600080fd5b506105bb61091836600461522d565b611cef565b34801561092957600080fd5b5061058c611d11565b34801561093e57600080fd5b5061058c61094d366004615575565b611e6c565b34801561095e57600080fd5b5061058c61096d3660046155eb565b611f16565b34801561097e57600080fd5b5061058c61098d3660046155eb565b611f95565b34801561099e57600080fd5b5061058c6109ad366004615212565b61200e565b3480156109be57600080fd5b5061058c612038565b3480156109d357600080fd5b506105376109e2366004615212565b60256020526000908152604090205460ff1681565b348015610a0357600080fd5b506105bb60025481565b348015610a1957600080fd5b50610644610a2836600461522d565b61204a565b348015610a3957600080fd5b506105bb60095481565b348015610a4f57600080fd5b5061058c612074565b348015610a6457600080fd5b5061058c610a73366004615254565b612084565b348015610a8457600080fd5b506105bb601f5481565b348015610a9a57600080fd5b506001546001600160a01b0316610644565b348015610ab857600080fd5b5060215461053790610100900460ff1681565b348015610ad757600080fd5b506105bb6120a6565b348015610aec57600080fd5b5061058c610afb366004615640565b612146565b348015610b0c57600080fd5b506105bb60045481565b348015610b2257600080fd5b5061058c610b31366004615662565b612159565b348015610b4257600080fd5b5061058c610b51366004615212565b61229a565b348015610b6257600080fd5b5061058c610b713660046156ce565b612341565b348015610b8257600080fd5b5061058c610b91366004615212565b6123bc565b348015610ba257600080fd5b5061058c610bb136600461541a565b6123e6565b348015610bc257600080fd5b506105bb610bd136600461522d565b6123fb565b348015610be257600080fd5b5061058c610bf1366004615212565b612731565b348015610c0257600080fd5b50610644610c11366004615212565b602a602052600090815260409020546001600160a01b031681565b348015610c3857600080fd5b5061058c610c47366004615640565b612853565b348015610c5857600080fd5b50610c6c610c6736600461522d565b612866565b6040516105439190615710565b348015610c8557600080fd5b50610537610c94366004615212565b6128d2565b348015610ca557600080fd5b506105bb610cb436600461522d565b612952565b348015610cc557600080fd5b50601a54610644906001600160a01b031681565b348015610ce557600080fd5b506105bb60235481565b348015610cfb57600080fd5b50610c6c612973565b348015610d1057600080fd5b506021546105379060ff1681565b348015610d2a57600080fd5b5061058c610d39366004615212565b6129cb565b348015610d4a57600080fd5b50610537612a44565b348015610d5f57600080fd5b506105bb60105481565b348015610d7557600080fd5b50610537610d843660046153dc565b612c9e565b348015610d9557600080fd5b5061058c610da43660046156ce565b613219565b348015610db557600080fd5b506105bb610dc436600461522d565b613294565b348015610dd557600080fd5b50600c54610644906001600160a01b031681565b348015610df557600080fd5b506105bb610e04366004615640565b6132a4565b348015610e1557600080fd5b506105bb60205481565b348015610e2b57600080fd5b50600b54610644906001600160a01b031681565b348015610e4b57600080fd5b5061058c610e5a366004615254565b6132d8565b348015610e6b57600080fd5b506105bb600a5481565b348015610e8157600080fd5b5061058c610e903660046155eb565b6132fe565b348015610ea157600080fd5b50601c54610644906001600160a01b031681565b348015610ec157600080fd5b50610537610ed0366004615754565b613377565b348015610ee157600080fd5b50610537610ef03660046153dc565b613567565b348015610f0157600080fd5b506105bb60035481565b348015610f1757600080fd5b5061058c610f2636600461522d565b613ad2565b348015610f3757600080fd5b5061058c610f46366004615575565b613bb8565b348015610f5757600080fd5b5061058c610f66366004615212565b613be6565b348015610f7757600080fd5b50601854610644906001600160a01b031681565b348015610f9757600080fd5b50600d54610644906001600160a01b031681565b348015610fb757600080fd5b506105bb610fc636600461522d565b613c5c565b348015610fd757600080fd5b5061058c613c6c565b610537610fee366004615779565b613c86565b348015610fff57600080fd5b5061053761100e366004615212565b60266020526000908152604090205460ff1681565b34801561102f57600080fd5b5061058c61103e3660046157c8565b61421e565b600061104d61427d565b60038054908390556040805182815260208101859052428183015290517f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a49181900360600190a150600192915050565b6110a561427d565b6006805460ff1916911515919091179055565b6110c061427d565b600755565b6110cd61427d565b600081116111225760405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c75650000000060448201526064015b60405180910390fd5b600455565b600080611133836123fb565b905061113d6120a6565b60055461114a9083615843565b6111549190615862565b9392505050565b61116361427d565b6001600160a01b03821661117657600080fd5b601c8054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6111ab6142ec565b80516111f95760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606401611119565b8051600114801561122457508060008151811061121857611218615884565b60200260200101516000145b15611238576112356015600061510f565b50565b6112446015600061510f565b60005b815181101561129557601582828151811061126457611264615884565b602090810291909101810151825460018101845560009384529190922001558061128d8161589a565b915050611247565b5050565b6112a161427d565b6112a961437b565b565b6000836002544210156112d05760405162461bcd60e51b8152600401611119906158b5565b600081116112f05760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561139d57601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113809190615919565b1561139d5760405162461bcd60e51b815260040161111990615936565b6113a56143d0565b6113ad61441d565b60006113b8876123fb565b905060006113c46120a6565b6005546113d19084615843565b6113db9190615862565b90508034101561141c5760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000611428823461596b565b9050886008600082825461143c9190615982565b90915550506010541561146157886010600082825461145b9190615982565b90915550505b6000601054600854116114765760105461147a565b6008545b90506011600001600f548154811061149457611494615884565b90600052602060002001548111806114ce57506011600201600f54815481106114bf576114bf615884565b90600052602060002001544210155b156115ef576011600201600f54815481106114eb576114eb615884565b9060005260206000200154421061152e57896011600001600f548154811061151557611515615884565b906000526020600020015461152a9190615982565b6010555b60065460ff161561154157611541614477565b600060118101600f548154811061155a5761155a615884565b906000526020600020015482116115a9578a826011600001600f548154811061158557611585615884565b906000526020600020015461159a919061596b565b6115a4919061596b565b6115ac565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f805493945090929091906115e8908490615982565b9091555050505b881561170457601c54600160a81b900460ff1615611636573360009081526027602052604090205460ff166116365760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554611655908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b5050505089600960008282546116c59190615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c07833981519152919081900360600190a461176b565b600554611711908b615843565b3360009081526024602052604081208054909190611730908490615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c47833981519152919081900360600190a45b83600a600082825461177d9190615982565b9091555061178e90508389336144e7565b811561179e5761179e338361468e565b60019650505050506117b06001600055565b50509392505050565b60006117c361427d565b6117d0601183600361512d565b506000600f81905560108190556117e99060159061510f565b506001919050565b60006117fb6143d0565b600b546001600160a01b031661184a5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff16156118aa5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b60006003541180156118be57506003544210155b806118d857503360009081526027602052604090205460ff165b6119245760405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606401611119565b3360009081526025602052604090205460ff16156119765760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401611119565b336000908152602560209081526040808320805460ff191660011790556024909152902054806119db5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401611119565b336000818152602460208181526040808420849055600b54815163a9059cbb60e01b815260048101969096529285018690525192936001600160a01b039092169263a9059cbb92604480820193929182900301818787803b158015611a3f57600080fd5b505af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190615919565b905080611a965760405162461bcd60e51b8152600401611119906159d1565b6040805183815242602082015233917f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b910160405180910390a260019250505090565b611ae1614764565b8051825114611b265760405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606401611119565b611b326017600061510f565b611b3e6016600061510f565b6000805b8351811015611c7c576000838281518110611b5f57611b5f615884565b602002602001015111611bbe5760405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608401611119565b828181518110611bd057611bd0615884565b602002602001015182611be39190615982565b91506017848281518110611bf957611bf9615884565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601690849083908110611c4b57611c4b615884565b6020908102919091018101518254600181018455600093845291909220015580611c748161589a565b915050611b42565b5080620186a014611ccf5760405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606401611119565b505050565b611cdc61427d565b6021805460ff1916911515919091179055565b6000611cfa826123fb565b9050611d0b64e8d4a5100082615862565b92915050565b611d196142ec565b601054601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec015560065460ff1615611d6257611d62614477565b6011600001600f5481548110611d7a57611d7a615884565b90600052602060002001546010541015611e5557600f54611de3576008546015906011600001600f5481548110611db357611db3615884565b9060005260206000200154611dc8919061596b565b81546001810183556000928352602090922090910155611e2d565b6010546015906011600001600f5481548110611e0157611e01615884565b9060005260206000200154611e16919061596b565b815460018101835560009283526020909220909101555b6011600001600f5481548110611e4557611e45615884565b6000918252602090912001546010555b600f8054906000611e658361589a565b9190505550565b611e7461427d565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef79190615919565b905080611ccf5760405162461bcd60e51b8152600401611119906159d1565b611f1e61427d565b60005b81811015611f8f578360286000858585818110611f4057611f40615884565b9050602002016020810190611f559190615212565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f878161589a565b915050611f21565b50505050565b611f9d61427d565b60005b81811015611f8f578360266000858585818110611fbf57611fbf615884565b9050602002016020810190611fd49190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120068161589a565b915050611fa0565b61201661427d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6120406147b3565b6112a9600061480d565b6017818154811061205a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61207c61427d565b6112a961485f565b61208c61427d565b602180549115156101000261ff0019909216919091179055565b600080601a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156120f757600080fd5b505afa15801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f9190615a1a565b505050915050806402540be400611d0b9190615a6a565b61214e61427d565b600f91909155601055565b61216161427d565b8281146121a25760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401611119565b6000805b8481101561225f578383828181106121c0576121c0615884565b90506020020135602460008888858181106121dd576121dd615884565b90506020020160208101906121f29190615212565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546122219190615982565b90915550849050838281811061223957612239615884565b905060200201358261224b9190615982565b9150806122578161589a565b9150506121a6565b5084849050602360008282546122759190615982565b92505081905550806022600082825461228e9190615982565b90915550505050505050565b6122a261427d565b6001600160a01b0381166122ed5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9197d4b7790c1ef2cbc99e6139e49173e9f34ff565c8df71a9f37acafde4d7159060200160405180910390a150565b61234961427d565b8060005b81811015611f8f5760016029600086868581811061236d5761236d615884565b90506020020160208101906123829190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806123b48161589a565b91505061234d565b6123c4614764565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6123ee61427d565b611295601182600361512d565b600080600060105460001461241257601054612416565b6008545b905060045484111561246a5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152606401611119565b6011600001600f548154811061248257612482615884565b906000526020600020015481856124999190615982565b11806124c757506011600201600f54815481106124b8576124b8615884565b90600052602060002001544210155b156126f9576011546124db9060019061596b565b600f541061251a5760405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606401611119565b6011600201600f548154811061253257612532615884565b9060005260206000200154421061264557600f54601190612554906001615982565b8154811061256457612564615884565b906000526020600020015484601160006003811061258457612584615884565b01600f548154811061259857612598615884565b90600052602060002001546125ad9190615982565b11156126075760405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608401611119565b600f54601290612618906001615982565b8154811061262857612628615884565b90600052602060002001548461263e9190615843565b915061272a565b60008160118201600f548154811061265f5761265f615884565b9060005260206000200154612674919061596b565b600f54909150601290612688906001615982565b8154811061269857612698615884565b906000526020600020015481866126af919061596b565b6126b99190615843565b6011600101600f54815481106126d1576126d1615884565b9060005260206000200154826126e79190615843565b6126f19190615982565b92505061272a565b6011600101600f548154811061271157612711615884565b9060005260206000200154846127279190615843565b91505b5092915050565b61273961427d565b6001600160a01b0381166127b55760405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6974696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608401611119565b601b80546001600160a01b0319166001600160a01b03838116918217909255600b5460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b390604401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615919565b61285b61427d565b601f91909155602055565b60606011826003811061287b5761287b615884565b018054806020026020016040519081016040528092919081815260200182805480156128c657602002820191906000526020600020905b8154815260200190600101908083116128b2575b50505050509050919050565b60006001600160a01b038216158061290257506001600160a01b03821660009081526029602052604090205460ff165b8061291557506001600160a01b03821633145b1561292257506000919050565b60215460ff1661293457506001919050565b506001600160a01b0316600090815260246020526040902054151590565b6015818154811061296257600080fd5b600091825260209091200154905081565b606060158054806020026020016040519081016040528092919081815260200182805480156129c157602002820191906000526020600020905b8154815260200190600101908083116129ad575b5050505050905090565b6129d361427d565b6001600160a01b038116612a225760405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606401611119565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a4e6143d0565b600b546001600160a01b0316612a9d5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff1615612afd5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b601c54600160a81b900460ff1615612b3e573360009081526027602052604090205460ff16612b3e5760405162461bcd60e51b81526004016111199061599a565b3360009081526024602052604090205480612b8e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606401611119565b600554612b9b9082615862565b60096000828254612bac9190615982565b9091555050601b546001600160a01b03166391c61966336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b158015612c0b57600080fd5b505af1158015612c1f573d6000803e3d6000fd5b5050505060246000612c2e3390565b6001600160a01b031681526020810191909152604001600090812055336001600160a01b03167ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b8242604051612c8e929190918252602082015260400190565b60405180910390a2600191505090565b600083600254421015612cc35760405162461bcd60e51b8152600401611119906158b5565b60008111612ce35760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff1615612d9057601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d739190615919565b15612d905760405162461bcd60e51b815260040161111990615936565b612d986143d0565b6000612da3876123fb565b90508660086000828254612db79190615982565b9091555060009050612dce64e8d4a5100083615862565b9050601054600014612df2578760106000828254612dec9190615982565b90915550505b600060105460085411612e0757601054612e0b565b6008545b90506011600001600f5481548110612e2557612e25615884565b9060005260206000200154811180612e5f57506011600201600f5481548110612e5057612e50615884565b90600052602060002001544210155b15612f80576011600201600f5481548110612e7c57612e7c615884565b90600052602060002001544210612ebf57886011600001600f5481548110612ea657612ea6615884565b9060005260206000200154612ebb9190615982565b6010555b60065460ff1615612ed257612ed2614477565b600060118101600f5481548110612eeb57612eeb615884565b90600052602060002001548211612f3a5789826011600001600f5481548110612f1657612f16615884565b9060005260206000200154612f2b919061596b565b612f35919061596b565b612f3d565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190612f79908490615982565b9091555050505b87156130b157601c54600160a81b900460ff1615612fc7573360009081526027602052604090205460ff16612fc75760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554612fe6908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561302c57600080fd5b505af1158015613040573d6000803e3d6000fd5b5050505088600960008282546130569190615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c078339815191528587426040516130a4939291909283526020830191909152604082015260600190565b60405180910390a4613134565b6005546130be908a615843565b33600090815260246020526040812080549091906130dd908490615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c4783398151915285874260405161312b939291909283526020830191909152604082015260600190565b60405180910390a45b82600a60008282546131469190615982565b90915550506018546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b1580156131a557600080fd5b505afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd9190615aef565b9050808311156131ff5760405162461bcd60e51b815260040161111990615b08565b61320983896148a2565b5060019998505050505050505050565b61322161427d565b8060005b81811015611f8f5760006029600086868581811061324557613245615884565b905060200201602081019061325a9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061328c8161589a565b915050613225565b6014818154811061296257600080fd5b601182600381106132b457600080fd5b0181815481106132c357600080fd5b90600052602060002001600091509150505481565b6132e061427d565b601c8054911515600160a81b0260ff60a81b19909216919091179055565b61330661427d565b60005b81811015611f8f57836027600085858581811061332857613328615884565b905060200201602081019061333d9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061336f8161589a565b915050613309565b600061338161427d565b6001600160a01b0383166133cc5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b038581166001600160a01b03199283168117909355601b805491861691909216811790915560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561343c57600080fd5b505af1158015613450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134749190615919565b506040516323b872dd60e01b81526000906001600160a01b038516906323b872dd906134a890339030908a90600401615b49565b602060405180830381600087803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615919565b9050806135195760405162461bcd60e51b8152600401611119906159d1565b604080518681524260208201526001600160a01b038616917fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff8910160405180910390a2506001949350505050565b60008360025442101561358c5760405162461bcd60e51b8152600401611119906158b5565b600081116135ac5760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561365957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561360457600080fd5b505afa158015613618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363c9190615919565b156136595760405162461bcd60e51b815260040161111990615936565b6136616143d0565b600061366c876123fb565b905086600860008282546136809190615982565b909155506000905061369764e8d4a5100083615862565b90506010546000146136bb5787601060008282546136b59190615982565b90915550505b6000601054600854116136d0576010546136d4565b6008545b90506011600001600f54815481106136ee576136ee615884565b906000526020600020015481118061372857506011600201600f548154811061371957613719615884565b90600052602060002001544210155b15613849576011600201600f548154811061374557613745615884565b9060005260206000200154421061378857886011600001600f548154811061376f5761376f615884565b90600052602060002001546137849190615982565b6010555b60065460ff161561379b5761379b614477565b600060118101600f54815481106137b4576137b4615884565b906000526020600020015482116138035789826011600001600f54815481106137df576137df615884565b90600052602060002001546137f4919061596b565b6137fe919061596b565b613806565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190613842908490615982565b9091555050505b871561397a57601c54600160a81b900460ff1615613890573360009081526027602052604090205460ff166138905760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c61966336005546138af908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b50505050886009600082825461391f9190615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c0783398151915285874260405161396d939291909283526020830191909152604082015260600190565b60405180910390a46139fd565b600554613987908a615843565b33600090815260246020526040812080549091906139a6908490615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c478339815191528587426040516139f4939291909283526020830191909152604082015260600190565b60405180910390a45b82600a6000828254613a0f9190615982565b90915550506019546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015613a6e57600080fd5b505afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190615aef565b905080831115613ac85760405162461bcd60e51b815260040161111990615b08565b6132098389614c67565b613ada61427d565b60008111613b1f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401611119565b804210613b625760405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606401611119565b60028054908290556040805182815260208101849052428183015290516414d510549560da1b917fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2919081900360600190a25050565b613bc061427d565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b613bee6147b3565b6001600160a01b038116613c535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611119565b6112358161480d565b6016818154811061296257600080fd5b613c746147b3565b600e80546001600160a01b0319169055565b600083600254421015613cab5760405162461bcd60e51b8152600401611119906158b5565b60008111613ccb5760405162461bcd60e51b8152600401611119906158ec565b601c548690600160a01b900460ff1615613d7957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015613d2457600080fd5b505afa158015613d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5c9190615919565b15613d795760405162461bcd60e51b815260040161111990615936565b613d816143d0565b613d8961441d565b3360009081526028602052604090205460ff16613de85760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152606401611119565b6000613df3876123fb565b90506000613dff6120a6565b600554613e0c9084615843565b613e169190615862565b905080341015613e575760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000613e63823461596b565b90508860086000828254613e779190615982565b909155505060105415613e9c578860106000828254613e969190615982565b90915550505b600060105460085411613eb157601054613eb5565b6008545b90506011600001600f5481548110613ecf57613ecf615884565b9060005260206000200154811180613f0957506011600201600f5481548110613efa57613efa615884565b90600052602060002001544210155b1561402a576011600201600f5481548110613f2657613f26615884565b90600052602060002001544210613f6957896011600001600f5481548110613f5057613f50615884565b9060005260206000200154613f659190615982565b6010555b60065460ff1615613f7c57613f7c614477565b600060118101600f5481548110613f9557613f95615884565b90600052602060002001548211613fe4578a826011600001600f5481548110613fc057613fc0615884565b9060005260206000200154613fd5919061596b565b613fdf919061596b565b613fe7565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190614023908490615982565b9091555050505b881561415657601c54600160a81b900460ff161561407a576001600160a01b038b1660009081526027602052604090205460ff1661407a5760405162461bcd60e51b81526004016111199061599a565b601b546005546001600160a01b03909116906391c61966908d9061409e908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b50505050896009600082825461410e9190615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c07833981519152919081900360600190a46141cf565b600554614163908b615843565b6001600160a01b038c166000908152602460205260408120805490919061418b908490615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c47833981519152919081900360600190a45b83600a60008282546141e19190615982565b909155506141f2905083898d6144e7565b8115614202576142028b8361468e565b60019650505050506142146001600055565b5050949350505050565b61422661427d565b601f95909555602093909355601d80546001600160a01b039093166001600160a01b031990931692909217909155601e55602180549215156101000261ff00199215159290921661ffff1990931692909217179055565b600e546001600160a01b03163314806142a057506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206e6f74206d616e61676572206f72206f776e657200000000006044820152606401611119565b600d546001600160a01b031633148061430f5750600e546001600160a01b031633145b8061432457506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206e6f742061646d696e2c206d616e61676572206f72206f776e60448201526132b960f11b6064820152608401611119565b614383614e8e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16156112a95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611119565b600260005414156144705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611119565b6002600055565b60005b600f5460135461448a919061596b565b8110156112355760075461449e9082615843565b6144a89042615982565b600f546013906144b9908490615982565b815481106144c9576144c9615884565b600091825260209091200155806144df8161589a565b91505061447a565b601d546000906001600160a01b03161561451d57601d54601e5461451a9186916001600160a01b03909116906000614ede565b90505b600061452c8584866000614fdc565b90506145388183615982565b614542908661596b565b60175490955061458f57600c546001600160a01b03166145745760405162461bcd60e51b815260040161111990615b6d565b600c5461458a906001600160a01b03168661468e565b614687565b6000805b601754811015614629576000620186a0601683815481106145b6576145b6615884565b9060005260206000200154896145cc9190615843565b6145d69190615862565b9050614609601783815481106145ee576145ee615884565b6000918252602090912001546001600160a01b03168261468e565b6146138184615982565b92505080806146219061589a565b915050614593565b506000614636828861596b565b1115614685576017805461468591906146519060019061596b565b8154811061466157614661615884565b6000918252602090912001546001600160a01b0316614680838961596b565b61468e565b505b5050505050565b804710156146cc5760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606401611119565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614719576040519150601f19603f3d011682016040523d82523d6000602084013e61471e565b606091505b5050905080611ccf5760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606401611119565b600e546001600160a01b031633146112a95760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1036b0b730b3b2b960711b6044820152606401611119565b6001546001600160a01b031633146112a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611119565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6148676143d0565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143b33390565b601d546000906001600160a01b0316156148dc57601d54601e546018546148d99286926001600160a01b0391821692909116614ede565b90505b60006148f6843360185486906001600160a01b0316614fdc565b90506149028183615982565b61490c908561596b565b601754909450614a0c57600c546001600160a01b031661493e5760405162461bcd60e51b815260040161111990615b6d565b6018546000906001600160a01b0316335b600c5460405161496e92916001600160a01b0316908990602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149a39190615b9d565b6000604051808303816000865af19150503d80600081146149e0576040519150601f19603f3d011682016040523d82523d6000602084013e6149e5565b606091505b5050905080614a065760405162461bcd60e51b815260040161111990615bd8565b50611f8f565b6000805b601754811015614b5a576000620186a060168381548110614a3357614a33615884565b906000526020600020015488614a499190615843565b614a539190615862565b6018549091506000906001600160a01b03163360178581548110614a7957614a79615884565b600091825260209091200154604051614aa192916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614ad69190615b9d565b6000604051808303816000865af19150503d8060008114614b13576040519150601f19603f3d011682016040523d82523d6000602084013e614b18565b606091505b5050905080614b395760405162461bcd60e51b815260040161111990615bd8565b614b438285615982565b935050508080614b529061589a565b915050614a10565b506000614b67828761596b565b1115614687576018546000906001600160a01b0316335b60178054614b8e9060019061596b565b81548110614b9e57614b9e615884565b6000918252602090912001546001600160a01b0316614bbd858a61596b565b604051602401614bcf93929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614c049190615b9d565b6000604051808303816000865af19150503d8060008114614c41576040519150601f19603f3d011682016040523d82523d6000602084013e614c46565b606091505b50509050806146855760405162461bcd60e51b815260040161111990615bd8565b601d546000906001600160a01b031615614ca157601d54601e54601954614c9e9286926001600160a01b0391821692909116614ede565b90505b6000614cbb843360195486906001600160a01b0316614fdc565b9050614cc78183615982565b614cd1908561596b565b601754909450614d1857600c546001600160a01b0316614d035760405162461bcd60e51b815260040161111990615b6d565b6019546000906001600160a01b03163361494f565b6000805b601754811015614e66576000620186a060168381548110614d3f57614d3f615884565b906000526020600020015488614d559190615843565b614d5f9190615862565b6019549091506000906001600160a01b03163360178581548110614d8557614d85615884565b600091825260209091200154604051614dad92916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614de29190615b9d565b6000604051808303816000865af19150503d8060008114614e1f576040519150601f19603f3d011682016040523d82523d6000602084013e614e24565b606091505b5050905080614e455760405162461bcd60e51b815260040161111990615bd8565b614e4f8285615982565b935050508080614e5e9061589a565b915050614d1c565b506000614e73828761596b565b1115614687576019546000906001600160a01b031633614b7e565b600154600160a01b900460ff166112a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611119565b6000806064614eed8588615843565b614ef79190615862565b90506001600160a01b03831615614fc75760006001600160a01b038416338784604051602401614f2993929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614f5e9190615b9d565b6000604051808303816000865af19150503d8060008114614f9b576040519150601f19603f3d011682016040523d82523d6000602084013e614fa0565b606091505b5050905080614fc15760405162461bcd60e51b815260040161111990615bd8565b50614fd1565b614fd1858261468e565b90505b949350505050565b6000806000614feb868661507f565b9050614ff6816128d2565b61500257509050614fd4565b6150108782601f5487614ede565b61501a9083615982565b602154909250610100900460ff1661503457509050614fd4565b600061504182600061507f565b905061504c816128d2565b61505b57829350505050614fd4565b615069888260205488614ede565b6150739084615982565b98975050505050505050565b6001600160a01b038281166000908152602a60205260408120549091161580156150bb5750816001600160a01b0316836001600160a01b031614155b156150ef576001600160a01b038381166000908152602a6020526040902080546001600160a01b0319169184169190911790555b50506001600160a01b039081166000908152602a60205260409020541690565b5080546000825590600052602060002090810190611235919061517d565b826003810192821561516d579160200282015b8281111561516d578251805161515d918491602090910190615192565b5091602001919060010190615140565b506151799291506151d9565b5090565b5b80821115615179576000815560010161517e565b8280548282559060005260206000209081019282156151cd579160200282015b828111156151cd5782518255916020019190600101906151b2565b5061517992915061517d565b808211156151795760006151ed828261510f565b506001016151d9565b80356001600160a01b038116811461520d57600080fd5b919050565b60006020828403121561522457600080fd5b611154826151f6565b60006020828403121561523f57600080fd5b5035919050565b801515811461123557600080fd5b60006020828403121561526657600080fd5b813561115481615246565b6000806040838503121561528457600080fd5b61528d836151f6565b9150602083013561529d81615246565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156152e1576152e16152a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615310576153106152a8565b604052919050565b600067ffffffffffffffff821115615332576153326152a8565b5060051b60200190565b600082601f83011261534d57600080fd5b8135602061536261535d83615318565b6152e7565b82815260059290921b8401810191818101908684111561538157600080fd5b8286015b8481101561539c5780358352918301918301615385565b509695505050505050565b6000602082840312156153b957600080fd5b813567ffffffffffffffff8111156153d057600080fd5b614fd48482850161533c565b6000806000606084860312156153f157600080fd5b83359250602084013561540381615246565b9150615411604085016151f6565b90509250925092565b6000602080838503121561542d57600080fd5b823567ffffffffffffffff8082111561544557600080fd5b818501915085601f83011261545957600080fd5b6154616152be565b80606084018881111561547357600080fd5b845b818110156154a75780358581111561548d5760008081fd5b6154998b82890161533c565b855250928601928601615475565b509098975050505050505050565b600080604083850312156154c857600080fd5b823567ffffffffffffffff808211156154e057600080fd5b818501915085601f8301126154f457600080fd5b8135602061550461535d83615318565b82815260059290921b8401810191818101908984111561552357600080fd5b948201945b8386101561554857615539866151f6565b82529482019490820190615528565b9650508601359250508082111561555e57600080fd5b5061556b8582860161533c565b9150509250929050565b6000806040838503121561558857600080fd5b615591836151f6565b946020939093013593505050565b60008083601f8401126155b157600080fd5b50813567ffffffffffffffff8111156155c957600080fd5b6020830191508360208260051b85010111156155e457600080fd5b9250929050565b60008060006040848603121561560057600080fd5b833561560b81615246565b9250602084013567ffffffffffffffff81111561562757600080fd5b6156338682870161559f565b9497909650939450505050565b6000806040838503121561565357600080fd5b50508035926020909101359150565b6000806000806040858703121561567857600080fd5b843567ffffffffffffffff8082111561569057600080fd5b61569c8883890161559f565b909650945060208701359150808211156156b557600080fd5b506156c28782880161559f565b95989497509550505050565b600080602083850312156156e157600080fd5b823567ffffffffffffffff8111156156f857600080fd5b6157048582860161559f565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156157485783518352928401929184019160010161572c565b50909695505050505050565b60008060006060848603121561576957600080fd5b83359250615403602085016151f6565b6000806000806080858703121561578f57600080fd5b615798856151f6565b93506020850135925060408501356157af81615246565b91506157bd606086016151f6565b905092959194509250565b60008060008060008060c087890312156157e157600080fd5b86359550602087013594506157f8604088016151f6565b935060608701359250608087013561580f81615246565b915060a087013561581f81615246565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561585d5761585d61582d565b500290565b60008261587f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158ae576158ae61582d565b5060010190565b60208082526017908201527f496e76616c69642074696d6520666f7220627579696e67000000000000000000604082015260600190565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b60006020828403121561592b57600080fd5b815161115481615246565b6020808252818101527f416464726573732070726573656e7420696e2073616e6374696f6e206c697374604082015260600190565b60008282101561597d5761597d61582d565b500390565b600082198211156159955761599561582d565b500190565b6020808252601e908201527f55736572206e6f742077686974656c697374656420666f72207374616b650000604082015260600190565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b805169ffffffffffffffffffff8116811461520d57600080fd5b600080600080600060a08688031215615a3257600080fd5b615a3b86615a00565b9450602086015193506040860151925060608601519150615a5e60808701615a00565b90509295509295909350565b60006001600160ff1b0381841382841380821686840486111615615a9057615a9061582d565b600160ff1b6000871282811687830589121615615aaf57615aaf61582d565b60008712925087820587128484161615615acb57615acb61582d565b87850587128184161615615ae157615ae161582d565b505050929093029392505050565b600060208284031215615b0157600080fd5b5051919050565b60208082526021908201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636040820152606560f81b606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526016908201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b604082015260600190565b6000825160005b81811015615bbe5760208186018101518583015201615ba4565b81811115615bcd576000828501525b509190910192915050565b602080825260149082015273151bdad95b881c185e5b595b9d0819985a5b195960621b60408201526060019056fe6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4754d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36a26469706673582212203448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b064736f6c634300080900330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000683596e000000000000000000000000000000000000000000000000000000000005b8d800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000632ea00000000000000000000000000000000000000000000000000000000000c65d400000000000000000000000000000000000000000000000000000000001298be000000000000000000000000000000000000000000000000000000000018cba800000000000000000000000000000000000000000000000000000000001efe92000000000000000000000000000000000000000000000000000000000025317c00000000000000000000000000000000000000000000000000000000002b64660000000000000000000000000000000000000000000000000000000000319750000000000000000000000000000000000000000000000000000000000037ca3a00000000000000000000000000000000000000000000000000000000003dfd24000000000000000000000000000000000000000000000000000000000044300e00000000000000000000000000000000000000000000000000000000004a62f800000000000000000000000000000000000000000000000000000000005095e2000000000000000000000000000000000000000000000000000000000056c8cc00000000000000000000000000000000000000000000000000000000005cfbb60000000000000000000000000000000000000000000000000000000000632ea0000000000000000000000000000000000000000000000000000000000069618a00000000000000000000000000000000000000000000000000000000006f9474000000000000000000000000000000000000000000000000000000000075c75e00000000000000000000000000000000000000000000000000000000007bfa48000000000000000000000000000000000000000000000000000000000082a7440000000000000000000000000000000000000000000000000000000000895440000000000000000000000000000000000000000000000000000000000090013c000000000000000000000000000000000000000000000000000000000096ae3800000000000000000000000000000000000000000000000000000000009d5b340000000000000000000000000000000000000000000000000000000000a408300000000000000000000000000000000000000000000000000000000000aab52c0000000000000000000000000000000000000000000000000000000000b162280000000000000000000000000000000000000000000000000000000000b80f240000000000000000000000000000000000000000000000000000000000bebc200000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000a36cc19bab000000000000000000000000000000000000000000000000000000a52a689f9ba00000000000000000000000000000000000000000000000000000a6e80fa38c400000000000000000000000000000000000000000000000000000a8a5b6a77ce00000000000000000000000000000000000000000000000000000aa635dab6d800000000000000000000000000000000000000000000000000000ac2104af5e200000000000000000000000000000000000000000000000000000addeabb34ec00000000000000000000000000000000000000000000000000000af9c52b73f600000000000000000000000000000000000000000000000000000b159f9bb30000000000000000000000000000000000000000000000000000000b317a0bf20a00000000000000000000000000000000000000000000000000000b4d547c311400000000000000000000000000000000000000000000000000000b692eec701e00000000000000000000000000000000000000000000000000000b85095caf2800000000000000000000000000000000000000000000000000000ba0e3ccee3200000000000000000000000000000000000000000000000000000bbcbe3d2d3c00000000000000000000000000000000000000000000000000000bd898ad6c4600000000000000000000000000000000000000000000000000000bf4731dab5000000000000000000000000000000000000000000000000000000c104d8dea5a00000000000000000000000000000000000000000000000000000c2c27fe296400000000000000000000000000000000000000000000000000000c48026e686e00000000000000000000000000000000000000000000000000000c63dcdea77800000000000000000000000000000000000000000000000000000c7fb74ee68200000000000000000000000000000000000000000000000000000c9b91bf258c00000000000000000000000000000000000000000000000000000cb76c2f649600000000000000000000000000000000000000000000000000000cd3469fa3a000000000000000000000000000000000000000000000000000000cef210fe2aa00000000000000000000000000000000000000000000000000000d0afb8021b400000000000000000000000000000000000000000000000000000d26d5f060be00000000000000000000000000000000000000000000000000000d42b0609fc800000000000000000000000000000000000000000000000000000d5e8ad0ded2000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000683ec7a0000000000000000000000000000000000000000000000000000000006842bc20000000000000000000000000000000000000000000000000000000006846b0a000000000000000000000000000000000000000000000000000000000684aa52000000000000000000000000000000000000000000000000000000000684e99a00000000000000000000000000000000000000000000000000000000068528e2000000000000000000000000000000000000000000000000000000000685682a000000000000000000000000000000000000000000000000000000000685a772000000000000000000000000000000000000000000000000000000000685e6ba0000000000000000000000000000000000000000000000000000000006862602000000000000000000000000000000000000000000000000000000000686654a000000000000000000000000000000000000000000000000000000000686a492000000000000000000000000000000000000000000000000000000000686e3da0000000000000000000000000000000000000000000000000000000006872322000000000000000000000000000000000000000000000000000000000687626a000000000000000000000000000000000000000000000000000000000687a1b2000000000000000000000000000000000000000000000000000000000687e0fa00000000000000000000000000000000000000000000000000000000068820420000000000000000000000000000000000000000000000000000000006885f8a0000000000000000000000000000000000000000000000000000000006889ed2000000000000000000000000000000000000000000000000000000000688de1a0000000000000000000000000000000000000000000000000000000006891d620000000000000000000000000000000000000000000000000000000006895caa0000000000000000000000000000000000000000000000000000000006899bf2000000000000000000000000000000000000000000000000000000000689db3a00000000000000000000000000000000000000000000000000000000068a1a8200000000000000000000000000000000000000000000000000000000068a59ca00000000000000000000000000000000000000000000000000000000068a991200000000000000000000000000000000000000000000000000000000068ad85a00000000000000000000000000000000000000000000000000000000068b17a20

Deployed Bytecode

0x6080604052600436106105025760003560e01c80638dcf67ca11610297578063d1690fec11610165578063f0120ff8116100cc578063f851a44011610085578063f851a44014610f8b578063f885838614610fab578063f8b91abe14610fcb578063fe21a94f14610fe0578063fe575a8714610ff3578063ff14ca111461102357600080fd5b8063f0120ff814610ed5578063f04d688f14610ef5578063f056633414610f0b578063f0ff892314610f2b578063f2fde38b14610f4b578063f597573f14610f6b57600080fd5b8063e985e3671161011e578063e985e36714610e1f578063eac0d11514610e3f578063eadd94ec14610e5f578063eb66e2ef14610e75578063ec571c6a14610e95578063efc8647814610eb557600080fd5b8063d1690fec14610d69578063d258919614610d89578063e19648db14610da9578063e32204dd14610dc9578063e6da921314610de9578063e6e78d0614610e0957600080fd5b8063b4d94f4411610209578063c6cc2672116101c2578063c6cc267214610cd9578063c8adff0114610cef578063ca1600b614610d04578063cad0055614610d1e578063cb1a4fc014610d3e578063cff805ab14610d5357600080fd5b8063b4d94f4414610bf6578063b8d612ec14610c2c578063ba166a3914610c4c578063bb695f2a14610c79578063c23326f314610c99578063c49cc64514610cb957600080fd5b8063a29f481c1161025b578063a29f481c14610b36578063a2db641614610b56578063a3fbbaae14610b76578063a6d42e4e14610b96578063ae10426514610bb6578063b00bba6a14610bd657600080fd5b80638dcf67ca14610aac5780638e15f47314610acb5780639a89c1fb14610ae05780639cfa0f7c14610b00578063a1fe1dee14610b1657600080fd5b80634e71d92d116103d45780636ddcca29116103465780637ad71f72116102ff5780637ad71f7214610a0d5780637f6fb25314610a2d5780638456cb5914610a4357806386fc6ea814610a5857806388c3e45814610a785780638da5cb5b14610a8e57600080fd5b80636ddcca29146109525780636e6973dd14610972578063704b6c0214610992578063715018a6146109b257806373b2e80e146109c757806378e97925146109f757600080fd5b80635df4f353116103985780635df4f3531461089757806361ad0b7c146108c757806363b20117146108e757806363e40879146108fd578063641046f41461091d57806368cdafe61461093257600080fd5b80634e71d92d1461080d57806350429ee4146108225780635bc34f71146108425780635c975abb146108585780635ddc56881461087757600080fd5b80632dc358e8116104785780633f4ba83a116104315780633f4ba83a146107795780634151848f1461078e578063415eed46146107a157806343568eae146107c1578063481c6a75146107d75780634bc6191a146107f757600080fd5b80632dc358e8146106bc57806330e74f08146106dc57806333f76178146106fd57806337ba50941461071357806338646608146107295780633af32abf1461074957600080fd5b8063232e95be116104ca578063232e95be146105e357806323a8f1c01461060457806325312e5414610624578063278c278b1461065c57806329a5a0b61461067c5780632c73304d1461069c57600080fd5b8063032bd1f71461050757806307f180821461054c5780630a200fc71461056c5780630ba36dcd1461058e5780631fa2bc92146105c9575b600080fd5b34801561051357600080fd5b50610537610522366004615212565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561055857600080fd5b5061053761056736600461522d565b611043565b34801561057857600080fd5b5061058c610587366004615254565b61109d565b005b34801561059a57600080fd5b506105bb6105a9366004615212565b60246020526000908152604090205481565b604051908152602001610543565b3480156105d557600080fd5b506006546105379060ff1681565b3480156105ef57600080fd5b50601c5461053790600160a81b900460ff1681565b34801561061057600080fd5b5061058c61061f36600461522d565b6110b8565b34801561063057600080fd5b50601954610644906001600160a01b031681565b6040516001600160a01b039091168152602001610543565b34801561066857600080fd5b5061058c61067736600461522d565b6110c5565b34801561068857600080fd5b506105bb61069736600461522d565b611127565b3480156106a857600080fd5b5061058c6106b7366004615271565b61115b565b3480156106c857600080fd5b5061058c6106d73660046153a7565b6111a3565b3480156106e857600080fd5b50601c5461053790600160a01b900460ff1681565b34801561070957600080fd5b506105bb60055481565b34801561071f57600080fd5b506105bb60225481565b34801561073557600080fd5b50601b54610644906001600160a01b031681565b34801561075557600080fd5b50610537610764366004615212565b60276020526000908152604090205460ff1681565b34801561078557600080fd5b5061058c611299565b61053761079c3660046153dc565b6112ab565b3480156107ad57600080fd5b506105376107bc36600461541a565b6117b9565b3480156107cd57600080fd5b506105bb60075481565b3480156107e357600080fd5b50600e54610644906001600160a01b031681565b34801561080357600080fd5b506105bb601e5481565b34801561081957600080fd5b506105376117f1565b34801561082e57600080fd5b50601d54610644906001600160a01b031681565b34801561084e57600080fd5b506105bb600f5481565b34801561086457600080fd5b50600154600160a01b900460ff16610537565b34801561088357600080fd5b5061058c6108923660046154b5565b611ad9565b3480156108a357600080fd5b506105376108b2366004615212565b60286020526000908152604090205460ff1681565b3480156108d357600080fd5b5061058c6108e2366004615254565b611cd4565b3480156108f357600080fd5b506105bb60085481565b34801561090957600080fd5b506105bb61091836600461522d565b611cef565b34801561092957600080fd5b5061058c611d11565b34801561093e57600080fd5b5061058c61094d366004615575565b611e6c565b34801561095e57600080fd5b5061058c61096d3660046155eb565b611f16565b34801561097e57600080fd5b5061058c61098d3660046155eb565b611f95565b34801561099e57600080fd5b5061058c6109ad366004615212565b61200e565b3480156109be57600080fd5b5061058c612038565b3480156109d357600080fd5b506105376109e2366004615212565b60256020526000908152604090205460ff1681565b348015610a0357600080fd5b506105bb60025481565b348015610a1957600080fd5b50610644610a2836600461522d565b61204a565b348015610a3957600080fd5b506105bb60095481565b348015610a4f57600080fd5b5061058c612074565b348015610a6457600080fd5b5061058c610a73366004615254565b612084565b348015610a8457600080fd5b506105bb601f5481565b348015610a9a57600080fd5b506001546001600160a01b0316610644565b348015610ab857600080fd5b5060215461053790610100900460ff1681565b348015610ad757600080fd5b506105bb6120a6565b348015610aec57600080fd5b5061058c610afb366004615640565b612146565b348015610b0c57600080fd5b506105bb60045481565b348015610b2257600080fd5b5061058c610b31366004615662565b612159565b348015610b4257600080fd5b5061058c610b51366004615212565b61229a565b348015610b6257600080fd5b5061058c610b713660046156ce565b612341565b348015610b8257600080fd5b5061058c610b91366004615212565b6123bc565b348015610ba257600080fd5b5061058c610bb136600461541a565b6123e6565b348015610bc257600080fd5b506105bb610bd136600461522d565b6123fb565b348015610be257600080fd5b5061058c610bf1366004615212565b612731565b348015610c0257600080fd5b50610644610c11366004615212565b602a602052600090815260409020546001600160a01b031681565b348015610c3857600080fd5b5061058c610c47366004615640565b612853565b348015610c5857600080fd5b50610c6c610c6736600461522d565b612866565b6040516105439190615710565b348015610c8557600080fd5b50610537610c94366004615212565b6128d2565b348015610ca557600080fd5b506105bb610cb436600461522d565b612952565b348015610cc557600080fd5b50601a54610644906001600160a01b031681565b348015610ce557600080fd5b506105bb60235481565b348015610cfb57600080fd5b50610c6c612973565b348015610d1057600080fd5b506021546105379060ff1681565b348015610d2a57600080fd5b5061058c610d39366004615212565b6129cb565b348015610d4a57600080fd5b50610537612a44565b348015610d5f57600080fd5b506105bb60105481565b348015610d7557600080fd5b50610537610d843660046153dc565b612c9e565b348015610d9557600080fd5b5061058c610da43660046156ce565b613219565b348015610db557600080fd5b506105bb610dc436600461522d565b613294565b348015610dd557600080fd5b50600c54610644906001600160a01b031681565b348015610df557600080fd5b506105bb610e04366004615640565b6132a4565b348015610e1557600080fd5b506105bb60205481565b348015610e2b57600080fd5b50600b54610644906001600160a01b031681565b348015610e4b57600080fd5b5061058c610e5a366004615254565b6132d8565b348015610e6b57600080fd5b506105bb600a5481565b348015610e8157600080fd5b5061058c610e903660046155eb565b6132fe565b348015610ea157600080fd5b50601c54610644906001600160a01b031681565b348015610ec157600080fd5b50610537610ed0366004615754565b613377565b348015610ee157600080fd5b50610537610ef03660046153dc565b613567565b348015610f0157600080fd5b506105bb60035481565b348015610f1757600080fd5b5061058c610f2636600461522d565b613ad2565b348015610f3757600080fd5b5061058c610f46366004615575565b613bb8565b348015610f5757600080fd5b5061058c610f66366004615212565b613be6565b348015610f7757600080fd5b50601854610644906001600160a01b031681565b348015610f9757600080fd5b50600d54610644906001600160a01b031681565b348015610fb757600080fd5b506105bb610fc636600461522d565b613c5c565b348015610fd757600080fd5b5061058c613c6c565b610537610fee366004615779565b613c86565b348015610fff57600080fd5b5061053761100e366004615212565b60266020526000908152604090205460ff1681565b34801561102f57600080fd5b5061058c61103e3660046157c8565b61421e565b600061104d61427d565b60038054908390556040805182815260208101859052428183015290517f5f3a900c85949962b4cc192dd3714dae64071dc2e907049ec720b023270905a49181900360600190a150600192915050565b6110a561427d565b6006805460ff1916911515919091179055565b6110c061427d565b600755565b6110cd61427d565b600081116111225760405162461bcd60e51b815260206004820152601c60248201527f5a65726f206d617820746f6b656e7320746f206275792076616c75650000000060448201526064015b60405180910390fd5b600455565b600080611133836123fb565b905061113d6120a6565b60055461114a9083615843565b6111549190615862565b9392505050565b61116361427d565b6001600160a01b03821661117657600080fd5b601c8054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6111ab6142ec565b80516111f95760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742075706461746520696e76616c69642076616c756573000000006044820152606401611119565b8051600114801561122457508060008151811061121857611218615884565b60200260200101516000145b15611238576112356015600061510f565b50565b6112446015600061510f565b60005b815181101561129557601582828151811061126457611264615884565b602090810291909101810151825460018101845560009384529190922001558061128d8161589a565b915050611247565b5050565b6112a161427d565b6112a961437b565b565b6000836002544210156112d05760405162461bcd60e51b8152600401611119906158b5565b600081116112f05760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561139d57601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113809190615919565b1561139d5760405162461bcd60e51b815260040161111990615936565b6113a56143d0565b6113ad61441d565b60006113b8876123fb565b905060006113c46120a6565b6005546113d19084615843565b6113db9190615862565b90508034101561141c5760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000611428823461596b565b9050886008600082825461143c9190615982565b90915550506010541561146157886010600082825461145b9190615982565b90915550505b6000601054600854116114765760105461147a565b6008545b90506011600001600f548154811061149457611494615884565b90600052602060002001548111806114ce57506011600201600f54815481106114bf576114bf615884565b90600052602060002001544210155b156115ef576011600201600f54815481106114eb576114eb615884565b9060005260206000200154421061152e57896011600001600f548154811061151557611515615884565b906000526020600020015461152a9190615982565b6010555b60065460ff161561154157611541614477565b600060118101600f548154811061155a5761155a615884565b906000526020600020015482116115a9578a826011600001600f548154811061158557611585615884565b906000526020600020015461159a919061596b565b6115a4919061596b565b6115ac565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f805493945090929091906115e8908490615982565b9091555050505b881561170457601c54600160a81b900460ff1615611636573360009081526027602052604090205460ff166116365760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554611655908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561169b57600080fd5b505af11580156116af573d6000803e3d6000fd5b5050505089600960008282546116c59190615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c07833981519152919081900360600190a461176b565b600554611711908b615843565b3360009081526024602052604081208054909190611730908490615982565b90915550506040805184815260208101869052428183015290516000918c913391600080516020615c47833981519152919081900360600190a45b83600a600082825461177d9190615982565b9091555061178e90508389336144e7565b811561179e5761179e338361468e565b60019650505050506117b06001600055565b50509392505050565b60006117c361427d565b6117d0601183600361512d565b506000600f81905560108190556117e99060159061510f565b506001919050565b60006117fb6143d0565b600b546001600160a01b031661184a5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff16156118aa5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b60006003541180156118be57506003544210155b806118d857503360009081526027602052604090205460ff165b6119245760405162461bcd60e51b815260206004820152601960248201527f436c61696d20686173206e6f74207374617274656420796574000000000000006044820152606401611119565b3360009081526025602052604090205460ff16156119765760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401611119565b336000908152602560209081526040808320805460ff191660011790556024909152902054806119db5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401611119565b336000818152602460208181526040808420849055600b54815163a9059cbb60e01b815260048101969096529285018690525192936001600160a01b039092169263a9059cbb92604480820193929182900301818787803b158015611a3f57600080fd5b505af1158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a779190615919565b905080611a965760405162461bcd60e51b8152600401611119906159d1565b6040805183815242602082015233917f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b910160405180910390a260019250505090565b611ae1614764565b8051825114611b265760405162461bcd60e51b81526020600482015260116024820152704d69736d6174636865642061727261797360781b6044820152606401611119565b611b326017600061510f565b611b3e6016600061510f565b6000805b8351811015611c7c576000838281518110611b5f57611b5f615884565b602002602001015111611bbe5760405162461bcd60e51b815260206004820152602160248201527f50657263656e74616765206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608401611119565b828181518110611bd057611bd0615884565b602002602001015182611be39190615982565b91506017848281518110611bf957611bf9615884565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601690849083908110611c4b57611c4b615884565b6020908102919091018101518254600181018455600093845291909220015580611c748161589a565b915050611b42565b5080620186a014611ccf5760405162461bcd60e51b815260206004820152601f60248201527f546f74616c2070657263656e74616765206d75737420657175616c20313030006044820152606401611119565b505050565b611cdc61427d565b6021805460ff1916911515919091179055565b6000611cfa826123fb565b9050611d0b64e8d4a5100082615862565b92915050565b611d196142ec565b601054601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec015560065460ff1615611d6257611d62614477565b6011600001600f5481548110611d7a57611d7a615884565b90600052602060002001546010541015611e5557600f54611de3576008546015906011600001600f5481548110611db357611db3615884565b9060005260206000200154611dc8919061596b565b81546001810183556000928352602090922090910155611e2d565b6010546015906011600001600f5481548110611e0157611e01615884565b9060005260206000200154611e16919061596b565b815460018101835560009283526020909220909101555b6011600001600f5481548110611e4557611e45615884565b6000918252602090912001546010555b600f8054906000611e658361589a565b9190505550565b611e7461427d565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef79190615919565b905080611ccf5760405162461bcd60e51b8152600401611119906159d1565b611f1e61427d565b60005b81811015611f8f578360286000858585818110611f4057611f40615884565b9050602002016020810190611f559190615212565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611f878161589a565b915050611f21565b50505050565b611f9d61427d565b60005b81811015611f8f578360266000858585818110611fbf57611fbf615884565b9050602002016020810190611fd49190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120068161589a565b915050611fa0565b61201661427d565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6120406147b3565b6112a9600061480d565b6017818154811061205a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61207c61427d565b6112a961485f565b61208c61427d565b602180549115156101000261ff0019909216919091179055565b600080601a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156120f757600080fd5b505afa15801561210b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212f9190615a1a565b505050915050806402540be400611d0b9190615a6a565b61214e61427d565b600f91909155601055565b61216161427d565b8281146121a25760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401611119565b6000805b8481101561225f578383828181106121c0576121c0615884565b90506020020135602460008888858181106121dd576121dd615884565b90506020020160208101906121f29190615212565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546122219190615982565b90915550849050838281811061223957612239615884565b905060200201358261224b9190615982565b9150806122578161589a565b9150506121a6565b5084849050602360008282546122759190615982565b92505081905550806022600082825461228e9190615982565b90915550505050505050565b6122a261427d565b6001600160a01b0381166122ed5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9197d4b7790c1ef2cbc99e6139e49173e9f34ff565c8df71a9f37acafde4d7159060200160405180910390a150565b61234961427d565b8060005b81811015611f8f5760016029600086868581811061236d5761236d615884565b90506020020160208101906123829190615212565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806123b48161589a565b91505061234d565b6123c4614764565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6123ee61427d565b611295601182600361512d565b600080600060105460001461241257601054612416565b6008545b905060045484111561246a5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e742065786365656473206d617820746f6b656e7320746f206275796044820152606401611119565b6011600001600f548154811061248257612482615884565b906000526020600020015481856124999190615982565b11806124c757506011600201600f54815481106124b8576124b8615884565b90600052602060002001544210155b156126f9576011546124db9060019061596b565b600f541061251a5760405162461bcd60e51b815260206004820152600c60248201526b57726f6e6720706172616d7360a01b6044820152606401611119565b6011600201600f548154811061253257612532615884565b9060005260206000200154421061264557600f54601190612554906001615982565b8154811061256457612564615884565b906000526020600020015484601160006003811061258457612584615884565b01600f548154811061259857612598615884565b90600052602060002001546125ad9190615982565b11156126075760405162461bcd60e51b815260206004820152602360248201527f43616e74205075726368617365204d6f726520696e20696e646976696475616c604482015262040e8f60eb1b6064820152608401611119565b600f54601290612618906001615982565b8154811061262857612628615884565b90600052602060002001548461263e9190615843565b915061272a565b60008160118201600f548154811061265f5761265f615884565b9060005260206000200154612674919061596b565b600f54909150601290612688906001615982565b8154811061269857612698615884565b906000526020600020015481866126af919061596b565b6126b99190615843565b6011600101600f54815481106126d1576126d1615884565b9060005260206000200154826126e79190615843565b6126f19190615982565b92505061272a565b6011600101600f548154811061271157612711615884565b9060005260206000200154846127279190615843565b91505b5092915050565b61273961427d565b6001600160a01b0381166127b55760405162461bcd60e51b815260206004820152603760248201527f7374616b696e67206d616e616765722063616e6e6f7420626520696e6974696160448201527f6c697a65642077697468207a65726f20616464726573730000000000000000006064820152608401611119565b601b80546001600160a01b0319166001600160a01b03838116918217909255600b5460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b390604401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615919565b61285b61427d565b601f91909155602055565b60606011826003811061287b5761287b615884565b018054806020026020016040519081016040528092919081815260200182805480156128c657602002820191906000526020600020905b8154815260200190600101908083116128b2575b50505050509050919050565b60006001600160a01b038216158061290257506001600160a01b03821660009081526029602052604090205460ff165b8061291557506001600160a01b03821633145b1561292257506000919050565b60215460ff1661293457506001919050565b506001600160a01b0316600090815260246020526040902054151590565b6015818154811061296257600080fd5b600091825260209091200154905081565b606060158054806020026020016040519081016040528092919081815260200182805480156129c157602002820191906000526020600020905b8154815260200190600101908083116129ad575b5050505050905090565b6129d361427d565b6001600160a01b038116612a225760405162461bcd60e51b8152602060048201526016602482015275616464726573732063616e6e6f74206265207a65726f60501b6044820152606401611119565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a4e6143d0565b600b546001600160a01b0316612a9d5760405162461bcd60e51b815260206004820152601460248201527314d85b19481d1bdad95b881b9bdd08185919195960621b6044820152606401611119565b3360009081526026602052604090205460ff1615612afd5760405162461bcd60e51b815260206004820152601b60248201527f54686973204164647265737320697320426c61636b6c697374656400000000006044820152606401611119565b601c54600160a81b900460ff1615612b3e573360009081526027602052604090205460ff16612b3e5760405162461bcd60e51b81526004016111199061599a565b3360009081526024602052604090205480612b8e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f207374616b6560801b6044820152606401611119565b600554612b9b9082615862565b60096000828254612bac9190615982565b9091555050601b546001600160a01b03166391c61966336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b158015612c0b57600080fd5b505af1158015612c1f573d6000803e3d6000fd5b5050505060246000612c2e3390565b6001600160a01b031681526020810191909152604001600090812055336001600160a01b03167ffa4ec67f9254455933eb145bae864b26f29dd0a7bbb76eb11e4d6b8b9b184c2b8242604051612c8e929190918252602082015260400190565b60405180910390a2600191505090565b600083600254421015612cc35760405162461bcd60e51b8152600401611119906158b5565b60008111612ce35760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff1615612d9057601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015612d3b57600080fd5b505afa158015612d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d739190615919565b15612d905760405162461bcd60e51b815260040161111990615936565b612d986143d0565b6000612da3876123fb565b90508660086000828254612db79190615982565b9091555060009050612dce64e8d4a5100083615862565b9050601054600014612df2578760106000828254612dec9190615982565b90915550505b600060105460085411612e0757601054612e0b565b6008545b90506011600001600f5481548110612e2557612e25615884565b9060005260206000200154811180612e5f57506011600201600f5481548110612e5057612e50615884565b90600052602060002001544210155b15612f80576011600201600f5481548110612e7c57612e7c615884565b90600052602060002001544210612ebf57886011600001600f5481548110612ea657612ea6615884565b9060005260206000200154612ebb9190615982565b6010555b60065460ff1615612ed257612ed2614477565b600060118101600f5481548110612eeb57612eeb615884565b90600052602060002001548211612f3a5789826011600001600f5481548110612f1657612f16615884565b9060005260206000200154612f2b919061596b565b612f35919061596b565b612f3d565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190612f79908490615982565b9091555050505b87156130b157601c54600160a81b900460ff1615612fc7573360009081526027602052604090205460ff16612fc75760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c6196633600554612fe6908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561302c57600080fd5b505af1158015613040573d6000803e3d6000fd5b5050505088600960008282546130569190615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c078339815191528587426040516130a4939291909283526020830191909152604082015260600190565b60405180910390a4613134565b6005546130be908a615843565b33600090815260246020526040812080549091906130dd908490615982565b90915550506018546001600160a01b031689336001600160a01b0316600080516020615c4783398151915285874260405161312b939291909283526020830191909152604082015260600190565b60405180910390a45b82600a60008282546131469190615982565b90915550506018546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b1580156131a557600080fd5b505afa1580156131b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131dd9190615aef565b9050808311156131ff5760405162461bcd60e51b815260040161111990615b08565b61320983896148a2565b5060019998505050505050505050565b61322161427d565b8060005b81811015611f8f5760006029600086868581811061324557613245615884565b905060200201602081019061325a9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061328c8161589a565b915050613225565b6014818154811061296257600080fd5b601182600381106132b457600080fd5b0181815481106132c357600080fd5b90600052602060002001600091509150505481565b6132e061427d565b601c8054911515600160a81b0260ff60a81b19909216919091179055565b61330661427d565b60005b81811015611f8f57836027600085858581811061332857613328615884565b905060200201602081019061333d9190615212565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061336f8161589a565b915050613309565b600061338161427d565b6001600160a01b0383166133cc5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401611119565b600b80546001600160a01b038581166001600160a01b03199283168117909355601b805491861691909216811790915560405163095ea7b360e01b81526004810191909152600019602482015263095ea7b390604401602060405180830381600087803b15801561343c57600080fd5b505af1158015613450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134749190615919565b506040516323b872dd60e01b81526000906001600160a01b038516906323b872dd906134a890339030908a90600401615b49565b602060405180830381600087803b1580156134c257600080fd5b505af11580156134d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fa9190615919565b9050806135195760405162461bcd60e51b8152600401611119906159d1565b604080518681524260208201526001600160a01b038616917fdc9670dbabdd488b372eb16ebe49a39b3124a12cdffdcefbc89834a408bf8ff8910160405180910390a2506001949350505050565b60008360025442101561358c5760405162461bcd60e51b8152600401611119906158b5565b600081116135ac5760405162461bcd60e51b8152600401611119906158ec565b33601c54600160a01b900460ff161561365957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b15801561360457600080fd5b505afa158015613618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363c9190615919565b156136595760405162461bcd60e51b815260040161111990615936565b6136616143d0565b600061366c876123fb565b905086600860008282546136809190615982565b909155506000905061369764e8d4a5100083615862565b90506010546000146136bb5787601060008282546136b59190615982565b90915550505b6000601054600854116136d0576010546136d4565b6008545b90506011600001600f54815481106136ee576136ee615884565b906000526020600020015481118061372857506011600201600f548154811061371957613719615884565b90600052602060002001544210155b15613849576011600201600f548154811061374557613745615884565b9060005260206000200154421061378857886011600001600f548154811061376f5761376f615884565b90600052602060002001546137849190615982565b6010555b60065460ff161561379b5761379b614477565b600060118101600f54815481106137b4576137b4615884565b906000526020600020015482116138035789826011600001600f54815481106137df576137df615884565b90600052602060002001546137f4919061596b565b6137fe919061596b565b613806565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190613842908490615982565b9091555050505b871561397a57601c54600160a81b900460ff1615613890573360009081526027602052604090205460ff166138905760405162461bcd60e51b81526004016111199061599a565b601b546001600160a01b03166391c61966336005546138af908d615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156138f557600080fd5b505af1158015613909573d6000803e3d6000fd5b50505050886009600082825461391f9190615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c0783398151915285874260405161396d939291909283526020830191909152604082015260600190565b60405180910390a46139fd565b600554613987908a615843565b33600090815260246020526040812080549091906139a6908490615982565b90915550506019546001600160a01b031689336001600160a01b0316600080516020615c478339815191528587426040516139f4939291909283526020830191909152604082015260600190565b60405180910390a45b82600a6000828254613a0f9190615982565b90915550506019546000906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260440160206040518083038186803b158015613a6e57600080fd5b505afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190615aef565b905080831115613ac85760405162461bcd60e51b815260040161111990615b08565b6132098389614c67565b613ada61427d565b60008111613b1f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401611119565b804210613b625760405162461bcd60e51b815260206004820152601160248201527014d85b19481d1a5b59481a5b881c185cdd607a1b6044820152606401611119565b60028054908290556040805182815260208101849052428183015290516414d510549560da1b917fddd2ed237e6993c9380182683f2c8bec486aaaa429528852cd74dbdb96cea0b2919081900360600190a25050565b613bc061427d565b601d80546001600160a01b0319166001600160a01b039390931692909217909155601e55565b613bee6147b3565b6001600160a01b038116613c535760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611119565b6112358161480d565b6016818154811061296257600080fd5b613c746147b3565b600e80546001600160a01b0319169055565b600083600254421015613cab5760405162461bcd60e51b8152600401611119906158b5565b60008111613ccb5760405162461bcd60e51b8152600401611119906158ec565b601c548690600160a01b900460ff1615613d7957601c5460405163df592f7d60e01b81526001600160a01b0383811660048301529091169063df592f7d9060240160206040518083038186803b158015613d2457600080fd5b505afa158015613d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5c9190615919565b15613d795760405162461bcd60e51b815260040161111990615936565b613d816143d0565b613d8961441d565b3360009081526028602052604090205460ff16613de85760405162461bcd60e51b815260206004820181905260248201527f55736572206e6f742077686974656c697374656420666f7220746869732074786044820152606401611119565b6000613df3876123fb565b90506000613dff6120a6565b600554613e0c9084615843565b613e169190615862565b905080341015613e575760405162461bcd60e51b815260206004820152600c60248201526b13195cdcc81c185e5b595b9d60a21b6044820152606401611119565b6000613e63823461596b565b90508860086000828254613e779190615982565b909155505060105415613e9c578860106000828254613e969190615982565b90915550505b600060105460085411613eb157601054613eb5565b6008545b90506011600001600f5481548110613ecf57613ecf615884565b9060005260206000200154811180613f0957506011600201600f5481548110613efa57613efa615884565b90600052602060002001544210155b1561402a576011600201600f5481548110613f2657613f26615884565b90600052602060002001544210613f6957896011600001600f5481548110613f5057613f50615884565b9060005260206000200154613f659190615982565b6010555b60065460ff1615613f7c57613f7c614477565b600060118101600f5481548110613f9557613f95615884565b90600052602060002001548211613fe4578a826011600001600f5481548110613fc057613fc0615884565b9060005260206000200154613fd5919061596b565b613fdf919061596b565b613fe7565b60005b60158054600181810183556000928352600080516020615c27833981519152909101839055600f80549394509092909190614023908490615982565b9091555050505b881561415657601c54600160a81b900460ff161561407a576001600160a01b038b1660009081526027602052604090205460ff1661407a5760405162461bcd60e51b81526004016111199061599a565b601b546005546001600160a01b03909116906391c61966908d9061409e908e615843565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156140e457600080fd5b505af11580156140f8573d6000803e3d6000fd5b50505050896009600082825461410e9190615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c07833981519152919081900360600190a46141cf565b600554614163908b615843565b6001600160a01b038c166000908152602460205260408120805490919061418b908490615982565b90915550506040805184815260208101869052428183015290516000918c916001600160a01b038f1691600080516020615c47833981519152919081900360600190a45b83600a60008282546141e19190615982565b909155506141f2905083898d6144e7565b8115614202576142028b8361468e565b60019650505050506142146001600055565b5050949350505050565b61422661427d565b601f95909555602093909355601d80546001600160a01b039093166001600160a01b031990931692909217909155601e55602180549215156101000261ff00199215159290921661ffff1990931692909217179055565b600e546001600160a01b03163314806142a057506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152601b60248201527f63616c6c6572206e6f74206d616e61676572206f72206f776e657200000000006044820152606401611119565b600d546001600160a01b031633148061430f5750600e546001600160a01b031633145b8061432457506001546001600160a01b031633145b6112a95760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206e6f742061646d696e2c206d616e61676572206f72206f776e60448201526132b960f11b6064820152608401611119565b614383614e8e565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16156112a95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611119565b600260005414156144705760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611119565b6002600055565b60005b600f5460135461448a919061596b565b8110156112355760075461449e9082615843565b6144a89042615982565b600f546013906144b9908490615982565b815481106144c9576144c9615884565b600091825260209091200155806144df8161589a565b91505061447a565b601d546000906001600160a01b03161561451d57601d54601e5461451a9186916001600160a01b03909116906000614ede565b90505b600061452c8584866000614fdc565b90506145388183615982565b614542908661596b565b60175490955061458f57600c546001600160a01b03166145745760405162461bcd60e51b815260040161111990615b6d565b600c5461458a906001600160a01b03168661468e565b614687565b6000805b601754811015614629576000620186a0601683815481106145b6576145b6615884565b9060005260206000200154896145cc9190615843565b6145d69190615862565b9050614609601783815481106145ee576145ee615884565b6000918252602090912001546001600160a01b03168261468e565b6146138184615982565b92505080806146219061589a565b915050614593565b506000614636828861596b565b1115614685576017805461468591906146519060019061596b565b8154811061466157614661615884565b6000918252602090912001546001600160a01b0316614680838961596b565b61468e565b505b5050505050565b804710156146cc5760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b6044820152606401611119565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614719576040519150601f19603f3d011682016040523d82523d6000602084013e61471e565b606091505b5050905080611ccf5760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b6044820152606401611119565b600e546001600160a01b031633146112a95760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1036b0b730b3b2b960711b6044820152606401611119565b6001546001600160a01b031633146112a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611119565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6148676143d0565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143b33390565b601d546000906001600160a01b0316156148dc57601d54601e546018546148d99286926001600160a01b0391821692909116614ede565b90505b60006148f6843360185486906001600160a01b0316614fdc565b90506149028183615982565b61490c908561596b565b601754909450614a0c57600c546001600160a01b031661493e5760405162461bcd60e51b815260040161111990615b6d565b6018546000906001600160a01b0316335b600c5460405161496e92916001600160a01b0316908990602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516149a39190615b9d565b6000604051808303816000865af19150503d80600081146149e0576040519150601f19603f3d011682016040523d82523d6000602084013e6149e5565b606091505b5050905080614a065760405162461bcd60e51b815260040161111990615bd8565b50611f8f565b6000805b601754811015614b5a576000620186a060168381548110614a3357614a33615884565b906000526020600020015488614a499190615843565b614a539190615862565b6018549091506000906001600160a01b03163360178581548110614a7957614a79615884565b600091825260209091200154604051614aa192916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614ad69190615b9d565b6000604051808303816000865af19150503d8060008114614b13576040519150601f19603f3d011682016040523d82523d6000602084013e614b18565b606091505b5050905080614b395760405162461bcd60e51b815260040161111990615bd8565b614b438285615982565b935050508080614b529061589a565b915050614a10565b506000614b67828761596b565b1115614687576018546000906001600160a01b0316335b60178054614b8e9060019061596b565b81548110614b9e57614b9e615884565b6000918252602090912001546001600160a01b0316614bbd858a61596b565b604051602401614bcf93929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614c049190615b9d565b6000604051808303816000865af19150503d8060008114614c41576040519150601f19603f3d011682016040523d82523d6000602084013e614c46565b606091505b50509050806146855760405162461bcd60e51b815260040161111990615bd8565b601d546000906001600160a01b031615614ca157601d54601e54601954614c9e9286926001600160a01b0391821692909116614ede565b90505b6000614cbb843360195486906001600160a01b0316614fdc565b9050614cc78183615982565b614cd1908561596b565b601754909450614d1857600c546001600160a01b0316614d035760405162461bcd60e51b815260040161111990615b6d565b6019546000906001600160a01b03163361494f565b6000805b601754811015614e66576000620186a060168381548110614d3f57614d3f615884565b906000526020600020015488614d559190615843565b614d5f9190615862565b6019549091506000906001600160a01b03163360178581548110614d8557614d85615884565b600091825260209091200154604051614dad92916001600160a01b0316908690602401615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614de29190615b9d565b6000604051808303816000865af19150503d8060008114614e1f576040519150601f19603f3d011682016040523d82523d6000602084013e614e24565b606091505b5050905080614e455760405162461bcd60e51b815260040161111990615bd8565b614e4f8285615982565b935050508080614e5e9061589a565b915050614d1c565b506000614e73828761596b565b1115614687576019546000906001600160a01b031633614b7e565b600154600160a01b900460ff166112a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611119565b6000806064614eed8588615843565b614ef79190615862565b90506001600160a01b03831615614fc75760006001600160a01b038416338784604051602401614f2993929190615b49565b60408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251614f5e9190615b9d565b6000604051808303816000865af19150503d8060008114614f9b576040519150601f19603f3d011682016040523d82523d6000602084013e614fa0565b606091505b5050905080614fc15760405162461bcd60e51b815260040161111990615bd8565b50614fd1565b614fd1858261468e565b90505b949350505050565b6000806000614feb868661507f565b9050614ff6816128d2565b61500257509050614fd4565b6150108782601f5487614ede565b61501a9083615982565b602154909250610100900460ff1661503457509050614fd4565b600061504182600061507f565b905061504c816128d2565b61505b57829350505050614fd4565b615069888260205488614ede565b6150739084615982565b98975050505050505050565b6001600160a01b038281166000908152602a60205260408120549091161580156150bb5750816001600160a01b0316836001600160a01b031614155b156150ef576001600160a01b038381166000908152602a6020526040902080546001600160a01b0319169184169190911790555b50506001600160a01b039081166000908152602a60205260409020541690565b5080546000825590600052602060002090810190611235919061517d565b826003810192821561516d579160200282015b8281111561516d578251805161515d918491602090910190615192565b5091602001919060010190615140565b506151799291506151d9565b5090565b5b80821115615179576000815560010161517e565b8280548282559060005260206000209081019282156151cd579160200282015b828111156151cd5782518255916020019190600101906151b2565b5061517992915061517d565b808211156151795760006151ed828261510f565b506001016151d9565b80356001600160a01b038116811461520d57600080fd5b919050565b60006020828403121561522457600080fd5b611154826151f6565b60006020828403121561523f57600080fd5b5035919050565b801515811461123557600080fd5b60006020828403121561526657600080fd5b813561115481615246565b6000806040838503121561528457600080fd5b61528d836151f6565b9150602083013561529d81615246565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156152e1576152e16152a8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615310576153106152a8565b604052919050565b600067ffffffffffffffff821115615332576153326152a8565b5060051b60200190565b600082601f83011261534d57600080fd5b8135602061536261535d83615318565b6152e7565b82815260059290921b8401810191818101908684111561538157600080fd5b8286015b8481101561539c5780358352918301918301615385565b509695505050505050565b6000602082840312156153b957600080fd5b813567ffffffffffffffff8111156153d057600080fd5b614fd48482850161533c565b6000806000606084860312156153f157600080fd5b83359250602084013561540381615246565b9150615411604085016151f6565b90509250925092565b6000602080838503121561542d57600080fd5b823567ffffffffffffffff8082111561544557600080fd5b818501915085601f83011261545957600080fd5b6154616152be565b80606084018881111561547357600080fd5b845b818110156154a75780358581111561548d5760008081fd5b6154998b82890161533c565b855250928601928601615475565b509098975050505050505050565b600080604083850312156154c857600080fd5b823567ffffffffffffffff808211156154e057600080fd5b818501915085601f8301126154f457600080fd5b8135602061550461535d83615318565b82815260059290921b8401810191818101908984111561552357600080fd5b948201945b8386101561554857615539866151f6565b82529482019490820190615528565b9650508601359250508082111561555e57600080fd5b5061556b8582860161533c565b9150509250929050565b6000806040838503121561558857600080fd5b615591836151f6565b946020939093013593505050565b60008083601f8401126155b157600080fd5b50813567ffffffffffffffff8111156155c957600080fd5b6020830191508360208260051b85010111156155e457600080fd5b9250929050565b60008060006040848603121561560057600080fd5b833561560b81615246565b9250602084013567ffffffffffffffff81111561562757600080fd5b6156338682870161559f565b9497909650939450505050565b6000806040838503121561565357600080fd5b50508035926020909101359150565b6000806000806040858703121561567857600080fd5b843567ffffffffffffffff8082111561569057600080fd5b61569c8883890161559f565b909650945060208701359150808211156156b557600080fd5b506156c28782880161559f565b95989497509550505050565b600080602083850312156156e157600080fd5b823567ffffffffffffffff8111156156f857600080fd5b6157048582860161559f565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156157485783518352928401929184019160010161572c565b50909695505050505050565b60008060006060848603121561576957600080fd5b83359250615403602085016151f6565b6000806000806080858703121561578f57600080fd5b615798856151f6565b93506020850135925060408501356157af81615246565b91506157bd606086016151f6565b905092959194509250565b60008060008060008060c087890312156157e157600080fd5b86359550602087013594506157f8604088016151f6565b935060608701359250608087013561580f81615246565b915060a087013561581f81615246565b809150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561585d5761585d61582d565b500290565b60008261587f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156158ae576158ae61582d565b5060010190565b60208082526017908201527f496e76616c69642074696d6520666f7220627579696e67000000000000000000604082015260600190565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b60006020828403121561592b57600080fd5b815161115481615246565b6020808252818101527f416464726573732070726573656e7420696e2073616e6374696f6e206c697374604082015260600190565b60008282101561597d5761597d61582d565b500390565b600082198211156159955761599561582d565b500190565b6020808252601e908201527f55736572206e6f742077686974656c697374656420666f72207374616b650000604082015260600190565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b805169ffffffffffffffffffff8116811461520d57600080fd5b600080600080600060a08688031215615a3257600080fd5b615a3b86615a00565b9450602086015193506040860151925060608601519150615a5e60808701615a00565b90509295509295909350565b60006001600160ff1b0381841382841380821686840486111615615a9057615a9061582d565b600160ff1b6000871282811687830589121615615aaf57615aaf61582d565b60008712925087820587128484161615615acb57615acb61582d565b87850587128184161615615ae157615ae161582d565b505050929093029392505050565b600060208284031215615b0157600080fd5b5051919050565b60208082526021908201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636040820152606560f81b606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526016908201527514185e5b595b9d081dd85b1b195d081b9bdd081cd95d60521b604082015260600190565b6000825160005b81811015615bbe5760208186018101518583015201615ba4565b81811115615bcd576000828501525b509190910192915050565b602080825260149082015273151bdad95b881c185e5b595b9d0819985a5b195960621b60408201526060019056fe6f225532a9c33b023b8e48247ad8df9d98f132ae17c769b97ff22d2b278fa73a55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4754d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36a26469706673582212203448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b064736f6c63430008090033

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

0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000683596e000000000000000000000000000000000000000000000000000000000005b8d800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000632ea00000000000000000000000000000000000000000000000000000000000c65d400000000000000000000000000000000000000000000000000000000001298be000000000000000000000000000000000000000000000000000000000018cba800000000000000000000000000000000000000000000000000000000001efe92000000000000000000000000000000000000000000000000000000000025317c00000000000000000000000000000000000000000000000000000000002b64660000000000000000000000000000000000000000000000000000000000319750000000000000000000000000000000000000000000000000000000000037ca3a00000000000000000000000000000000000000000000000000000000003dfd24000000000000000000000000000000000000000000000000000000000044300e00000000000000000000000000000000000000000000000000000000004a62f800000000000000000000000000000000000000000000000000000000005095e2000000000000000000000000000000000000000000000000000000000056c8cc00000000000000000000000000000000000000000000000000000000005cfbb60000000000000000000000000000000000000000000000000000000000632ea0000000000000000000000000000000000000000000000000000000000069618a00000000000000000000000000000000000000000000000000000000006f9474000000000000000000000000000000000000000000000000000000000075c75e00000000000000000000000000000000000000000000000000000000007bfa48000000000000000000000000000000000000000000000000000000000082a7440000000000000000000000000000000000000000000000000000000000895440000000000000000000000000000000000000000000000000000000000090013c000000000000000000000000000000000000000000000000000000000096ae3800000000000000000000000000000000000000000000000000000000009d5b340000000000000000000000000000000000000000000000000000000000a408300000000000000000000000000000000000000000000000000000000000aab52c0000000000000000000000000000000000000000000000000000000000b162280000000000000000000000000000000000000000000000000000000000b80f240000000000000000000000000000000000000000000000000000000000bebc200000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000a36cc19bab000000000000000000000000000000000000000000000000000000a52a689f9ba00000000000000000000000000000000000000000000000000000a6e80fa38c400000000000000000000000000000000000000000000000000000a8a5b6a77ce00000000000000000000000000000000000000000000000000000aa635dab6d800000000000000000000000000000000000000000000000000000ac2104af5e200000000000000000000000000000000000000000000000000000addeabb34ec00000000000000000000000000000000000000000000000000000af9c52b73f600000000000000000000000000000000000000000000000000000b159f9bb30000000000000000000000000000000000000000000000000000000b317a0bf20a00000000000000000000000000000000000000000000000000000b4d547c311400000000000000000000000000000000000000000000000000000b692eec701e00000000000000000000000000000000000000000000000000000b85095caf2800000000000000000000000000000000000000000000000000000ba0e3ccee3200000000000000000000000000000000000000000000000000000bbcbe3d2d3c00000000000000000000000000000000000000000000000000000bd898ad6c4600000000000000000000000000000000000000000000000000000bf4731dab5000000000000000000000000000000000000000000000000000000c104d8dea5a00000000000000000000000000000000000000000000000000000c2c27fe296400000000000000000000000000000000000000000000000000000c48026e686e00000000000000000000000000000000000000000000000000000c63dcdea77800000000000000000000000000000000000000000000000000000c7fb74ee68200000000000000000000000000000000000000000000000000000c9b91bf258c00000000000000000000000000000000000000000000000000000cb76c2f649600000000000000000000000000000000000000000000000000000cd3469fa3a000000000000000000000000000000000000000000000000000000cef210fe2aa00000000000000000000000000000000000000000000000000000d0afb8021b400000000000000000000000000000000000000000000000000000d26d5f060be00000000000000000000000000000000000000000000000000000d42b0609fc800000000000000000000000000000000000000000000000000000d5e8ad0ded2000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000683ec7a0000000000000000000000000000000000000000000000000000000006842bc20000000000000000000000000000000000000000000000000000000006846b0a000000000000000000000000000000000000000000000000000000000684aa52000000000000000000000000000000000000000000000000000000000684e99a00000000000000000000000000000000000000000000000000000000068528e2000000000000000000000000000000000000000000000000000000000685682a000000000000000000000000000000000000000000000000000000000685a772000000000000000000000000000000000000000000000000000000000685e6ba0000000000000000000000000000000000000000000000000000000006862602000000000000000000000000000000000000000000000000000000000686654a000000000000000000000000000000000000000000000000000000000686a492000000000000000000000000000000000000000000000000000000000686e3da0000000000000000000000000000000000000000000000000000000006872322000000000000000000000000000000000000000000000000000000000687626a000000000000000000000000000000000000000000000000000000000687a1b2000000000000000000000000000000000000000000000000000000000687e0fa00000000000000000000000000000000000000000000000000000000068820420000000000000000000000000000000000000000000000000000000006885f8a0000000000000000000000000000000000000000000000000000000006889ed2000000000000000000000000000000000000000000000000000000000688de1a0000000000000000000000000000000000000000000000000000000006891d620000000000000000000000000000000000000000000000000000000006895caa0000000000000000000000000000000000000000000000000000000006899bf2000000000000000000000000000000000000000000000000000000000689db3a00000000000000000000000000000000000000000000000000000000068a1a8200000000000000000000000000000000000000000000000000000000068a59ca00000000000000000000000000000000000000000000000000000000068a991200000000000000000000000000000000000000000000000000000000068ad85a00000000000000000000000000000000000000000000000000000000068b17a20

-----Decoded View---------------
Arg [0] : _contracts (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : _config (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [2] : _rounds (uint256[][3]): System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger],System.Collections.Generic.List`1[System.Numerics.BigInteger]

-----Encoded View---------------
104 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 00000000000000000000000000000000000000000000000000000000683596e0
Arg [4] : 00000000000000000000000000000000000000000000000000000000005b8d80
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 000000000000000000000000000000000000000000000000000000000003f480
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000440
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000820
Arg [11] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [12] : 0000000000000000000000000000000000000000000000000000000000632ea0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000c65d40
Arg [14] : 0000000000000000000000000000000000000000000000000000000001298be0
Arg [15] : 00000000000000000000000000000000000000000000000000000000018cba80
Arg [16] : 0000000000000000000000000000000000000000000000000000000001efe920
Arg [17] : 00000000000000000000000000000000000000000000000000000000025317c0
Arg [18] : 0000000000000000000000000000000000000000000000000000000002b64660
Arg [19] : 0000000000000000000000000000000000000000000000000000000003197500
Arg [20] : 00000000000000000000000000000000000000000000000000000000037ca3a0
Arg [21] : 0000000000000000000000000000000000000000000000000000000003dfd240
Arg [22] : 00000000000000000000000000000000000000000000000000000000044300e0
Arg [23] : 0000000000000000000000000000000000000000000000000000000004a62f80
Arg [24] : 0000000000000000000000000000000000000000000000000000000005095e20
Arg [25] : 00000000000000000000000000000000000000000000000000000000056c8cc0
Arg [26] : 0000000000000000000000000000000000000000000000000000000005cfbb60
Arg [27] : 000000000000000000000000000000000000000000000000000000000632ea00
Arg [28] : 00000000000000000000000000000000000000000000000000000000069618a0
Arg [29] : 0000000000000000000000000000000000000000000000000000000006f94740
Arg [30] : 00000000000000000000000000000000000000000000000000000000075c75e0
Arg [31] : 0000000000000000000000000000000000000000000000000000000007bfa480
Arg [32] : 00000000000000000000000000000000000000000000000000000000082a7440
Arg [33] : 0000000000000000000000000000000000000000000000000000000008954400
Arg [34] : 00000000000000000000000000000000000000000000000000000000090013c0
Arg [35] : 00000000000000000000000000000000000000000000000000000000096ae380
Arg [36] : 0000000000000000000000000000000000000000000000000000000009d5b340
Arg [37] : 000000000000000000000000000000000000000000000000000000000a408300
Arg [38] : 000000000000000000000000000000000000000000000000000000000aab52c0
Arg [39] : 000000000000000000000000000000000000000000000000000000000b162280
Arg [40] : 000000000000000000000000000000000000000000000000000000000b80f240
Arg [41] : 000000000000000000000000000000000000000000000000000000000bebc200
Arg [42] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [43] : 00000000000000000000000000000000000000000000000000a36cc19bab0000
Arg [44] : 00000000000000000000000000000000000000000000000000a52a689f9ba000
Arg [45] : 00000000000000000000000000000000000000000000000000a6e80fa38c4000
Arg [46] : 00000000000000000000000000000000000000000000000000a8a5b6a77ce000
Arg [47] : 00000000000000000000000000000000000000000000000000aa635dab6d8000
Arg [48] : 00000000000000000000000000000000000000000000000000ac2104af5e2000
Arg [49] : 00000000000000000000000000000000000000000000000000addeabb34ec000
Arg [50] : 00000000000000000000000000000000000000000000000000af9c52b73f6000
Arg [51] : 00000000000000000000000000000000000000000000000000b159f9bb300000
Arg [52] : 00000000000000000000000000000000000000000000000000b317a0bf20a000
Arg [53] : 00000000000000000000000000000000000000000000000000b4d547c3114000
Arg [54] : 00000000000000000000000000000000000000000000000000b692eec701e000
Arg [55] : 00000000000000000000000000000000000000000000000000b85095caf28000
Arg [56] : 00000000000000000000000000000000000000000000000000ba0e3ccee32000
Arg [57] : 00000000000000000000000000000000000000000000000000bbcbe3d2d3c000
Arg [58] : 00000000000000000000000000000000000000000000000000bd898ad6c46000
Arg [59] : 00000000000000000000000000000000000000000000000000bf4731dab50000
Arg [60] : 00000000000000000000000000000000000000000000000000c104d8dea5a000
Arg [61] : 00000000000000000000000000000000000000000000000000c2c27fe2964000
Arg [62] : 00000000000000000000000000000000000000000000000000c48026e686e000
Arg [63] : 00000000000000000000000000000000000000000000000000c63dcdea778000
Arg [64] : 00000000000000000000000000000000000000000000000000c7fb74ee682000
Arg [65] : 00000000000000000000000000000000000000000000000000c9b91bf258c000
Arg [66] : 00000000000000000000000000000000000000000000000000cb76c2f6496000
Arg [67] : 00000000000000000000000000000000000000000000000000cd3469fa3a0000
Arg [68] : 00000000000000000000000000000000000000000000000000cef210fe2aa000
Arg [69] : 00000000000000000000000000000000000000000000000000d0afb8021b4000
Arg [70] : 00000000000000000000000000000000000000000000000000d26d5f060be000
Arg [71] : 00000000000000000000000000000000000000000000000000d42b0609fc8000
Arg [72] : 00000000000000000000000000000000000000000000000000d5e8ad0ded2000
Arg [73] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [74] : 00000000000000000000000000000000000000000000000000000000683ec7a0
Arg [75] : 000000000000000000000000000000000000000000000000000000006842bc20
Arg [76] : 000000000000000000000000000000000000000000000000000000006846b0a0
Arg [77] : 00000000000000000000000000000000000000000000000000000000684aa520
Arg [78] : 00000000000000000000000000000000000000000000000000000000684e99a0
Arg [79] : 0000000000000000000000000000000000000000000000000000000068528e20
Arg [80] : 00000000000000000000000000000000000000000000000000000000685682a0
Arg [81] : 00000000000000000000000000000000000000000000000000000000685a7720
Arg [82] : 00000000000000000000000000000000000000000000000000000000685e6ba0
Arg [83] : 0000000000000000000000000000000000000000000000000000000068626020
Arg [84] : 00000000000000000000000000000000000000000000000000000000686654a0
Arg [85] : 00000000000000000000000000000000000000000000000000000000686a4920
Arg [86] : 00000000000000000000000000000000000000000000000000000000686e3da0
Arg [87] : 0000000000000000000000000000000000000000000000000000000068723220
Arg [88] : 00000000000000000000000000000000000000000000000000000000687626a0
Arg [89] : 00000000000000000000000000000000000000000000000000000000687a1b20
Arg [90] : 00000000000000000000000000000000000000000000000000000000687e0fa0
Arg [91] : 0000000000000000000000000000000000000000000000000000000068820420
Arg [92] : 000000000000000000000000000000000000000000000000000000006885f8a0
Arg [93] : 000000000000000000000000000000000000000000000000000000006889ed20
Arg [94] : 00000000000000000000000000000000000000000000000000000000688de1a0
Arg [95] : 000000000000000000000000000000000000000000000000000000006891d620
Arg [96] : 000000000000000000000000000000000000000000000000000000006895caa0
Arg [97] : 000000000000000000000000000000000000000000000000000000006899bf20
Arg [98] : 00000000000000000000000000000000000000000000000000000000689db3a0
Arg [99] : 0000000000000000000000000000000000000000000000000000000068a1a820
Arg [100] : 0000000000000000000000000000000000000000000000000000000068a59ca0
Arg [101] : 0000000000000000000000000000000000000000000000000000000068a99120
Arg [102] : 0000000000000000000000000000000000000000000000000000000068ad85a0
Arg [103] : 0000000000000000000000000000000000000000000000000000000068b17a20


Deployed Bytecode Sourcemap

13003:37869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:52;;;;;;;;;;-1:-1:-1;14950:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:1;;541:22;523:41;;511:2;496:18;14950:52:0;;;;;;;;35609:261;;;;;;;;;;-1:-1:-1;35609:261:0;;;;;:::i;:::-;;:::i;42164:135::-;;;;;;;;;;-1:-1:-1;42164:135:0;;;;;:::i;:::-;;:::i;:::-;;14699:47;;;;;;;;;;-1:-1:-1;14699:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1275:25:1;;;1263:2;1248:18;14699:47:0;1129:177:1;13483:27:0;;;;;;;;;;-1:-1:-1;13483:27:0;;;;;;;;14339:34;;;;;;;;;;-1:-1:-1;14339:34:0;;;;-1:-1:-1;;;14339:34:0;;;;;;39958:126;;;;;;;;;;-1:-1:-1;39958:126:0;;;;;:::i;:::-;;:::i;14120:27::-;;;;;;;;;;-1:-1:-1;14120:27:0;;;;-1:-1:-1;;;;;14120:27:0;;;;;;-1:-1:-1;;;;;1489:32:1;;;1471:51;;1459:2;1444:18;14120:27:0;1311:217:1;37886:204:0;;;;;;;;;;-1:-1:-1;37886:204:0;;;;;:::i;:::-;;:::i;28930:197::-;;;;;;;;;;-1:-1:-1;28930:197:0;;;;;:::i;:::-;;:::i;43353:254::-;;;;;;;;;;-1:-1:-1;43353:254:0;;;;;:::i;:::-;;:::i;42675:467::-;;;;;;;;;;-1:-1:-1;42675:467:0;;;;;:::i;:::-;;:::i;14308:26::-;;;;;;;;;;-1:-1:-1;14308:26:0;;;;-1:-1:-1;;;14308:26:0;;;;;;13451:27;;;;;;;;;;;;;;;;14634;;;;;;;;;;;;;;;;14194:45;;;;;;;;;;-1:-1:-1;14194:45:0;;;;-1:-1:-1;;;;;14194:45:0;;;14848;;;;;;;;;;-1:-1:-1;14848:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18123:79;;;;;;;;;;;;;:::i;24903:1748::-;;;;;;:::i;:::-;;:::i;50640:229::-;;;;;;;;;;-1:-1:-1;50640:229:0;;;;;:::i;:::-;;:::i;13515:27::-;;;;;;;;;;;;;;;;13773:22;;;;;;;;;;-1:-1:-1;13773:22:0;;;;-1:-1:-1;;;;;13773:22:0;;;14436:36;;;;;;;;;;;;;;;;35939:758;;;;;;;;;;;;;:::i;14399:32::-;;;;;;;;;;-1:-1:-1;14399:32:0;;;;-1:-1:-1;;;;;14399:32:0;;;13834:26;;;;;;;;;;;;;;;;5309:86;;;;;;;;;;-1:-1:-1;5380:7:0;;-1:-1:-1;;;5380:7:0;;;;5309:86;;20031:599;;;;;;;;;;-1:-1:-1;20031:599:0;;;;;:::i;:::-;;:::i;14898:47::-;;;;;;;;;;-1:-1:-1;14898:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45666:162;;;;;;;;;;-1:-1:-1;45666:162:0;;;;;:::i;:::-;;:::i;13582:30::-;;;;;;;;;;;;;;;;29249:165;;;;;;;;;;-1:-1:-1;29249:165:0;;;;;:::i;:::-;;:::i;41021:511::-;;;;;;;;;;;;;:::i;50042:211::-;;;;;;;;;;-1:-1:-1;50042:211:0;;;;;:::i;:::-;;:::i;37599:281::-;;;;;;;;;;-1:-1:-1;37599:281:0;;;;;:::i;:::-;;:::i;38460:260::-;;;;;;;;;;-1:-1:-1;38460:260:0;;;;;:::i;:::-;;:::i;41621:98::-;;;;;;;;;;-1:-1:-1;41621:98:0;;;;;:::i;:::-;;:::i;2815:103::-;;;;;;;;;;;;;:::i;14751:42::-;;;;;;;;;;-1:-1:-1;14751:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13358:24;;;;;;;;;;;;;;;;14040;;;;;;;;;;-1:-1:-1;14040:24:0;;;;;:::i;:::-;;:::i;13617:35::-;;;;;;;;;;;;;;;;17994:75;;;;;;;;;;;;;:::i;45955:154::-;;;;;;;;;;-1:-1:-1;45955:154:0;;;;;:::i;:::-;;:::i;14477:33::-;;;;;;;;;;;;;;;;2167:87;;;;;;;;;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;2167:87;;14598:31;;;;;;;;;;-1:-1:-1;14598:31:0;;;;;;;;;;;19831:194;;;;;;;;;;;;;:::i;41893:160::-;;;;;;;;;;-1:-1:-1;41893:160:0;;;;;:::i;:::-;;:::i;13417:29::-;;;;;;;;;;;;;;;;40484:469;;;;;;;;;;-1:-1:-1;40484:469:0;;;;;:::i;:::-;;:::i;35273:215::-;;;;;;;;;;-1:-1:-1;35273:215:0;;;;;:::i;:::-;;:::i;46603:256::-;;;;;;;;;;-1:-1:-1;46603:256:0;;;;;:::i;:::-;;:::i;43952:102::-;;;;;;;;;;-1:-1:-1;43952:102:0;;;;;:::i;:::-;;:::i;38096:121::-;;;;;;;;;;-1:-1:-1;38096:121:0;;;;;:::i;:::-;;:::i;18325:984::-;;;;;;;;;;-1:-1:-1;18325:984:0;;;;;:::i;:::-;;:::i;33868:359::-;;;;;;;;;;-1:-1:-1;33868:359:0;;;;;:::i;:::-;;:::i;15007:51::-;;;;;;;;;;-1:-1:-1;15007:51:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;15007:51:0;;;45280:248;;;;;;;;;;-1:-1:-1;45280:248:0;;;;;:::i;:::-;;:::i;40182:107::-;;;;;;;;;;-1:-1:-1;40182:107:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47398:316::-;;;;;;;;;;-1:-1:-1;47398:316:0;;;;;:::i;:::-;;:::i;13963:39::-;;;;;;;;;;-1:-1:-1;13963:39:0;;;;;:::i;:::-;;:::i;14152:37::-;;;;;;;;;;-1:-1:-1;14152:37:0;;;;-1:-1:-1;;;;;14152:37:0;;;14666:26;;;;;;;;;;;;;;;;42381:115;;;;;;;;;;;;;:::i;14560:33::-;;;;;;;;;;-1:-1:-1;14560:33:0;;;;;;;;39362:212;;;;;;;;;;-1:-1:-1;39362:212:0;;;;;:::i;:::-;;:::i;36703:676::-;;;;;;;;;;;;;:::i;13865:25::-;;;;;;;;;;;;;;;;21044:1696;;;;;;;;;;-1:-1:-1;21044:1696:0;;;;;:::i;:::-;;:::i;46987:276::-;;;;;;;;;;-1:-1:-1;46987:276:0;;;;;:::i;:::-;;:::i;13926:32::-;;;;;;;;;;-1:-1:-1;13926:32:0;;;;;:::i;:::-;;:::i;13715:28::-;;;;;;;;;;-1:-1:-1;13715:28:0;;;;-1:-1:-1;;;;;13715:28:0;;;13895:26;;;;;;;;;;-1:-1:-1;13895:26:0;;;;;:::i;:::-;;:::i;14515:40::-;;;;;;;;;;;;;;;;13686:24;;;;;;;;;;-1:-1:-1;13686:24:0;;;;-1:-1:-1;;;;;13686:24:0;;;35136:131;;;;;;;;;;-1:-1:-1;35136:131:0;;;;;:::i;:::-;;:::i;13657:24::-;;;;;;;;;;;;;;;;38983:260;;;;;;;;;;-1:-1:-1;38983:260:0;;;;;:::i;:::-;;:::i;14244:35::-;;;;;;;;;;-1:-1:-1;14244:35:0;;;;-1:-1:-1;;;;;14244:35:0;;;34424:612;;;;;;;;;;-1:-1:-1;34424:612:0;;;;;:::i;:::-;;:::i;22974:1696::-;;;;;;;;;;-1:-1:-1;22974:1696:0;;;;;:::i;:::-;;:::i;13387:25::-;;;;;;;;;;;;;;;;19404:355;;;;;;;;;;-1:-1:-1;19404:355:0;;;;;:::i;:::-;;:::i;46273:207::-;;;;;;;;;;-1:-1:-1;46273:207:0;;;;;:::i;:::-;;:::i;3073:201::-;;;;;;;;;;-1:-1:-1;3073:201:0;;;;;:::i;:::-;;:::i;14088:27::-;;;;;;;;;;-1:-1:-1;14088:27:0;;;;-1:-1:-1;;;;;14088:27:0;;;13748:20;;;;;;;;;;-1:-1:-1;13748:20:0;;;;-1:-1:-1;;;;;13748:20:0;;;14007:28;;;;;;;;;;-1:-1:-1;14007:28:0;;;;;:::i;:::-;;:::i;44060:79::-;;;;;;;;;;;;;:::i;27005:1804::-;;;;;;:::i;:::-;;:::i;14798:45::-;;;;;;;;;;-1:-1:-1;14798:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44552:527;;;;;;;;;;-1:-1:-1;44552:527:0;;;;;:::i;:::-;;:::i;35609:261::-;35674:4;35687:21;:19;:21::i;:::-;35735:10;;;35752:24;;;;35788:58;;;12136:25:1;;;12192:2;12177:18;;12170:34;;;35830:15:0;12220:18:1;;;12213:34;35788:58:0;;;;;;;12124:2:1;35788:58:0;;;-1:-1:-1;35860:4:0;;35609:261;-1:-1:-1;;35609:261:0:o;42164:135::-;42231:21;:19;:21::i;:::-;42259:15;:34;;-1:-1:-1;;42259:34:0;;;;;;;;;;42164:135::o;39958:126::-;40022:21;:19;:21::i;:::-;40050:12;:28;39958:126::o;37886:204::-;37957:21;:19;:21::i;:::-;38011:1;37993:15;:19;37985:60;;;;-1:-1:-1;;;37985:60:0;;12460:2:1;37985:60:0;;;12442:21:1;12499:2;12479:18;;;12472:30;12538;12518:18;;;12511:58;12586:18;;37985:60:0;;;;;;;;;38052:14;:32;37886:204::o;28930:197::-;28991:17;29017:16;29036:22;29051:6;29036:14;:22::i;:::-;29017:41;;29105:16;:14;:16::i;:::-;29089:12;;29078:23;;:8;:23;:::i;:::-;29077:44;;;;:::i;:::-;29065:56;28930:197;-1:-1:-1;;;28930:197:0:o;43353:254::-;43439:21;:19;:21::i;:::-;-1:-1:-1;;;;;43475:31:0;;43467:40;;;;;;43514:13;:49;;43570:31;;;-1:-1:-1;;;43570:31:0;-1:-1:-1;;;;;;43570:31:0;;;-1:-1:-1;;;;;43514:49:0;;;43570:31;;;;;;;43353:254::o;42675:467::-;42754:28;:26;:28::i;:::-;42797:20;;42789:66;;;;-1:-1:-1;;;42789:66:0;;13344:2:1;42789:66:0;;;13326:21:1;13383:2;13363:18;;;13356:30;13422;13402:18;;;13395:58;13470:18;;42789:66:0;13142:352:1;42789:66:0;42866:13;:20;42890:1;42866:25;:50;;;;;42895:13;42909:1;42895:16;;;;;;;;:::i;:::-;;;;;;;42915:1;42895:21;42866:50;42862:275;;;42927:29;42934:22;;42927:29;:::i;:::-;42675:467;:::o;42862:275::-;42979:29;42986:22;;42979:29;:::i;:::-;43022:9;43017:113;43037:13;:20;43033:1;:24;43017:113;;;43075:22;43103:13;43117:1;43103:16;;;;;;;;:::i;:::-;;;;;;;;;;;;43075:45;;;;;;;-1:-1:-1;43075:45:0;;;;;;;;;43059:3;;;;:::i;:::-;;;;43017:113;;;;42675:467;:::o;18123:79::-;18158:21;:19;:21::i;:::-;18186:10;:8;:10::i;:::-;18123:79::o;24903:1748::-;25073:4;25001:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;8642:21:::3;:19;:21::i;:::-;25086:16:::4;25105:22;25120:6;25105:14;:22::i;:::-;25086:41;;25134:17;25182:16;:14;:16::i;:::-;25166:12;::::0;25155:23:::4;::::0;:8;:23:::4;:::i;:::-;25154:44;;;;:::i;:::-;25134:64;;25226:9;25213;:22;;25205:47;;;::::0;-1:-1:-1;;;25205:47:0;;15284:2:1;25205:47:0::4;::::0;::::4;15266:21:1::0;15323:2;15303:18;;;15296:30;-1:-1:-1;;;15342:18:1;;;15335:42;15394:18;;25205:47:0::4;15082:336:1::0;25205:47:0::4;25259:14;25276:21;25288:9:::0;25276::::4;:21;:::i;:::-;25259:38;;25323:6;25304:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25340:10:0::4;::::0;:15;25336:41:::4;;25371:6;25357:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25336:41:0::4;25384:13;25418:10;;25400:15;;:28;:59;;25449:10;;25400:59;;;25431:15;;25400:59;25384:75:::0;-1:-1:-1;25478:6:0::4;25485:1;25478:9;25488:11;;25478:22;;;;;;;;:::i;:::-;;;;;;;;;25470:5;:30;:75;;;-1:-1:-1::0;25523:6:0::4;25530:1;25523:9;25533:11;;25523:22;;;;;;;;:::i;:::-;;;;;;;;;25504:15;:41;;25470:75;25466:458;;;25579:6;25586:1;25579:9;25589:11;;25579:22;;;;;;;;:::i;:::-;;;;;;;;;25560:15;:41;25556:112;;25652:6:::0;25627::::4;25634:1;25627:9;25637:11;;25627:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;25614:10;:44:::0;25556:112:::4;25680:15;::::0;::::4;;25676:58;;;25708:16;:14;:16::i;:::-;25742:20;25773:6;25742:20:::0;25773:9:::4;25783:11;;25773:22;;;;;;;;:::i;:::-;;;;;;;;;25765:5;:30;:76;;25835:6:::0;25827:5;25802:6:::4;25809:1;25802:9;25812:11;;25802:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;25765:76;;;25798:1;25765:76;25850:22;:41:::0;;::::4;::::0;;::::4;::::0;;-1:-1:-1;25850:41:0;;;-1:-1:-1;;;;;;;;;;;25850:41:0;;::::4;::::0;;;25900:11:::4;:16:::0;;25742:99;;-1:-1:-1;25850:41:0;;25900:11;;-1:-1:-1;25900:16:0::4;::::0;25850:41;;25900:16:::4;:::i;:::-;::::0;;;-1:-1:-1;;;25466:458:0::4;25934:5;25930:552;;;25954:22;::::0;-1:-1:-1;;;25954:22:0;::::4;;;25950:119;;;794:10:::0;25997:27:::4;::::0;;;:13:::4;:27;::::0;;;;;::::4;;25989:70;;;;-1:-1:-1::0;;;25989:70:0::4;;;;;;;:::i;:::-;26077:23;::::0;-1:-1:-1;;;;;26077:23:0::4;:40;794:10:::0;26141:12:::4;::::0;26132:21:::4;::::0;:6;:21:::4;:::i;:::-;26077:77;::::0;-1:-1:-1;;;;;;26077:77:0::4;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;26077:77:0::4;::::0;::::4;16219:51:1::0;16286:18;;;16279:34;16192:18;;26077:77:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;26187:6;26163:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26207:93:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;26284:15:0::4;12220:18:1::0;;;12213:34;26207:93:0;;-1:-1:-1;;26243:6:0;;794:10;;-1:-1:-1;;;;;;;;;;;26207:93:0;;;;;12124:2:1;26207:93:0;;::::4;25930:552;;;26363:12;::::0;26354:21:::4;::::0;:6;:21:::4;:::i;:::-;794:10:::0;26323:26:::4;::::0;;;:12:::4;:26;::::0;;;;:53;;:26;;;:53:::4;::::0;;;::::4;:::i;:::-;::::0;;;-1:-1:-1;;26390:84:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;26458:15:0::4;12220:18:1::0;;;12213:34;26390:84:0;;-1:-1:-1;;26417:6:0;;794:10;;-1:-1:-1;;;;;;;;;;;26390:84:0;;;;;12124:2:1;26390:84:0;;::::4;25930:552;26501:8;26488:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;26516:48:0::4;::::0;-1:-1:-1;26530:9:0;26541:8;794:10;26516:13:::4;:48::i;:::-;26575:10:::0;;26571:56:::4;;26587:40;794:10:::0;26620:6:::4;26587:9;:40::i;:::-;26641:4;26634:11;;;;;;8686:20:::3;8080:1:::0;9206:7;:22;9023:213;8686:20:::3;20803:1:::1;24903:1748:::0;;;;;;:::o;50640:229::-;50709:4;50722:21;:19;:21::i;:::-;50750:16;:6;50759:7;50750:16;;:::i;:::-;-1:-1:-1;50787:1:0;50773:11;:15;;;50795:10;:14;;;50816:29;;50823:22;;50816:29;:::i;:::-;-1:-1:-1;50859:4:0;;50640:229;-1:-1:-1;50640:229:0:o;35939:758::-;35988:4;4914:19;:17;:19::i;:::-;36009:9:::1;::::0;-1:-1:-1;;;;;36009:9:0::1;36001:56;;;::::0;-1:-1:-1;;;36001:56:0;;16526:2:1;36001:56:0::1;::::0;::::1;16508:21:1::0;16565:2;16545:18;;;16538:30;-1:-1:-1;;;16584:18:1;;;16577:50;16644:18;;36001:56:0::1;16324:344:1::0;36001:56:0::1;794:10:::0;36073:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36072:28;36064:68;;;::::0;-1:-1:-1;;;36064:68:0;;16875:2:1;36064:68:0::1;::::0;::::1;16857:21:1::0;16914:2;16894:18;;;16887:30;16953:29;16933:18;;;16926:57;17000:18;;36064:68:0::1;16673:351:1::0;36064:68:0::1;36161:1;36148:10;;:14;:47;;;;;36185:10;;36166:15;:29;;36148:47;36147:80;;;-1:-1:-1::0;794:10:0;36200:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36147:80;36139:118;;;::::0;-1:-1:-1;;;36139:118:0;;17231:2:1;36139:118:0::1;::::0;::::1;17213:21:1::0;17270:2;17250:18;;;17243:30;17309:27;17289:18;;;17282:55;17354:18;;36139:118:0::1;17029:349:1::0;36139:118:0::1;794:10:::0;36273:24:::1;::::0;;;:10:::1;:24;::::0;;;;;::::1;;36272:25;36264:53;;;::::0;-1:-1:-1;;;36264:53:0;;17585:2:1;36264:53:0::1;::::0;::::1;17567:21:1::0;17624:2;17604:18;;;17597:30;-1:-1:-1;;;17643:18:1;;;17636:45;17698:18;;36264:53:0::1;17383:339:1::0;36264:53:0::1;794:10:::0;36324:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:31;;-1:-1:-1;;36324:31:0::1;36351:4;36324:31;::::0;;36379:12:::1;:26:::0;;;;;;36420:10;36412:39:::1;;;::::0;-1:-1:-1;;;36412:39:0;;17929:2:1;36412:39:0::1;::::0;::::1;17911:21:1::0;17968:2;17948:18;;;17941:30;-1:-1:-1;;;17987:18:1;;;17980:46;18043:18;;36412:39:0::1;17727:340:1::0;36412:39:0::1;794:10:::0;36465:26:::1;::::0;;;:12:::1;:26;::::0;;;;;;;36458:33;;;36520:9:::1;::::0;36513:48;;-1:-1:-1;;;36513:48:0;;::::1;::::0;::::1;16219:51:1::0;;;;16286:18;;;16279:34;;;36513:48:0;36465:26;;-1:-1:-1;;;;;36520:9:0;;::::1;::::0;36513:26:::1;::::0;16192:18:1;;;;;36465:26:0;36513:48;;;;;;36465:26;36520:9;36513:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36498:63;;36576:7;36568:41;;;;-1:-1:-1::0;;;36568:41:0::1;;;;;;;:::i;:::-;36621:52;::::0;;18596:25:1;;;36657:15:0::1;18652:2:1::0;18637:18;;18630:34;794:10:0;;36621:52:::1;::::0;18569:18:1;36621:52:0::1;;;;;;;36687:4;36680:11;;;;35939:758:::0;:::o;20031:599::-;20122:14;:12;:14::i;:::-;20170:12;:19;20151:8;:15;:38;20143:68;;;;-1:-1:-1;;;20143:68:0;;18877:2:1;20143:68:0;;;18859:21:1;18916:2;18896:18;;;18889:30;-1:-1:-1;;;18935:18:1;;;18928:47;18992:18;;20143:68:0;18675:341:1;20143:68:0;20218:14;20225:7;;20218:14;:::i;:::-;20239:18;20246:11;;20239:18;:::i;:::-;20264:23;20305:9;20300:247;20324:8;:15;20320:1;:19;20300:247;;;20381:1;20363:12;20376:1;20363:15;;;;;;;;:::i;:::-;;;;;;;:19;20355:65;;;;-1:-1:-1;;;20355:65:0;;19223:2:1;20355:65:0;;;19205:21:1;19262:2;19242:18;;;19235:30;19301:34;19281:18;;;19274:62;-1:-1:-1;;;19352:18:1;;;19345:31;19393:19;;20355:65:0;19021:397:1;20355:65:0;20448:12;20461:1;20448:15;;;;;;;;:::i;:::-;;;;;;;20429:34;;;;;:::i;:::-;;;20472:7;20485:8;20494:1;20485:11;;;;;;;;:::i;:::-;;;;;;;;;;;;20472:25;;;;;;;-1:-1:-1;20472:25:0;;;;;;;;;;-1:-1:-1;;;;;;20472:25:0;-1:-1:-1;;;;;20472:25:0;;;;;;;;;20523:15;;20506:11;;20523:15;;20536:1;;20523:15;;;;;;:::i;:::-;;;;;;;;;;;;20506:33;;;;;;;-1:-1:-1;20506:33:0;;;;;;;;;20341:3;;;;:::i;:::-;;;;20300:247;;;;20563:15;20582:6;20563:25;20555:69;;;;-1:-1:-1;;;20555:69:0;;19625:2:1;20555:69:0;;;19607:21:1;19664:2;19644:18;;;19637:30;19703:33;19683:18;;;19676:61;19754:18;;20555:69:0;19423:355:1;20555:69:0;20115:515;20031:599;;:::o;45666:162::-;45748:21;:19;:21::i;:::-;45776;:46;;-1:-1:-1;;45776:46:0;;;;;;;;;;45666:162::o;29249:165::-;29311:16;29347:22;29362:6;29347:14;:22::i;:::-;29336:33;-1:-1:-1;29387:21:0;29399:8;29336:33;29387:21;:::i;:::-;29376:32;29249:165;-1:-1:-1;;29249:165:0:o;41021:511::-;41069:28;:26;:28::i;:::-;41125:10;;41104:15;:32;;;;;;;-1:-1:-1;41104:32:0;;;;;;;41147:15;;;;41143:54;;;41173:16;:14;:16::i;:::-;41220:6;41227:1;41220:9;41230:11;;41220:22;;;;;;;;:::i;:::-;;;;;;;;;41207:10;;:35;41203:304;;;41257:11;;41253:203;;41339:15;;41286:22;;41314:6;41321:1;41314:9;41324:11;;41314:22;;;;;;;;:::i;:::-;;;;;;;;;:40;;;;:::i;:::-;41286:69;;;;;;;-1:-1:-1;41286:69:0;;;;;;;;;;;41253:203;;;41435:10;;41382:22;;41410:6;41417:1;41410:9;41420:11;;41410:22;;;;;;;;:::i;:::-;;;;;;;;;:35;;;;:::i;:::-;41382:64;;;;;;;-1:-1:-1;41382:64:0;;;;;;;;;;;41253:203;41477:6;41484:1;41477:9;41487:11;;41477:22;;;;;;;;:::i;:::-;;;;;;;;;;;41464:10;:35;41203:304;41513:11;:13;;;:11;:13;;;:::i;:::-;;;;;;41021:511::o;50042:211::-;50113:21;:19;:21::i;:::-;50156:43;;-1:-1:-1;;;50156:43:0;;50180:10;50156:43;;;16219:51:1;16286:18;;;16279:34;;;50141:12:0;;-1:-1:-1;;;;;50156:23:0;;;;;16192:18:1;;50156:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50141:58;;50214:7;50206:41;;;;-1:-1:-1;;;50206:41:0;;;;;;;:::i;37599:281::-;37711:21;:19;:21::i;:::-;37744:9;37739:136;37759:32;;;37739:136;;;37851:16;37807:15;:41;37823:21;;37845:1;37823:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37807:41:0;;;;;;;;;;;;-1:-1:-1;37807:41:0;:60;;-1:-1:-1;;37807:60:0;;;;;;;;;;37793:3;;;;:::i;:::-;;;;37739:136;;;;37599:281;;;:::o;38460:260::-;38561:21;:19;:21::i;:::-;38594:9;38589:126;38609:28;;;38589:126;;;38691:16;38653:13;:35;38667:17;;38685:1;38667:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38653:35:0;;;;;;;;;;;;-1:-1:-1;38653:35:0;:54;;-1:-1:-1;;38653:54:0;;;;;;;;;;38639:3;;;;:::i;:::-;;;;38589:126;;41621:98;41671:21;:19;:21::i;:::-;41699:5;:14;;-1:-1:-1;;;;;;41699:14:0;-1:-1:-1;;;;;41699:14:0;;;;;;;;;;41621:98::o;2815:103::-;2053:13;:11;:13::i;:::-;2880:30:::1;2907:1;2880:18;:30::i;14040:24::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14040:24:0;;-1:-1:-1;14040:24:0;:::o;17994:75::-;18027:21;:19;:21::i;:::-;18055:8;:6;:8::i;45955:154::-;46033:21;:19;:21::i;:::-;46061:19;:42;;;;;;;-1:-1:-1;;46061:42:0;;;;;;;;;45955:154::o;19831:194::-;19878:7;19897:12;19919:19;;;;;;;;;-1:-1:-1;;;;;19919:19:0;-1:-1:-1;;;;;19919:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19894:62;;;;;;19972:5;19981:8;19972:18;;;;:::i;41893:160::-;41969:21;:19;:21::i;:::-;41997:11;:19;;;;42023:10;:24;41893:160::o;40484:469::-;40581:21;:19;:21::i;:::-;40617:37;;;40609:65;;;;-1:-1:-1;;;40609:65:0;;21205:2:1;40609:65:0;;;21187:21:1;21244:2;21224:18;;;21217:30;-1:-1:-1;;;21263:18:1;;;21256:45;21318:18;;40609:65:0;21003:339:1;40609:65:0;40681:27;40724:9;40719:152;40739:17;;;40719:152;;;40799:13;;40813:1;40799:16;;;;;;;:::i;:::-;;;;;;;40772:12;:23;40785:6;;40792:1;40785:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40772:23:0;-1:-1:-1;;;;;40772:23:0;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;40847:13:0;;-1:-1:-1;40847:13:0;40861:1;40847:16;;;;;;;:::i;:::-;;;;;;;40824:39;;;;;:::i;:::-;;-1:-1:-1;40758:3:0;;;;:::i;:::-;;;;40719:152;;;;40892:6;;:13;;40877:11;;:28;;;;;;;:::i;:::-;;;;;;;;40928:19;40912:12;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;40484:469:0:o;35273:215::-;35331:21;:19;:21::i;:::-;-1:-1:-1;;;;;35367:24:0;;35359:55;;;;-1:-1:-1;;;35359:55:0;;21549:2:1;35359:55:0;;;21531:21:1;21588:2;21568:18;;;21561:30;-1:-1:-1;;;21607:18:1;;;21600:48;21665:18;;35359:55:0;21347:342:1;35359:55:0;35421:9;:22;;-1:-1:-1;;;;;;35421:22:0;-1:-1:-1;;;;;35421:22:0;;;;;;;;35455:27;;1471:51:1;;;35455:27:0;;1459:2:1;1444:18;35455:27:0;;;;;;;35273:215;:::o;46603:256::-;46677:21;:19;:21::i;:::-;46728:10;46705:20;46752:102;46776:12;46772:1;:16;46752:102;;;46842:4;46804:20;:35;46825:10;;46836:1;46825:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46804:35:0;;;;;;;;;;;;-1:-1:-1;46804:35:0;:42;;-1:-1:-1;;46804:42:0;;;;;;;;;;46790:3;;;;:::i;:::-;;;;46752:102;;43952;44009:14;:12;:14::i;:::-;44030:7;:18;;-1:-1:-1;;;;;;44030:18:0;-1:-1:-1;;;;;44030:18:0;;;;;;;;;;43952:102::o;38096:121::-;38167:21;:19;:21::i;:::-;38195:16;:6;38204:7;38195:16;;:::i;18325:984::-;18387:7;18403:18;18428:13;18444:10;;18458:1;18444:15;:46;;18480:10;;18444:46;;;18462:15;;18444:46;18428:62;;18516:14;;18505:7;:25;;18497:70;;;;-1:-1:-1;;;18497:70:0;;21896:2:1;18497:70:0;;;21878:21:1;;;21915:18;;;21908:30;21974:34;21954:18;;;21947:62;22026:18;;18497:70:0;21694:356:1;18497:70:0;18596:6;18603:1;18596:9;18606:11;;18596:22;;;;;;;;:::i;:::-;;;;;;;;;18588:5;18578:7;:15;;;;:::i;:::-;:40;:85;;;-1:-1:-1;18641:6:0;18648:1;18641:9;18651:11;;18641:22;;;;;;;;:::i;:::-;;;;;;;;;18622:15;:41;;18578:85;18574:705;;;18697:6;:16;:20;;18716:1;;18697:20;:::i;:::-;18682:11;;:36;18674:61;;;;-1:-1:-1;;;18674:61:0;;22257:2:1;18674:61:0;;;22239:21:1;22296:2;22276:18;;;22269:30;-1:-1:-1;;;22315:18:1;;;22308:42;22367:18;;18674:61:0;22055:336:1;18674:61:0;18767:6;18774:1;18767:9;18777:11;;18767:22;;;;;;;;:::i;:::-;;;;;;;;;18748:15;:41;18744:477;;18856:11;;18846:6;;18856:15;;18870:1;18856:15;:::i;:::-;18846:26;;;;;;;;:::i;:::-;;;;;;;;;18835:7;18810:6;18817:1;18810:9;;;;;;;:::i;:::-;;18820:11;;18810:22;;;;;;;;:::i;:::-;;;;;;;;;:32;;;;:::i;:::-;:62;;18802:110;;;;-1:-1:-1;;;18802:110:0;;22598:2:1;18802:110:0;;;22580:21:1;22637:2;22617:18;;;22610:30;22676:34;22656:18;;;22649:62;-1:-1:-1;;;22727:18:1;;;22720:33;22770:19;;18802:110:0;22396:399:1;18802:110:0;18956:11;;18946:9;;18956:15;;18953:1;18956:15;:::i;:::-;18946:26;;;;;;;;:::i;:::-;;;;;;;;;18936:7;:36;;;;:::i;:::-;18923:49;;18574:705;;18744:477;18999:34;19061:5;19036:6;18999:34;19036:9;19046:11;;19036:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;19195:11;;18999:67;;-1:-1:-1;19185:9:0;;19195:15;;19192:1;19195:15;:::i;:::-;19185:26;;;;;;;;:::i;:::-;;;;;;;;;19155;19145:7;:36;;;;:::i;:::-;19144:67;;;;:::i;:::-;19119:6;19126:1;19119:9;19129:11;;19119:22;;;;;;;;:::i;:::-;;;;;;;;;19090:26;:51;;;;:::i;:::-;:121;;;;:::i;:::-;19077:134;;18988:233;18574:705;;;19257:6;19264:1;19257:9;19267:11;;19257:22;;;;;;;;:::i;:::-;;;;;;;;;19247:7;:32;;;;:::i;:::-;19234:45;;18574:705;-1:-1:-1;19293:10:0;18325:984;-1:-1:-1;;18325:984:0:o;33868:359::-;33943:21;:19;:21::i;:::-;-1:-1:-1;;;;;33979:36:0;;33971:104;;;;-1:-1:-1;;;33971:104:0;;23002:2:1;33971:104:0;;;22984:21:1;23041:2;23021:18;;;23014:30;23080:34;23060:18;;;23053:62;23151:25;23131:18;;;23124:53;23194:19;;33971:104:0;22800:419:1;33971:104:0;34082:23;:64;;-1:-1:-1;;;;;;34082:64:0;-1:-1:-1;;;;;34082:64:0;;;;;;;;;34160:9;;34153:68;;-1:-1:-1;;;34153:68:0;;;;;16219:51:1;;;;-1:-1:-1;;16286:18:1;;;16279:34;34160:9:0;;;;34153:25;;16192:18:1;;34153:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45280:248::-;45394:21;:19;:21::i;:::-;45422:18;:39;;;;45468:25;:54;45280:248::o;40182:107::-;40240:16;40272:6;40279:3;40272:11;;;;;;;:::i;:::-;;40265:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40182:107;;;:::o;47398:316::-;47467:4;-1:-1:-1;;;;;47484:23:0;;;;:58;;-1:-1:-1;;;;;;47511:31:0;;;;;;:20;:31;;;;;;;;47484:58;:87;;;-1:-1:-1;;;;;;47546:25:0;;794:10;47546:25;47484:87;47480:122;;;-1:-1:-1;47589:5:0;;47398:316;-1:-1:-1;47398:316:0:o;47480:122::-;47615:21;;;;47610:56;;-1:-1:-1;47654:4:0;;47398:316;-1:-1:-1;47398:316:0:o;47610:56::-;-1:-1:-1;;;;;;47681:23:0;47707:1;47681:23;;;:12;:23;;;;;;:27;;;47398:316::o;13963:39::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13963:39:0;:::o;42381:115::-;42436:16;42468:22;42461:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42381:115;:::o;39362:212::-;39434:21;:19;:21::i;:::-;-1:-1:-1;;;;;39470:31:0;;39462:66;;;;-1:-1:-1;;;39462:66:0;;23426:2:1;39462:66:0;;;23408:21:1;23465:2;23445:18;;;23438:30;-1:-1:-1;;;23484:18:1;;;23477:52;23546:18;;39462:66:0;23224:346:1;39462:66:0;39535:13;:33;;-1:-1:-1;;;;;;39535:33:0;-1:-1:-1;;;;;39535:33:0;;;;;;;;;;39362:212::o;36703:676::-;36760:4;4914:19;:17;:19::i;:::-;36781:9:::1;::::0;-1:-1:-1;;;;;36781:9:0::1;36773:56;;;::::0;-1:-1:-1;;;36773:56:0;;16526:2:1;36773:56:0::1;::::0;::::1;16508:21:1::0;16565:2;16545:18;;;16538:30;-1:-1:-1;;;16584:18:1;;;16577:50;16644:18;;36773:56:0::1;16324:344:1::0;36773:56:0::1;794:10:::0;36845:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36844:28;36836:68;;;::::0;-1:-1:-1;;;36836:68:0;;16875:2:1;36836:68:0::1;::::0;::::1;16857:21:1::0;16914:2;16894:18;;;16887:30;16953:29;16933:18;;;16926:57;17000:18;;36836:68:0::1;16673:351:1::0;36836:68:0::1;36915:22;::::0;-1:-1:-1;;;36915:22:0;::::1;;;36911:115;;;794:10:::0;36956:27:::1;::::0;;;:13:::1;:27;::::0;;;;;::::1;;36948:70;;;;-1:-1:-1::0;;;36948:70:0::1;;;;;;;:::i;:::-;794:10:::0;37032:14:::1;37049:26:::0;;;:12:::1;:26;::::0;;;;;37090:10;37082:39:::1;;;::::0;-1:-1:-1;;;37082:39:0;;23777:2:1;37082:39:0::1;::::0;::::1;23759:21:1::0;23816:2;23796:18;;;23789:30;-1:-1:-1;;;23835:18:1;;;23828:46;23891:18;;37082:39:0::1;23575:340:1::0;37082:39:0::1;37161:12;::::0;37152:21:::1;::::0;:6;:21:::1;:::i;:::-;37128:20;;:45;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;37180:23:0::1;::::0;-1:-1:-1;;;;;37180:23:0::1;:40;794:10:::0;37180:62:::1;::::0;-1:-1:-1;;;;;;37180:62:0::1;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;37180:62:0::1;::::0;::::1;16219:51:1::0;16286:18;;;16279:34;;;16192:18;;37180:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37256:12;:26;37269:12;794:10:::0;;714:98;37269:12:::1;-1:-1:-1::0;;;;;37256:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37256:26:0;;;37249:33;794:10;-1:-1:-1;;;;;37294:61:0::1;;37331:6;37339:15;37294:61;;;;;;18596:25:1::0;;;18652:2;18637:18;;18630:34;18584:2;18569:18;;18422:248;37294:61:0::1;;;;;;;;37369:4;37362:11;;;36703:676:::0;:::o;21044:1696::-;21194:4;21135:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;21207:16:::3;21226:22;21241:6;21226:14;:22::i;:::-;21207:41;;21274:6;21255:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;21287:13:0::3;::::0;-1:-1:-1;21303:21:0::3;21315:8;21303::::0;:21:::3;:::i;:::-;21287:37;;21335:10;;21349:1;21335:15;21331:41;;21366:6;21352:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21331:41:0::3;21379:13;21413:10;;21395:15;;:28;:59;;21444:10;;21395:59;;;21426:15;;21395:59;21379:75:::0;-1:-1:-1;21473:6:0::3;21480:1;21473:9;21483:11;;21473:22;;;;;;;;:::i;:::-;;;;;;;;;21465:5;:30;:75;;;-1:-1:-1::0;21518:6:0::3;21525:1;21518:9;21528:11;;21518:22;;;;;;;;:::i;:::-;;;;;;;;;21499:15;:41;;21465:75;21461:458;;;21574:6;21581:1;21574:9;21584:11;;21574:22;;;;;;;;:::i;:::-;;;;;;;;;21555:15;:41;21551:112;;21647:6:::0;21622::::3;21629:1;21622:9;21632:11;;21622:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;21609:10;:44:::0;21551:112:::3;21675:15;::::0;::::3;;21671:58;;;21703:16;:14;:16::i;:::-;21737:20;21768:6;21737:20:::0;21768:9:::3;21778:11;;21768:22;;;;;;;;:::i;:::-;;;;;;;;;21760:5;:30;:76;;21830:6:::0;21822:5;21797:6:::3;21804:1;21797:9;21807:11;;21797:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;21760:76;;;21793:1;21760:76;21845:22;:41:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;21845:41:0;;;-1:-1:-1;;;;;;;;;;;21845:41:0;;::::3;::::0;;;21895:11:::3;:16:::0;;21737:99;;-1:-1:-1;21845:41:0;;21895:11;;-1:-1:-1;21895:16:0::3;::::0;21845:41;;21895:16:::3;:::i;:::-;::::0;;;-1:-1:-1;;;21461:458:0::3;21929:5;21925:568;;;21949:22;::::0;-1:-1:-1;;;21949:22:0;::::3;;;21945:119;;;794:10:::0;21992:27:::3;::::0;;;:13:::3;:27;::::0;;;;;::::3;;21984:70;;;;-1:-1:-1::0;;;21984:70:0::3;;;;;;;:::i;:::-;22072:23;::::0;-1:-1:-1;;;;;22072:23:0::3;:40;794:10:::0;22136:12:::3;::::0;22127:21:::3;::::0;:6;:21:::3;:::i;:::-;22072:77;::::0;-1:-1:-1;;;;;;22072:77:0::3;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;22072:77:0::3;::::0;::::3;16219:51:1::0;16286:18;;;16279:34;16192:18;;22072:77:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;22182:6;22158:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22254:13:0::3;::::0;-1:-1:-1;;;;;22254:13:0::3;22238:6:::0;794:10;-1:-1:-1;;;;;22202:101:0::3;-1:-1:-1::0;;;;;;;;;;;22270:5:0::3;22277:8;22287:15;22202:101;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;22202:101:0::3;;;;;;;;21925:568;;;22366:12;::::0;22357:21:::3;::::0;:6;:21:::3;:::i;:::-;794:10:::0;22326:26:::3;::::0;;;:12:::3;:26;::::0;;;;:53;;:26;;;:53:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;22436:13:0::3;::::0;-1:-1:-1;;;;;22436:13:0::3;22420:6:::0;794:10;-1:-1:-1;;;;;22393:92:0::3;-1:-1:-1::0;;;;;;;;;;;22452:5:0::3;22459:8;22469:15;22393:92;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;22393:92:0::3;;;;;;;;21925:568;22512:8;22499:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22550:13:0::3;::::0;22527:20:::3;::::0;-1:-1:-1;;;;;22550:13:0::3;:23;794:10:::0;22550:52:::3;::::0;-1:-1:-1;;;;;;22550:52:0::3;::::0;;;;;;-1:-1:-1;;;;;24150:15:1;;;22550:52:0::3;::::0;::::3;24132:34:1::0;22596:4:0::3;24182:18:1::0;;;24175:43;24067:18;;22550:52:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22527:75;;22626:12;22617:5;:21;;22609:67;;;;-1:-1:-1::0;;;22609:67:0::3;;;;;;;:::i;:::-;22683:31;22698:5;22705:8;22683:14;:31::i;:::-;-1:-1:-1::0;22730:4:0::3;::::0;21044:1696;-1:-1:-1;;;;;;;;;21044:1696:0:o;46987:276::-;47080:21;:19;:21::i;:::-;47131:10;47108:20;47155:103;47179:12;47175:1;:16;47155:103;;;47245:5;47207:20;:35;47228:10;;47239:1;47228:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47207:35:0;;;;;;;;;;;;-1:-1:-1;47207:35:0;:43;;-1:-1:-1;;47207:43:0;;;;;;;;;;47193:3;;;;:::i;:::-;;;;47155:103;;13926:32;;;;;;;;;;;;13895:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35136:131::-;35201:21;:19;:21::i;:::-;35229:22;:32;;;;;-1:-1:-1;;;35229:32:0;-1:-1:-1;;;;35229:32:0;;;;;;;;;35136:131::o;38983:260::-;39084:21;:19;:21::i;:::-;39117:9;39112:126;39132:28;;;39112:126;;;39214:16;39176:13;:35;39190:17;;39208:1;39190:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39176:35:0;;;;;;;;;;;;-1:-1:-1;39176:35:0;:54;;-1:-1:-1;;39176:54:0;;;;;;;;;;39162:3;;;;:::i;:::-;;;;39112:126;;34424:612;34534:4;34547:21;:19;:21::i;:::-;-1:-1:-1;;;;;34583:24:0;;34575:55;;;;-1:-1:-1;;;34575:55:0;;21549:2:1;34575:55:0;;;21531:21:1;21588:2;21568:18;;;21561:30;-1:-1:-1;;;21607:18:1;;;21600:48;21665:18;;34575:55:0;21347:342:1;34575:55:0;34637:9;:22;;-1:-1:-1;;;;;34637:22:0;;;-1:-1:-1;;;;;;34637:22:0;;;;;;;;34666:23;:64;;;;;;;;;;;;;;34737:69;;-1:-1:-1;;;34737:69:0;;;;;16219:51:1;;;;-1:-1:-1;;16286:18:1;;;16279:34;34737:26:0;;16192:18:1;;34737:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34828:72:0;;-1:-1:-1;;;34828:72:0;;34813:12;;-1:-1:-1;;;;;34828:31:0;;;;;:72;;794:10;;34882:4;;34889:10;;34828:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34813:87;;34915:7;34907:41;;;;-1:-1:-1;;;34907:41:0;;;;;;;:::i;:::-;34960:52;;;18596:25:1;;;34996:15:0;18652:2:1;18637:18;;18630:34;-1:-1:-1;;;;;34960:52:0;;;;;18569:18:1;34960:52:0;;;;;;;-1:-1:-1;35026:4:0;;34424:612;-1:-1:-1;;;;34424:612:0:o;22974:1696::-;23124:4;23065:6;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;794:10;43821:14:::1;::::0;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;23137:16:::3;23156:22;23171:6;23156:14;:22::i;:::-;23137:41;;23204:6;23185:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;23217:13:0::3;::::0;-1:-1:-1;23233:21:0::3;23245:8;23233::::0;:21:::3;:::i;:::-;23217:37;;23265:10;;23279:1;23265:15;23261:41;;23296:6;23282:10;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23261:41:0::3;23309:13;23343:10;;23325:15;;:28;:59;;23374:10;;23325:59;;;23356:15;;23325:59;23309:75:::0;-1:-1:-1;23403:6:0::3;23410:1;23403:9;23413:11;;23403:22;;;;;;;;:::i;:::-;;;;;;;;;23395:5;:30;:75;;;-1:-1:-1::0;23448:6:0::3;23455:1;23448:9;23458:11;;23448:22;;;;;;;;:::i;:::-;;;;;;;;;23429:15;:41;;23395:75;23391:458;;;23504:6;23511:1;23504:9;23514:11;;23504:22;;;;;;;;:::i;:::-;;;;;;;;;23485:15;:41;23481:112;;23577:6:::0;23552::::3;23559:1;23552:9;23562:11;;23552:22;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;23539:10;:44:::0;23481:112:::3;23605:15;::::0;::::3;;23601:58;;;23633:16;:14;:16::i;:::-;23667:20;23698:6;23667:20:::0;23698:9:::3;23708:11;;23698:22;;;;;;;;:::i;:::-;;;;;;;;;23690:5;:30;:76;;23760:6:::0;23752:5;23727:6:::3;23734:1;23727:9;23737:11;;23727:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;23690:76;;;23723:1;23690:76;23775:22;:41:::0;;::::3;::::0;;::::3;::::0;;-1:-1:-1;23775:41:0;;;-1:-1:-1;;;;;;;;;;;23775:41:0;;::::3;::::0;;;23825:11:::3;:16:::0;;23667:99;;-1:-1:-1;23775:41:0;;23825:11;;-1:-1:-1;23825:16:0::3;::::0;23775:41;;23825:16:::3;:::i;:::-;::::0;;;-1:-1:-1;;;23391:458:0::3;23859:5;23855:568;;;23879:22;::::0;-1:-1:-1;;;23879:22:0;::::3;;;23875:119;;;794:10:::0;23922:27:::3;::::0;;;:13:::3;:27;::::0;;;;;::::3;;23914:70;;;;-1:-1:-1::0;;;23914:70:0::3;;;;;;;:::i;:::-;24002:23;::::0;-1:-1:-1;;;;;24002:23:0::3;:40;794:10:::0;24066:12:::3;::::0;24057:21:::3;::::0;:6;:21:::3;:::i;:::-;24002:77;::::0;-1:-1:-1;;;;;;24002:77:0::3;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;24002:77:0::3;::::0;::::3;16219:51:1::0;16286:18;;;16279:34;16192:18;;24002:77:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;24112:6;24088:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24184:13:0::3;::::0;-1:-1:-1;;;;;24184:13:0::3;24168:6:::0;794:10;-1:-1:-1;;;;;24132:101:0::3;-1:-1:-1::0;;;;;;;;;;;24200:5:0::3;24207:8;24217:15;24132:101;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;24132:101:0::3;;;;;;;;23855:568;;;24296:12;::::0;24287:21:::3;::::0;:6;:21:::3;:::i;:::-;794:10:::0;24256:26:::3;::::0;;;:12:::3;:26;::::0;;;;:53;;:26;;;:53:::3;::::0;;;::::3;:::i;:::-;::::0;;;-1:-1:-1;;24366:13:0::3;::::0;-1:-1:-1;;;;;24366:13:0::3;24350:6:::0;794:10;-1:-1:-1;;;;;24323:92:0::3;-1:-1:-1::0;;;;;;;;;;;24382:5:0::3;24389:8;24399:15;24323:92;;;;;;;12136:25:1::0;;;12192:2;12177:18;;12170:34;;;;12235:2;12220:18;;12213:34;12124:2;12109:18;;11934:319;24323:92:0::3;;;;;;;;23855:568;24442:8;24429:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24480:13:0::3;::::0;24457:20:::3;::::0;-1:-1:-1;;;;;24480:13:0::3;:23;794:10:::0;24480:52:::3;::::0;-1:-1:-1;;;;;;24480:52:0::3;::::0;;;;;;-1:-1:-1;;;;;24150:15:1;;;24480:52:0::3;::::0;::::3;24132:34:1::0;24526:4:0::3;24182:18:1::0;;;24175:43;24067:18;;24480:52:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24457:75;;24556:12;24547:5;:21;;24539:67;;;;-1:-1:-1::0;;;24539:67:0::3;;;;;;;:::i;:::-;24613:31;24628:5;24635:8;24613:14;:31::i;19404:355::-:0;19465:21;:19;:21::i;:::-;19514:1;19501:10;:14;19493:45;;;;-1:-1:-1;;;19493:45:0;;25402:2:1;19493:45:0;;;25384:21:1;25441:2;25421:18;;;25414:30;-1:-1:-1;;;25460:18:1;;;25453:48;25518:18;;19493:45:0;25200:342:1;19493:45:0;19571:10;19553:15;:28;19545:58;;;;-1:-1:-1;;;19545:58:0;;25749:2:1;19545:58:0;;;25731:21:1;25788:2;25768:18;;;25761:30;-1:-1:-1;;;25807:18:1;;;25800:47;25864:18;;19545:58:0;25547:341:1;19545:58:0;19630:9;;;19646:22;;;;19680:73;;;12136:25:1;;;12192:2;12177:18;;12170:34;;;19737:15:0;12220:18:1;;;12213:34;19680:73:0;;-1:-1:-1;;;19696:16:0;19680:73;;;;;;12124:2:1;19680:73:0;;;19458:301;19404:355;:::o;46273:207::-;46369:21;:19;:21::i;:::-;46397:17;:35;;-1:-1:-1;;;;;;46397:35:0;-1:-1:-1;;;;;46397:35:0;;;;;;;;;;;46439:21;:35;46273:207::o;3073:201::-;2053:13;:11;:13::i;:::-;-1:-1:-1;;;;;3162:22:0;::::1;3154:73;;;::::0;-1:-1:-1;;;3154:73:0;;26095:2:1;3154:73:0::1;::::0;::::1;26077:21:1::0;26134:2;26114:18;;;26107:30;26173:34;26153:18;;;26146:62;-1:-1:-1;;;26224:18:1;;;26217:36;26270:19;;3154:73:0::1;25893:402:1::0;3154:73:0::1;3238:28;3257:8;3238:18;:28::i;14007:::-:0;;;;;;;;;;;;44060:79;2053:13;:11;:13::i;:::-;44113:7:::1;:20:::0;;-1:-1:-1;;;;;;44113:20:0::1;::::0;;44060:79::o;27005:1804::-;27189:4;27123:7;20710:9;;20691:15;:28;;20683:64;;;;-1:-1:-1;;;20683:64:0;;;;;;;:::i;:::-;20771:1;20762:6;:10;20754:42;;;;-1:-1:-1;;;20754:42:0;;;;;;;:::i;:::-;43821:14:::1;::::0;27146:5;;-1:-1:-1;;;43821:14:0;::::1;;;43817:116;;;43855:13;::::0;:33:::1;::::0;-1:-1:-1;;;43855:33:0;;-1:-1:-1;;;;;1489:32:1;;;43855:33:0::1;::::0;::::1;1471:51:1::0;43855:13:0;;::::1;::::0;:26:::1;::::0;1444:18:1;;43855:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43854:34;43846:79;;;;-1:-1:-1::0;;;43846:79:0::1;;;;;;;:::i;:::-;4914:19:::2;:17;:19::i;:::-;8642:21:::3;:19;:21::i;:::-;794:10:::0;27210:29:::4;::::0;;;:15:::4;:29;::::0;;;;;::::4;;27202:74;;;::::0;-1:-1:-1;;;27202:74:0;;26502:2:1;27202:74:0::4;::::0;::::4;26484:21:1::0;;;26521:18;;;26514:30;26580:34;26560:18;;;26553:62;26632:18;;27202:74:0::4;26300:356:1::0;27202:74:0::4;27283:16;27302:23;27317:7;27302:14;:23::i;:::-;27283:42;;27332:17;27380:16;:14;:16::i;:::-;27364:12;::::0;27353:23:::4;::::0;:8;:23:::4;:::i;:::-;27352:44;;;;:::i;:::-;27332:64;;27424:9;27411;:22;;27403:47;;;::::0;-1:-1:-1;;;27403:47:0;;15284:2:1;27403:47:0::4;::::0;::::4;15266:21:1::0;15323:2;15303:18;;;15296:30;-1:-1:-1;;;15342:18:1;;;15335:42;15394:18;;27403:47:0::4;15082:336:1::0;27403:47:0::4;27457:14;27474:21;27486:9:::0;27474::::4;:21;:::i;:::-;27457:38;;27521:7;27502:15;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27539:10:0::4;::::0;:15;27535:42:::4;;27570:7;27556:10;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27535:42:0::4;27584:13;27618:10;;27600:15;;:28;:59;;27649:10;;27600:59;;;27631:15;;27600:59;27584:75:::0;-1:-1:-1;27678:6:0::4;27685:1;27678:9;27688:11;;27678:22;;;;;;;;:::i;:::-;;;;;;;;;27670:5;:30;:75;;;-1:-1:-1::0;27723:6:0::4;27730:1;27723:9;27733:11;;27723:22;;;;;;;;:::i;:::-;;;;;;;;;27704:15;:41;;27670:75;27666:460;;;27779:6;27786:1;27779:9;27789:11;;27779:22;;;;;;;;:::i;:::-;;;;;;;;;27760:15;:41;27756:113;;27852:7:::0;27827:6:::4;27834:1;27827:9;27837:11;;27827:22;;;;;;;;:::i;:::-;;;;;;;;;:32;;;;:::i;:::-;27814:10;:45:::0;27756:113:::4;27881:15;::::0;::::4;;27877:58;;;27909:16;:14;:16::i;:::-;27943:20;27974:6;27943:20:::0;27974:9:::4;27984:11;;27974:22;;;;;;;;:::i;:::-;;;;;;;;;27966:5;:30;:77;;28036:7:::0;28028:5;28003:6:::4;28010:1;28003:9;28013:11;;28003:22;;;;;;;;:::i;:::-;;;;;;;;;:30;;;;:::i;:::-;:40;;;;:::i;:::-;27966:77;;;27999:1;27966:77;28052:22;:41:::0;;::::4;::::0;;::::4;::::0;;-1:-1:-1;28052:41:0;;;-1:-1:-1;;;;;;;;;;;28052:41:0;;::::4;::::0;;;28102:11:::4;:16:::0;;27943:100;;-1:-1:-1;28052:41:0;;28102:11;;-1:-1:-1;28102:16:0::4;::::0;28052:41;;28102:16:::4;:::i;:::-;::::0;;;-1:-1:-1;;;27666:460:0::4;28136:5;28132:522;;;28156:22;::::0;-1:-1:-1;;;28156:22:0;::::4;;;28152:112;;;-1:-1:-1::0;;;;;28199:20:0;::::4;;::::0;;;:13:::4;:20;::::0;;;;;::::4;;28191:63;;;;-1:-1:-1::0;;;28191:63:0::4;;;;;;;:::i;:::-;28272:23;::::0;28330:12:::4;::::0;-1:-1:-1;;;;;28272:23:0;;::::4;::::0;:40:::4;::::0;28313:5;;28320:22:::4;::::0;:7;:22:::4;:::i;:::-;28272:71;::::0;-1:-1:-1;;;;;;28272:71:0::4;::::0;;;;;;-1:-1:-1;;;;;16237:32:1;;;28272:71:0::4;::::0;::::4;16219:51:1::0;16286:18;;;16279:34;16192:18;;28272:71:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;28376:7;28352:20;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28397:87:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;28468:15:0::4;12220:18:1::0;;;12213:34;28397:87:0;;-1:-1:-1;;28426:7:0;;-1:-1:-1;;;;;28397:87:0;::::4;::::0;-1:-1:-1;;;;;;;;;;;28397:87:0;;;;;12124:2:1;28397:87:0;;::::4;28132:522;;;28541:12;::::0;28531:22:::4;::::0;:7;:22:::4;:::i;:::-;-1:-1:-1::0;;;;;28507:19:0;::::4;;::::0;;;:12:::4;:19;::::0;;;;:47;;:19;;;:47:::4;::::0;;;::::4;:::i;:::-;::::0;;;-1:-1:-1;;28568:78:0::4;::::0;;12136:25:1;;;12192:2;12177:18;;12170:34;;;28630:15:0::4;12220:18:1::0;;;12213:34;28568:78:0;;-1:-1:-1;;28588:7:0;;-1:-1:-1;;;;;28568:78:0;::::4;::::0;-1:-1:-1;;;;;;;;;;;28568:78:0;;;;;12124:2:1;28568:78:0;;::::4;28132:522;28673:8;28660:9;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;28688:41:0::4;::::0;-1:-1:-1;28702:9:0;28713:8;28723:5;28688:13:::4;:41::i;:::-;28740:10:::0;;28736:49:::4;;28752:33;28770:5;28778:6;28752:9;:33::i;:::-;28799:4;28792:11;;;;;;8686:20:::3;8080:1:::0;9206:7;:22;9023:213;8686:20:::3;20803:1:::1;27005:1804:::0;;;;;;;:::o;44552:527::-;44759:21;:19;:21::i;:::-;44787:18;:39;;;;44833:25;:54;;;;44894:17;:35;;-1:-1:-1;;;;;44894:35:0;;;-1:-1:-1;;;;;;44894:35:0;;;;;;;;;;44936:21;:35;44978:21;:46;;45031:42;;;44894:35;45031:42;-1:-1:-1;;44978:46:0;;;45031:42;;;;-1:-1:-1;;45031:42:0;;;;;;;;;;44552:527::o;17502:144::-;17576:7;;-1:-1:-1;;;;;17576:7:0;17562:10;:21;;:46;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;17587:10;:21;17562:46;17554:86;;;;-1:-1:-1;;;17554:86:0;;26863:2:1;17554:86:0;;;26845:21:1;26902:2;26882:18;;;26875:30;26941:29;26921:18;;;26914:57;26988:18;;17554:86:0;26661:351:1;17652:181:0;17733:5;;-1:-1:-1;;;;;17733:5:0;17719:10;:19;;:44;;-1:-1:-1;17756:7:0;;-1:-1:-1;;;;;17756:7:0;17742:10;:21;17719:44;:69;;;-1:-1:-1;2240:6:0;;-1:-1:-1;;;;;2240:6:0;17767:10;:21;17719:69;17711:116;;;;-1:-1:-1;;;17711:116:0;;27219:2:1;17711:116:0;;;27201:21:1;27258:2;27238:18;;;27231:30;27297:34;27277:18;;;27270:62;-1:-1:-1;;;27348:18:1;;;27341:32;27390:19;;17711:116:0;27017:398:1;6164:120:0;5173:16;:14;:16::i;:::-;6223:7:::1;:15:::0;;-1:-1:-1;;;;6223:15:0::1;::::0;;6254:22:::1;794:10:::0;6263:12:::1;6254:22;::::0;-1:-1:-1;;;;;1489:32:1;;;1471:51;;1459:2;1444:18;6254:22:0::1;;;;;;;6164:120::o:0;5468:108::-;5380:7;;-1:-1:-1;;;5380:7:0;;;;5538:9;5530:38;;;;-1:-1:-1;;;5530:38:0;;27622:2:1;5530:38:0;;;27604:21:1;27661:2;27641:18;;;27634:30;-1:-1:-1;;;27680:18:1;;;27673:46;27736:18;;5530:38:0;27420:340:1;8722:293:0;8124:1;8856:7;;:19;;8848:63;;;;-1:-1:-1;;;8848:63:0;;27967:2:1;8848:63:0;;;27949:21:1;28006:2;27986:18;;;27979:30;28045:33;28025:18;;;28018:61;28096:18;;8848:63:0;27765:355:1;8848:63:0;8124:1;8989:7;:18;8722:293::o;39643:184::-;39690:9;39685:137;39724:11;;39705:9;:16;:30;;39724:11;39705:30;:::i;:::-;39701:1;:34;39685:137;;;39802:12;;39798:16;;:1;:16;:::i;:::-;39780:34;;:15;:34;:::i;:::-;39761:11;;39751:9;;39761:15;;39775:1;;39761:15;:::i;:::-;39751:26;;;;;;;;:::i;:::-;;;;;;;;;;:63;39737:3;;;;:::i;:::-;;;;39685:137;;29669:1016;29804:17;;29759:34;;-1:-1:-1;;;;;29804:17:0;:31;29800:164;;29903:17;;29922:21;;29875:81;;29894:7;;-1:-1:-1;;;;;29903:17:0;;;;;29875:18;:81::i;:::-;29846:110;;29800:164;29972:26;30001:51;30014:7;30023:5;30030:9;30049:1;30001:12;:51::i;:::-;29972:80;-1:-1:-1;30071:47:0;29972:80;30071:26;:47;:::i;:::-;30059:60;;;;:::i;:::-;30130:7;:14;30059:60;;-1:-1:-1;30126:554:0;;30168:13;;-1:-1:-1;;;;;30168:13:0;30160:62;;;;-1:-1:-1;;;30160:62:0;;;;;;;:::i;:::-;30249:13;;30231:42;;-1:-1:-1;;;;;30249:13:0;30265:7;30231:9;:42::i;:::-;30126:554;;;30296:16;;30321:226;30345:7;:14;30341:18;;30321:226;;;30377:24;30433:6;30415:11;30427:1;30415:14;;;;;;;;:::i;:::-;;;;;;;;;30405:7;:24;;;;:::i;:::-;30404:35;;;;:::i;:::-;30377:62;;30450:48;30468:7;30476:1;30468:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30468:10:0;30481:16;30450:9;:48::i;:::-;30509:28;30521:16;30509:28;;:::i;:::-;;;30366:181;30361:3;;;;;:::i;:::-;;;;30321:226;;;-1:-1:-1;30582:1:0;30560:18;30570:8;30560:7;:18;:::i;:::-;30559:24;30555:118;;;30614:7;30622:14;;30596:67;;30614:7;30622:18;;30639:1;;30622:18;:::i;:::-;30614:27;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30614:27:0;30644:18;30654:8;30644:7;:18;:::i;:::-;30596:9;:67::i;:::-;30287:393;30126:554;29752:933;;29669:1016;;;:::o;29420:243::-;29531:6;29506:21;:31;;29498:55;;;;-1:-1:-1;;;29498:55:0;;28678:2:1;29498:55:0;;;28660:21:1;28717:2;28697:18;;;28690:30;-1:-1:-1;;;28736:18:1;;;28729:41;28787:18;;29498:55:0;28476:335:1;29498:55:0;29561:12;29579:9;-1:-1:-1;;;;;29579:14:0;29601:6;29579:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29560:52;;;29627:7;29619:38;;;;-1:-1:-1;;;29619:38:0;;29228:2:1;29619:38:0;;;29210:21:1;29267:2;29247:18;;;29240:30;-1:-1:-1;;;29286:18:1;;;29279:48;29344:18;;29619:38:0;29026:342:1;17839:103:0;17906:7;;-1:-1:-1;;;;;17906:7:0;17892:10;:21;17884:52;;;;-1:-1:-1;;;17884:52:0;;29575:2:1;17884:52:0;;;29557:21:1;29614:2;29594:18;;;29587:30;-1:-1:-1;;;29633:18:1;;;29626:48;29691:18;;17884:52:0;29373:342:1;2332:132:0;2240:6;;-1:-1:-1;;;;;2240:6:0;794:10;2396:23;2388:68;;;;-1:-1:-1;;;2388:68:0;;29922:2:1;2388:68:0;;;29904:21:1;;;29941:18;;;29934:30;30000:34;29980:18;;;29973:62;30052:18;;2388:68:0;29720:356:1;3434:191:0;3527:6;;;-1:-1:-1;;;;;3544:17:0;;;-1:-1:-1;;;;;;3544:17:0;;;;;;;3577:40;;3527:6;;;3544:17;3527:6;;3577:40;;3508:16;;3577:40;3497:128;3434:191;:::o;5905:118::-;4914:19;:17;:19::i;:::-;5975:4:::1;5965:14:::0;;-1:-1:-1;;;;5965:14:0::1;-1:-1:-1::0;;;5965:14:0::1;::::0;;5995:20:::1;6002:12;794:10:::0;;714:98;30691:1510;30812:17;;30767:34;;-1:-1:-1;;;;;30812:17:0;:31;30808:176;;30911:17;;30930:21;;30961:13;;30883:93;;30902:7;;-1:-1:-1;;;;;30911:17:0;;;;30930:21;;30961:13;30883:18;:93::i;:::-;30854:122;;30808:176;30992:26;31021:70;31034:7;794:10;31076:13;;31057:9;;-1:-1:-1;;;;;31076:13:0;31021:12;:70::i;:::-;30992:99;-1:-1:-1;31110:47:0;30992:99;31110:26;:47;:::i;:::-;31098:60;;;;:::i;:::-;31171:7;:14;31098:60;;-1:-1:-1;31167:1029:0;;31209:13;;-1:-1:-1;;;;;31209:13:0;31201:62;;;;-1:-1:-1;;;31201:62:0;;;;;;;:::i;:::-;31299:13;;31273:12;;-1:-1:-1;;;;;31299:13:0;794:10;31384:12;31398:13;;31319:102;;;;;-1:-1:-1;;;;;31398:13:0;;31413:7;;31319:102;;;:::i;:::-;;;;-1:-1:-1;;31319:102:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31319:102:0;-1:-1:-1;;;31319:102:0;;;31291:131;;;31319:102;31291:131;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31272:150;;;31439:7;31431:40;;;;-1:-1:-1;;;31431:40:0;;;;;;;:::i;:::-;31192:287;31167:1029;;;31494:16;;31519:385;31543:7;:14;31539:18;;31519:385;;;31575:24;31631:6;31613:11;31625:1;31613:14;;;;;;;;:::i;:::-;;;;;;;;;31603:7;:24;;;;:::i;:::-;31602:35;;;;:::i;:::-;31675:13;;31575:62;;-1:-1:-1;31649:12:0;;-1:-1:-1;;;;;31675:13:0;794:10;31774:7;31782:1;31774:10;;;;;;;;:::i;:::-;;;;;;;;;;;31695:108;;;;;-1:-1:-1;;;;;31774:10:0;;31786:16;;31695:108;;;:::i;:::-;;;;-1:-1:-1;;31695:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31695:108:0;-1:-1:-1;;;31695:108:0;;;31667:137;;;31695:108;31667:137;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31648:156;;;31823:7;31815:40;;;;-1:-1:-1;;;31815:40:0;;;;;;;:::i;:::-;31866:28;31878:16;31866:28;;:::i;:::-;;;31564:340;;31559:3;;;;;:::i;:::-;;;;31519:385;;;-1:-1:-1;31939:1:0;31917:18;31927:8;31917:7;:18;:::i;:::-;31916:24;31912:277;;;31980:13;;31954:12;;-1:-1:-1;;;;;31980:13:0;794:10;32065:12;32079:7;32087:14;;:18;;32104:1;;32087:18;:::i;:::-;32079:27;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32079:27:0;32108:18;32118:8;32108:7;:18;:::i;:::-;32000:127;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32000:127:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32000:127:0;-1:-1:-1;;;32000:127:0;;;31972:156;;;32000:127;31972:156;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31953:175;;;32147:7;32139:40;;;;-1:-1:-1;;;32139:40:0;;;;;;;:::i;32207:1510::-;32328:17;;32283:34;;-1:-1:-1;;;;;32328:17:0;:31;32324:176;;32427:17;;32446:21;;32477:13;;32399:93;;32418:7;;-1:-1:-1;;;;;32427:17:0;;;;32446:21;;32477:13;32399:18;:93::i;:::-;32370:122;;32324:176;32508:26;32537:70;32550:7;794:10;32592:13;;32573:9;;-1:-1:-1;;;;;32592:13:0;32537:12;:70::i;:::-;32508:99;-1:-1:-1;32626:47:0;32508:99;32626:26;:47;:::i;:::-;32614:60;;;;:::i;:::-;32687:7;:14;32614:60;;-1:-1:-1;32683:1029:0;;32725:13;;-1:-1:-1;;;;;32725:13:0;32717:62;;;;-1:-1:-1;;;32717:62:0;;;;;;;:::i;:::-;32815:13;;32789:12;;-1:-1:-1;;;;;32815:13:0;794:10;32900:12;714:98;32683:1029;33010:16;;33035:385;33059:7;:14;33055:18;;33035:385;;;33091:24;33147:6;33129:11;33141:1;33129:14;;;;;;;;:::i;:::-;;;;;;;;;33119:7;:24;;;;:::i;:::-;33118:35;;;;:::i;:::-;33191:13;;33091:62;;-1:-1:-1;33165:12:0;;-1:-1:-1;;;;;33191:13:0;794:10;33290:7;33298:1;33290:10;;;;;;;;:::i;:::-;;;;;;;;;;;33211:108;;;;;-1:-1:-1;;;;;33290:10:0;;33302:16;;33211:108;;;:::i;:::-;;;;-1:-1:-1;;33211:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;33211:108:0;-1:-1:-1;;;33211:108:0;;;33183:137;;;33211:108;33183:137;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33164:156;;;33339:7;33331:40;;;;-1:-1:-1;;;33331:40:0;;;;;;;:::i;:::-;33382:28;33394:16;33382:28;;:::i;:::-;;;33080:340;;33075:3;;;;;:::i;:::-;;;;33035:385;;;-1:-1:-1;33455:1:0;33433:18;33443:8;33433:7;:18;:::i;:::-;33432:24;33428:277;;;33496:13;;33470:12;;-1:-1:-1;;;;;33496:13:0;794:10;33581:12;714:98;5653:108;5380:7;;-1:-1:-1;;;5380:7:0;;;;5712:41;;;;-1:-1:-1;;;5712:41:0;;31063:2:1;5712:41:0;;;31045:21:1;31102:2;31082:18;;;31075:30;-1:-1:-1;;;31121:18:1;;;31114:50;31181:18;;5712:41:0;30861:344:1;48992:540:0;49111:7;;49181:3;49156:21;49166:11;49156:7;:21;:::i;:::-;49155:29;;;;:::i;:::-;49127:57;-1:-1:-1;;;;;;49195:20:0;;;49191:303;;49227:12;-1:-1:-1;;;;;49245:11:0;;794:10;49336:9;49347:17;49257:108;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49257:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;49257:108:0;-1:-1:-1;;;49257:108:0;;;49245:121;;;49257:108;49245:121;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49226:140;;;49383:7;49375:40;;;;-1:-1:-1;;;49375:40:0;;;;;;;:::i;:::-;49217:206;49191:303;;;49438:48;49456:9;49468:17;49438:9;:48::i;:::-;49509:17;-1:-1:-1;48992:540:0;;;;;;;:::o;47999:719::-;48110:7;48126:17;48150:16;48169:48;48196:9;48207;48169:26;:48::i;:::-;48150:67;;48229:29;48249:8;48229:19;:29::i;:::-;48224:69;;-1:-1:-1;48276:9:0;-1:-1:-1;48269:16:0;;48224:69;48312:65;48331:7;48340:8;48350:18;;48370:6;48312:18;:65::i;:::-;48299:78;;;;:::i;:::-;48389:19;;48299:78;;-1:-1:-1;48389:19:0;;;;;48384:59;;-1:-1:-1;48426:9:0;-1:-1:-1;48419:16:0;;48384:59;48449:23;48475:48;48502:8;48520:1;48475:26;:48::i;:::-;48449:74;;48535:36;48555:15;48535:19;:36::i;:::-;48530:76;;48589:9;48582:16;;;;;;;48530:76;48632:79;48651:7;48660:15;48677:25;;48704:6;48632:18;:79::i;:::-;48620:91;;:9;:91;:::i;:::-;48612:100;47999:719;-1:-1:-1;;;;;;;;47999:719:0:o;49753:283::-;-1:-1:-1;;;;;49865:27:0;;;49845:7;49865:27;;;:16;:27;;;;;;49845:7;;49865:27;:41;:67;;;;;49923:9;-1:-1:-1;;;;;49910:22:0;:9;-1:-1:-1;;;;;49910:22:0;;;49865:67;49861:129;;;-1:-1:-1;;;;;49943:27:0;;;;;;;:16;:27;;;;;:39;;-1:-1:-1;;;;;;49943:39:0;;;;;;;;;;49861:129;-1:-1:-1;;;;;;;50003:27:0;;;;;;;:16;:27;;;;;;;;49753:283::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:180::-;634:6;687:2;675:9;666:7;662:23;658:32;655:52;;;703:1;700;693:12;655:52;-1:-1:-1;726:23:1;;575:180;-1:-1:-1;575:180:1:o;760:118::-;846:5;839:13;832:21;825:5;822:32;812:60;;868:1;865;858:12;883:241;939:6;992:2;980:9;971:7;967:23;963:32;960:52;;;1008:1;1005;998:12;960:52;1047:9;1034:23;1066:28;1088:5;1066:28;:::i;1533:315::-;1598:6;1606;1659:2;1647:9;1638:7;1634:23;1630:32;1627:52;;;1675:1;1672;1665:12;1627:52;1698:29;1717:9;1698:29;:::i;:::-;1688:39;;1777:2;1766:9;1762:18;1749:32;1790:28;1812:5;1790:28;:::i;:::-;1837:5;1827:15;;;1533:315;;;;;:::o;1853:127::-;1914:10;1909:3;1905:20;1902:1;1895:31;1945:4;1942:1;1935:15;1969:4;1966:1;1959:15;1985:251;2057:2;2051:9;2099:2;2087:15;;2132:18;2117:34;;2153:22;;;2114:62;2111:88;;;2179:18;;:::i;:::-;2215:2;2208:22;1985:251;:::o;2241:275::-;2312:2;2306:9;2377:2;2358:13;;-1:-1:-1;;2354:27:1;2342:40;;2412:18;2397:34;;2433:22;;;2394:62;2391:88;;;2459:18;;:::i;:::-;2495:2;2488:22;2241:275;;-1:-1:-1;2241:275:1:o;2521:183::-;2581:4;2614:18;2606:6;2603:30;2600:56;;;2636:18;;:::i;:::-;-1:-1:-1;2681:1:1;2677:14;2693:4;2673:25;;2521:183::o;2709:662::-;2763:5;2816:3;2809:4;2801:6;2797:17;2793:27;2783:55;;2834:1;2831;2824:12;2783:55;2870:6;2857:20;2896:4;2920:60;2936:43;2976:2;2936:43;:::i;:::-;2920:60;:::i;:::-;3014:15;;;3100:1;3096:10;;;;3084:23;;3080:32;;;3045:12;;;;3124:15;;;3121:35;;;3152:1;3149;3142:12;3121:35;3188:2;3180:6;3176:15;3200:142;3216:6;3211:3;3208:15;3200:142;;;3282:17;;3270:30;;3320:12;;;;3233;;3200:142;;;-1:-1:-1;3360:5:1;2709:662;-1:-1:-1;;;;;;2709:662:1:o;3376:348::-;3460:6;3513:2;3501:9;3492:7;3488:23;3484:32;3481:52;;;3529:1;3526;3519:12;3481:52;3569:9;3556:23;3602:18;3594:6;3591:30;3588:50;;;3634:1;3631;3624:12;3588:50;3657:61;3710:7;3701:6;3690:9;3686:22;3657:61;:::i;3959:383::-;4033:6;4041;4049;4102:2;4090:9;4081:7;4077:23;4073:32;4070:52;;;4118:1;4115;4108:12;4070:52;4154:9;4141:23;4131:33;;4214:2;4203:9;4199:18;4186:32;4227:28;4249:5;4227:28;:::i;:::-;4274:5;-1:-1:-1;4298:38:1;4332:2;4317:18;;4298:38;:::i;:::-;4288:48;;3959:383;;;;;:::o;4347:997::-;4454:6;4485:2;4528;4516:9;4507:7;4503:23;4499:32;4496:52;;;4544:1;4541;4534:12;4496:52;4584:9;4571:23;4613:18;4654:2;4646:6;4643:14;4640:34;;;4670:1;4667;4660:12;4640:34;4708:6;4697:9;4693:22;4683:32;;4753:7;4746:4;4742:2;4738:13;4734:27;4724:55;;4775:1;4772;4765:12;4724:55;4799:22;;:::i;:::-;4843:3;4877:2;4873;4869:11;4903:7;4895:6;4892:19;4889:39;;;4924:1;4921;4914:12;4889:39;4948:2;4959:355;4975:6;4970:3;4967:15;4959:355;;;5061:3;5048:17;5097:2;5084:11;5081:19;5078:109;;;5141:1;5170:2;5166;5159:14;5078:109;5212:59;5263:7;5249:11;5245:2;5241:20;5212:59;:::i;:::-;5200:72;;-1:-1:-1;5292:12:1;;;;4992;;4959:355;;;-1:-1:-1;5333:5:1;;4347:997;-1:-1:-1;;;;;;;;4347:997:1:o;5557:1146::-;5675:6;5683;5736:2;5724:9;5715:7;5711:23;5707:32;5704:52;;;5752:1;5749;5742:12;5704:52;5792:9;5779:23;5821:18;5862:2;5854:6;5851:14;5848:34;;;5878:1;5875;5868:12;5848:34;5916:6;5905:9;5901:22;5891:32;;5961:7;5954:4;5950:2;5946:13;5942:27;5932:55;;5983:1;5980;5973:12;5932:55;6019:2;6006:16;6041:4;6065:60;6081:43;6121:2;6081:43;:::i;6065:60::-;6159:15;;;6241:1;6237:10;;;;6229:19;;6225:28;;;6190:12;;;;6265:19;;;6262:39;;;6297:1;6294;6287:12;6262:39;6321:11;;;;6341:148;6357:6;6352:3;6349:15;6341:148;;;6423:23;6442:3;6423:23;:::i;:::-;6411:36;;6374:12;;;;6467;;;;6341:148;;;6508:5;-1:-1:-1;;6551:18:1;;6538:32;;-1:-1:-1;;6582:16:1;;;6579:36;;;6611:1;6608;6601:12;6579:36;;6634:63;6689:7;6678:8;6667:9;6663:24;6634:63;:::i;:::-;6624:73;;;5557:1146;;;;;:::o;6708:254::-;6776:6;6784;6837:2;6825:9;6816:7;6812:23;6808:32;6805:52;;;6853:1;6850;6843:12;6805:52;6876:29;6895:9;6876:29;:::i;:::-;6866:39;6952:2;6937:18;;;;6924:32;;-1:-1:-1;;;6708:254:1:o;6967:367::-;7030:8;7040:6;7094:3;7087:4;7079:6;7075:17;7071:27;7061:55;;7112:1;7109;7102:12;7061:55;-1:-1:-1;7135:20:1;;7178:18;7167:30;;7164:50;;;7210:1;7207;7200:12;7164:50;7247:4;7239:6;7235:17;7223:29;;7307:3;7300:4;7290:6;7287:1;7283:14;7275:6;7271:27;7267:38;7264:47;7261:67;;;7324:1;7321;7314:12;7261:67;6967:367;;;;;:::o;7339:566::-;7431:6;7439;7447;7500:2;7488:9;7479:7;7475:23;7471:32;7468:52;;;7516:1;7513;7506:12;7468:52;7555:9;7542:23;7574:28;7596:5;7574:28;:::i;:::-;7621:5;-1:-1:-1;7677:2:1;7662:18;;7649:32;7704:18;7693:30;;7690:50;;;7736:1;7733;7726:12;7690:50;7775:70;7837:7;7828:6;7817:9;7813:22;7775:70;:::i;:::-;7339:566;;7864:8;;-1:-1:-1;7749:96:1;;-1:-1:-1;;;;7339:566:1:o;7910:248::-;7978:6;7986;8039:2;8027:9;8018:7;8014:23;8010:32;8007:52;;;8055:1;8052;8045:12;8007:52;-1:-1:-1;;8078:23:1;;;8148:2;8133:18;;;8120:32;;-1:-1:-1;7910:248:1:o;8163:773::-;8285:6;8293;8301;8309;8362:2;8350:9;8341:7;8337:23;8333:32;8330:52;;;8378:1;8375;8368:12;8330:52;8418:9;8405:23;8447:18;8488:2;8480:6;8477:14;8474:34;;;8504:1;8501;8494:12;8474:34;8543:70;8605:7;8596:6;8585:9;8581:22;8543:70;:::i;:::-;8632:8;;-1:-1:-1;8517:96:1;-1:-1:-1;8720:2:1;8705:18;;8692:32;;-1:-1:-1;8736:16:1;;;8733:36;;;8765:1;8762;8755:12;8733:36;;8804:72;8868:7;8857:8;8846:9;8842:24;8804:72;:::i;:::-;8163:773;;;;-1:-1:-1;8895:8:1;-1:-1:-1;;;;8163:773:1:o;8941:437::-;9027:6;9035;9088:2;9076:9;9067:7;9063:23;9059:32;9056:52;;;9104:1;9101;9094:12;9056:52;9144:9;9131:23;9177:18;9169:6;9166:30;9163:50;;;9209:1;9206;9199:12;9163:50;9248:70;9310:7;9301:6;9290:9;9286:22;9248:70;:::i;:::-;9337:8;;9222:96;;-1:-1:-1;8941:437:1;-1:-1:-1;;;;8941:437:1:o;9383:632::-;9554:2;9606:21;;;9676:13;;9579:18;;;9698:22;;;9525:4;;9554:2;9777:15;;;;9751:2;9736:18;;;9525:4;9820:169;9834:6;9831:1;9828:13;9820:169;;;9895:13;;9883:26;;9964:15;;;;9929:12;;;;9856:1;9849:9;9820:169;;;-1:-1:-1;10006:3:1;;9383:632;-1:-1:-1;;;;;;9383:632:1:o;10476:328::-;10553:6;10561;10569;10622:2;10610:9;10601:7;10597:23;10593:32;10590:52;;;10638:1;10635;10628:12;10590:52;10674:9;10661:23;10651:33;;10703:38;10737:2;10726:9;10722:18;10703:38;:::i;10809:458::-;10892:6;10900;10908;10916;10969:3;10957:9;10948:7;10944:23;10940:33;10937:53;;;10986:1;10983;10976:12;10937:53;11009:29;11028:9;11009:29;:::i;:::-;10999:39;;11085:2;11074:9;11070:18;11057:32;11047:42;;11139:2;11128:9;11124:18;11111:32;11152:28;11174:5;11152:28;:::i;:::-;11199:5;-1:-1:-1;11223:38:1;11257:2;11242:18;;11223:38;:::i;:::-;11213:48;;10809:458;;;;;;;:::o;11272:657::-;11370:6;11378;11386;11394;11402;11410;11463:3;11451:9;11442:7;11438:23;11434:33;11431:53;;;11480:1;11477;11470:12;11431:53;11516:9;11503:23;11493:33;;11573:2;11562:9;11558:18;11545:32;11535:42;;11596:38;11630:2;11619:9;11615:18;11596:38;:::i;:::-;11586:48;;11681:2;11670:9;11666:18;11653:32;11643:42;;11735:3;11724:9;11720:19;11707:33;11749:28;11771:5;11749:28;:::i;:::-;11796:5;-1:-1:-1;11853:3:1;11838:19;;11825:33;11867:30;11825:33;11867:30;:::i;:::-;11916:7;11906:17;;;11272:657;;;;;;;;:::o;12615:127::-;12676:10;12671:3;12667:20;12664:1;12657:31;12707:4;12704:1;12697:15;12731:4;12728:1;12721:15;12747:168;12787:7;12853:1;12849;12845:6;12841:14;12838:1;12835:21;12830:1;12823:9;12816:17;12812:45;12809:71;;;12860:18;;:::i;:::-;-1:-1:-1;12900:9:1;;12747:168::o;12920:217::-;12960:1;12986;12976:132;;13030:10;13025:3;13021:20;13018:1;13011:31;13065:4;13062:1;13055:15;13093:4;13090:1;13083:15;12976:132;-1:-1:-1;13122:9:1;;12920:217::o;13499:127::-;13560:10;13555:3;13551:20;13548:1;13541:31;13591:4;13588:1;13581:15;13615:4;13612:1;13605:15;13631:135;13670:3;-1:-1:-1;;13691:17:1;;13688:43;;;13711:18;;:::i;:::-;-1:-1:-1;13758:1:1;13747:13;;13631:135::o;13771:347::-;13973:2;13955:21;;;14012:2;13992:18;;;13985:30;14051:25;14046:2;14031:18;;14024:53;14109:2;14094:18;;13771:347::o;14123:343::-;14325:2;14307:21;;;14364:2;14344:18;;;14337:30;-1:-1:-1;;;14398:2:1;14383:18;;14376:49;14457:2;14442:18;;14123:343::o;14471:245::-;14538:6;14591:2;14579:9;14570:7;14566:23;14562:32;14559:52;;;14607:1;14604;14597:12;14559:52;14639:9;14633:16;14658:28;14680:5;14658:28;:::i;14721:356::-;14923:2;14905:21;;;14942:18;;;14935:30;15001:34;14996:2;14981:18;;14974:62;15068:2;15053:18;;14721:356::o;15423:125::-;15463:4;15491:1;15488;15485:8;15482:34;;;15496:18;;:::i;:::-;-1:-1:-1;15533:9:1;;15423:125::o;15553:128::-;15593:3;15624:1;15620:6;15617:1;15614:13;15611:39;;;15630:18;;:::i;:::-;-1:-1:-1;15666:9:1;;15553:128::o;15686:354::-;15888:2;15870:21;;;15927:2;15907:18;;;15900:30;15966:32;15961:2;15946:18;;15939:60;16031:2;16016:18;;15686:354::o;18072:345::-;18274:2;18256:21;;;18313:2;18293:18;;;18286:30;-1:-1:-1;;;18347:2:1;18332:18;;18325:51;18408:2;18393:18;;18072:345::o;19783:179::-;19861:13;;19914:22;19903:34;;19893:45;;19883:73;;19952:1;19949;19942:12;19967:473;20070:6;20078;20086;20094;20102;20155:3;20143:9;20134:7;20130:23;20126:33;20123:53;;;20172:1;20169;20162:12;20123:53;20195:39;20224:9;20195:39;:::i;:::-;20185:49;;20274:2;20263:9;20259:18;20253:25;20243:35;;20318:2;20307:9;20303:18;20297:25;20287:35;;20362:2;20351:9;20347:18;20341:25;20331:35;;20385:49;20429:3;20418:9;20414:19;20385:49;:::i;:::-;20375:59;;19967:473;;;;;;;;:::o;20445:553::-;20484:7;-1:-1:-1;;;;;20554:9:1;;;20582;;;20607:11;;;20626:10;;;20620:17;;20603:35;20600:61;;;20641:18;;:::i;:::-;-1:-1:-1;;;20717:1:1;20710:9;;20735:11;;;20755;;;20748:19;;20731:37;20728:63;;;20771:18;;:::i;:::-;20817:1;20814;20810:9;20800:19;;20864:1;20860:2;20855:11;20852:1;20848:19;20843:2;20839;20835:11;20831:37;20828:63;;;20871:18;;:::i;:::-;20936:1;20932:2;20927:11;20924:1;20920:19;20915:2;20911;20907:11;20903:37;20900:63;;;20943:18;;:::i;:::-;-1:-1:-1;;;20983:9:1;;;;;20445:553;-1:-1:-1;;;20445:553:1:o;24229:184::-;24299:6;24352:2;24340:9;24331:7;24327:23;24323:32;24320:52;;;24368:1;24365;24358:12;24320:52;-1:-1:-1;24391:16:1;;24229:184;-1:-1:-1;24229:184:1:o;24418:397::-;24620:2;24602:21;;;24659:2;24639:18;;;24632:30;24698:34;24693:2;24678:18;;24671:62;-1:-1:-1;;;24764:2:1;24749:18;;24742:31;24805:3;24790:19;;24418:397::o;24820:375::-;-1:-1:-1;;;;;25078:15:1;;;25060:34;;25130:15;;;;25125:2;25110:18;;25103:43;25177:2;25162:18;;25155:34;;;;25010:2;24995:18;;24820:375::o;28125:346::-;28327:2;28309:21;;;28366:2;28346:18;;;28339:30;-1:-1:-1;;;28400:2:1;28385:18;;28378:52;28462:2;28447:18;;28125:346::o;30081:426::-;30210:3;30248:6;30242:13;30273:1;30283:129;30297:6;30294:1;30291:13;30283:129;;;30395:4;30379:14;;;30375:25;;30369:32;30356:11;;;30349:53;30312:12;30283:129;;;30430:6;30427:1;30424:13;30421:48;;;30465:1;30456:6;30451:3;30447:16;30440:27;30421:48;-1:-1:-1;30485:16:1;;;;;30081:426;-1:-1:-1;;30081:426:1:o;30512:344::-;30714:2;30696:21;;;30753:2;30733:18;;;30726:30;-1:-1:-1;;;30787:2:1;30772:18;;30765:50;30847:2;30832:18;;30512:344::o

Swarm Source

ipfs://3448370fd6ca7cb90265436efd0e9d72ebe445cb9a2a9faef1bd095f3c5df5b0

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.