ETH Price: $3,355.20 (+0.22%)

Contract

0xa9502665b39b0e61F2CbbFfAD139688615fB16F6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
0x803679c6996918829f61311a0c8a4ecc68d74054e4de0412a4407461f2fa3cc8 Buy With USDT(pending)2024-11-18 6:04:065 days ago1731909846IN
0xa9502665...615fB16F6
0 ETH(Pending)(Pending)
0x7c84445a8c148c4707fde995daca2e21c77daca3016b40925e2724c9a9cee248 Buy With Eth(pending)2024-11-15 7:17:008 days ago1731655020IN
0xa9502665...615fB16F6
0.3155 ETH(Pending)(Pending)
0xb75250f2bd176741c13b7a0762db603cef2020e091ef1fbab1a7b592d06f2028 Buy With Eth(pending)2024-11-15 6:57:578 days ago1731653877IN
0xa9502665...615fB16F6
0.0001238404 ETH(Pending)(Pending)
0xb8b43710d37f67bfffd5c0be937803c5adb26a1d3b176afe5a47571a3a368a9f Buy With Eth(pending)2024-11-14 8:56:339 days ago1731574593IN
0xa9502665...615fB16F6
0.002 ETH(Pending)(Pending)
0xb5dcdf45e4061e897f8782dbf98d92817c973ad3b6947e429898a5067bbd340e Buy With Eth(pending)2024-11-13 15:07:449 days ago1731510464IN
0xa9502665...615fB16F6
0.005 ETH(Pending)(Pending)
0x872b217dafbcee0cf02576ac15fe814ab91d0236f2b55eb141a2a80d1222580e Buy With USDT(pending)2024-11-03 3:24:4020 days ago1730604280IN
0xa9502665...615fB16F6
0 ETH(Pending)(Pending)
Buy With Eth212502322024-11-23 11:46:2356 secs ago1732362383IN
0xa9502665...615fB16F6
0.015 ETH0.002216779.9553483
Buy With Eth212502292024-11-23 11:45:471 min ago1732362347IN
0xa9502665...615fB16F6
0.009 ETH0.0024970611.21409674
Buy With Eth212502242024-11-23 11:44:472 mins ago1732362287IN
0xa9502665...615fB16F6
0.21706305 ETH0.00167229.28152878
Buy With USDT212502242024-11-23 11:44:472 mins ago1732362287IN
0xa9502665...615fB16F6
0 ETH0.002045619.28152878
Buy With Eth212502182024-11-23 11:43:353 mins ago1732362215IN
0xa9502665...615fB16F6
0.2924391 ETH0.00209019.38646458
Buy With Eth212502132024-11-23 11:42:354 mins ago1732362155IN
0xa9502665...615fB16F6
0.075 ETH0.002285910.26577231
Buy With Eth212502102024-11-23 11:41:595 mins ago1732362119IN
0xa9502665...615fB16F6
0.015 ETH0.001283538.79347421
Buy With Eth212502012024-11-23 11:40:117 mins ago1732362011IN
0xa9502665...615fB16F6
0.0127 ETH0.002143259.62517991
Buy With Eth212501862024-11-23 11:37:1110 mins ago1732361831IN
0xa9502665...615fB16F6
0.02 ETH0.00204669.19112222
Buy With Eth212501812024-11-23 11:36:1111 mins ago1732361771IN
0xa9502665...615fB16F6
0.0096212 ETH0.002002638.99367065
Buy With Eth212501812024-11-23 11:36:1111 mins ago1732361771IN
0xa9502665...615fB16F6
0.0119 ETH0.0014609810.00917065
Buy With Eth212501792024-11-23 11:35:4711 mins ago1732361747IN
0xa9502665...615fB16F6
0.29900879 ETH0.0023072110.36151245
Buy With Eth212501752024-11-23 11:34:5912 mins ago1732361699IN
0xa9502665...615fB16F6
0.008 ETH0.0023431510.52288274
Buy With Eth212501732024-11-23 11:34:3512 mins ago1732361675IN
0xa9502665...615fB16F6
0.11685946 ETH0.0018545810.29381372
Buy With Eth212501672024-11-23 11:33:2313 mins ago1732361603IN
0xa9502665...615fB16F6
0.0418499 ETH0.0022956710.30969091
Buy With Eth212501632024-11-23 11:32:3514 mins ago1732361555IN
0xa9502665...615fB16F6
0.002 ETH0.00121258.30679318
Buy With Eth212501542024-11-23 11:30:4716 mins ago1732361447IN
0xa9502665...615fB16F6
0.02026957 ETH0.001901488.53940423
Buy With Eth212501522024-11-23 11:30:2316 mins ago1732361423IN
0xa9502665...615fB16F6
0.018 ETH0.002180279.79141428
Buy With Eth212501492024-11-23 11:29:4717 mins ago1732361387IN
0xa9502665...615fB16F6
0.13848644 ETH0.001285228.80501951
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
212502322024-11-23 11:46:2356 secs ago1732362383
0xa9502665...615fB16F6
0.015 ETH
212502292024-11-23 11:45:471 min ago1732362347
0xa9502665...615fB16F6
0.009 ETH
212502242024-11-23 11:44:472 mins ago1732362287
0xa9502665...615fB16F6
0.21706305 ETH
212502182024-11-23 11:43:353 mins ago1732362215
0xa9502665...615fB16F6
0.2924391 ETH
212502132024-11-23 11:42:354 mins ago1732362155
0xa9502665...615fB16F6
0.075 ETH
212502102024-11-23 11:41:595 mins ago1732362119
0xa9502665...615fB16F6
0.015 ETH
212502012024-11-23 11:40:117 mins ago1732362011
0xa9502665...615fB16F6
0.0127 ETH
212501862024-11-23 11:37:1110 mins ago1732361831
0xa9502665...615fB16F6
0.02 ETH
212501812024-11-23 11:36:1111 mins ago1732361771
0xa9502665...615fB16F6
0.0096212 ETH
212501812024-11-23 11:36:1111 mins ago1732361771
0xa9502665...615fB16F6
0.0119 ETH
212501792024-11-23 11:35:4711 mins ago1732361747
0xa9502665...615fB16F6
0.29900879 ETH
212501752024-11-23 11:34:5912 mins ago1732361699
0xa9502665...615fB16F6
0.008 ETH
212501732024-11-23 11:34:3512 mins ago1732361675
0xa9502665...615fB16F6
0.11685946 ETH
212501672024-11-23 11:33:2313 mins ago1732361603
0xa9502665...615fB16F6
0.0418499 ETH
212501632024-11-23 11:32:3514 mins ago1732361555
0xa9502665...615fB16F6
0.002 ETH
212501542024-11-23 11:30:4716 mins ago1732361447
0xa9502665...615fB16F6
0.02026957 ETH
212501522024-11-23 11:30:2316 mins ago1732361423
0xa9502665...615fB16F6
0.018 ETH
212501492024-11-23 11:29:4717 mins ago1732361387
0xa9502665...615fB16F6
0.13848644 ETH
212501422024-11-23 11:28:2318 mins ago1732361303
0xa9502665...615fB16F6
5.81252769 ETH
212501362024-11-23 11:27:1120 mins ago1732361231
0xa9502665...615fB16F6
0.008 ETH
212501322024-11-23 11:26:2320 mins ago1732361183
0xa9502665...615fB16F6
0.012 ETH
212501232024-11-23 11:24:3522 mins ago1732361075
0xa9502665...615fB16F6
0.03 ETH
212501192024-11-23 11:23:4723 mins ago1732361027
0xa9502665...615fB16F6
0.04416334 ETH
212501122024-11-23 11:22:2324 mins ago1732360943
0xa9502665...615fB16F6
0.25 ETH
212501112024-11-23 11:22:1125 mins ago1732360931
0xa9502665...615fB16F6
0.06905952 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Rexas_Presale

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-07
*/

// 
// ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓███████▓▒░ 
// ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
// ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░        
// ░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░  
// ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░ 
// ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░      ░▒▓█▓▒░ 
// ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░  
//                                      
// Rexas Finance Presale
// Website: https://rexas.com
// Twitter/X: https://x.com/rexasfinance
// Telegram: https://t.me/rexasfinance
// 


//SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage)
        private
        pure
    {
        if (returndata.length > 0) {
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

interface Aggregator {
    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

contract Rexas_Presale is ReentrancyGuard, Ownable {
    uint256 public overalllRaised;
    uint256 public presaleId;
    uint256 public USDT_MULTIPLIER;
    uint256 public ETH_MULTIPLIER;
    address public fundReceiver;
    uint256 public uniqueBuyers;

    struct PresaleData {
        uint256 startTime;
        uint256 endTime;
        uint256 price;
        uint256 nextStagePrice;
        uint256 Sold;
        uint256 tokensToSell;
        uint256 UsdtHardcap;
        uint256 amountRaised;
        bool Active;
    }

    struct UserData {
        uint256 investedAmount;
        uint256 receivedTokenAmount;
    }

    IERC20Metadata public USDTInterface;
    IERC20Metadata public USDCInterface;
    Aggregator internal aggregatorInterface;

    mapping(uint256 => bool) public paused;
    mapping(uint256 => PresaleData) public presale;
    mapping(address => mapping(uint256 => UserData)) public userData;
    mapping(address => bool) public isExcludeMinToken;
    mapping(address => bool) public isBlackList;
    mapping(address => bool) public isExist;

    uint256 public MinTokenTobuy;
    uint256 public currentSale;
    address public SaleToken;

    event PresaleCreated(
        uint256 indexed _id,
        uint256 _totalTokens,
        uint256 _startTime,
        uint256 _endTime
    );

    event PresaleUpdated(
        bytes32 indexed key,
        uint256 prevValue,
        uint256 newValue,
        uint256 timestamp
    );

    event TokensBought(
        address indexed user,
        uint256 indexed id,
        address indexed purchaseToken,
        uint256 tokensBought,
        uint256 amountPaid,
        uint256 timestamp
    );

    event TokensClaimed(
        address indexed user,
        uint256 indexed id,
        uint256 amount,
        uint256 timestamp
    );

    event PresalePaused(uint256 indexed id, uint256 timestamp);

    event PresaleUnpaused(uint256 indexed id, uint256 timestamp);

    constructor(
        address _oracle,
        address _usdt,
        address _usdc,
        address _SaleToken,
        uint256 _MinTokenTobuy
    ) {
        aggregatorInterface = Aggregator(_oracle);
        SaleToken = _SaleToken;
        MinTokenTobuy = _MinTokenTobuy;
        USDTInterface = IERC20Metadata(_usdt);
        USDCInterface = IERC20Metadata(_usdc);
        ETH_MULTIPLIER = (10**18);
        USDT_MULTIPLIER = (10**6);
        fundReceiver = msg.sender;
    }

    function createPresale(
        uint256 _price,
        uint256 _nextStagePrice,
        uint256 _tokensToSell,
        uint256 _UsdtHardcap
    ) external onlyOwner {
        require(_price > 0, "Zero price");
        require(_tokensToSell > 0, "Zero tokens to sell");

        presaleId++;

        presale[presaleId] = PresaleData(
            0,
            0,
            _price,
            _nextStagePrice,
            0,
            _tokensToSell,
            _UsdtHardcap,
            0,
            false
        );

        emit PresaleCreated(presaleId, _tokensToSell, 0, 0);
    }

    function setPresaleStage(uint256 _id) public onlyOwner {
        require(presale[_id].tokensToSell > 0, "Presale don't exist");
        if (currentSale != 0) {
            presale[currentSale].endTime = block.timestamp;
            presale[currentSale].Active = false;
        }
        presale[_id].startTime = block.timestamp;
        presale[_id].Active = true;
        currentSale = _id;
    }

    function updatePresale(
        uint256 _id,
        uint256 _price,
        uint256 _nextStagePrice,
        uint256 _tokensToSell,
        uint256 _Hardcap
    ) external onlyOwner {
        require(_price > 0, "Zero price");
        require(_tokensToSell > 0, "Zero tokens to sell");
        require(_Hardcap > 0, "Zero harcap");
        presale[_id].price = _price;
        presale[_id].nextStagePrice = _nextStagePrice;
        presale[_id].tokensToSell = _tokensToSell;
        presale[_id].UsdtHardcap = _Hardcap;
    }

    function changeFundWallet(address _wallet) external onlyOwner {
        require(_wallet != address(0), "Invalid parameters");
        fundReceiver = _wallet;
    }

    function changeUSDTToken(address _newAddress) external onlyOwner {
        require(_newAddress != address(0), "Zero token address");
        USDTInterface = IERC20Metadata(_newAddress);
    }

    function changeUSDCToken(address _newAddress) external onlyOwner {
        require(_newAddress != address(0), "Zero token address");
        USDCInterface = IERC20Metadata(_newAddress);
    }

    function pausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner {
        require(!paused[_id], "Already paused");
        paused[_id] = true;
        emit PresalePaused(_id, block.timestamp);
    }

    function unPausePresale(uint256 _id)
        external
        checkPresaleId(_id)
        onlyOwner
    {
        require(paused[_id], "Not paused");
        paused[_id] = false;
        emit PresaleUnpaused(_id, block.timestamp);
    }

    function getLatestPrice() public view returns (uint256) {
        (, int256 price, , , ) = aggregatorInterface.latestRoundData();
        price = (price * (10**10));
        return uint256(price);
    }

    modifier checkPresaleId(uint256 _id) {
        require(_id > 0 && _id == currentSale, "Invalid presale id");
        _;
    }

    modifier checkSaleState(uint256 _id, uint256 amount) {
        require(presale[_id].Active == true, "preSAle not Active");
        require(
            amount > 0 &&
                amount <= presale[_id].tokensToSell - presale[_id].Sold,
            "Invalid sale amount"
        );
        _;
    }

    function ExcludeAccouctFromMinBuy(address _user, bool _status)
        external
        onlyOwner
    {
        isExcludeMinToken[_user] = _status;
    }

    function blackListUser(address _user, bool _value) public onlyOwner {
        isBlackList[_user] = _value;
    }

    function buyWithUSDT(uint256 usdAmount)
        external
        checkPresaleId(currentSale)
        checkSaleState(currentSale, usdToTokens(currentSale, usdAmount))
        nonReentrant
        returns (bool)
    {
        require(!paused[currentSale], "Presale paused");
        require(
            presale[currentSale].Active == true,
            "Presale is not active yet"
        );
        require(!isBlackList[msg.sender], "Account is blackListed");
        require(
            presale[currentSale].amountRaised + usdAmount <=
                presale[currentSale].UsdtHardcap,
            "Amount should be less than leftHardcap"
        );
        if (!isExist[msg.sender]) {
            isExist[msg.sender] = true;
            uniqueBuyers++;
        }
        uint256 tokens = usdToTokens(currentSale, usdAmount);
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdAmount;
        overalllRaised += usdAmount;

        if (isExcludeMinToken[msg.sender] == false) {
            require(tokens >= MinTokenTobuy, "Less than min amount");
        }
        userData[_msgSender()][currentSale].investedAmount += usdAmount;
        userData[_msgSender()][currentSale].receivedTokenAmount += tokens;
        
        uint256 ourAllowance = USDTInterface.allowance(
            _msgSender(),
            address(this)
        );
        require(usdAmount <= ourAllowance, "Make sure to add enough allowance");
        (bool success, ) = address(USDTInterface).call(
            abi.encodeWithSignature(
                "transferFrom(address,address,uint256)",
                _msgSender(),
                fundReceiver,
                usdAmount
            )
        );
        require(success, "Token payment failed");
        bool status = IERC20(SaleToken).transfer(
                _msgSender(),
                tokens
            );
        require(status, "Token transfer failed");
        
        emit TokensBought(
            _msgSender(),
            currentSale,
            address(USDTInterface),
            tokens,
            usdAmount,
            block.timestamp
        );
        return true;
    }

    function buyWithUSDC(uint256 usdcAmount)
        external
        checkPresaleId(currentSale)
        checkSaleState(currentSale, usdToTokens(currentSale, usdcAmount))
        nonReentrant
        returns (bool)
    {
        require(!paused[currentSale], "Presale paused");
        require(
            presale[currentSale].Active == true,
            "Presale is not active yet"
        );
        require(
            presale[currentSale].amountRaised + usdcAmount <=
                presale[currentSale].UsdtHardcap,
            "Amount should be less than leftHardcap"
        );
        require(!isBlackList[msg.sender], "Account is blackListed");
        if (!isExist[msg.sender]) {
            isExist[msg.sender] = true;
            uniqueBuyers++;
        }
        uint256 tokens = usdToTokens(currentSale, usdcAmount);
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdcAmount;
        overalllRaised += usdcAmount;

        if (isExcludeMinToken[msg.sender] == false) {
            require(tokens >= MinTokenTobuy, "Less than min amount");
        }
        userData[_msgSender()][currentSale].investedAmount += usdcAmount;
        userData[_msgSender()][currentSale].receivedTokenAmount += tokens;

        uint256 ourAllowance = USDTInterface.allowance(
            _msgSender(),
            address(this)
        );
        require(
            usdcAmount <= ourAllowance,
            "Make sure to add enough allowance"
        );
        (bool success, ) = address(USDCInterface).call(
            abi.encodeWithSignature(
                "transferFrom(address,address,uint256)",
                _msgSender(),
                fundReceiver,
                usdcAmount
            )
        );
        require(success, "Token payment failed");
        bool status = IERC20(SaleToken).transfer(
                _msgSender(),
                tokens
            );
        require(status, "Token transfer failed");

        emit TokensBought(
            _msgSender(),
            currentSale,
            address(USDTInterface),
            tokens,
            usdcAmount,
            block.timestamp
        );
        return true;
    }

    function buyWithEth()
        external
        payable
        checkPresaleId(currentSale)
        checkSaleState(currentSale, ethToTokens(currentSale, msg.value))
        nonReentrant
        returns (bool)
    {
        uint256 usdAmount = (msg.value * getLatestPrice() * USDT_MULTIPLIER) /
            (ETH_MULTIPLIER * ETH_MULTIPLIER);
        require(
            presale[currentSale].amountRaised + usdAmount <=
                presale[currentSale].UsdtHardcap,
            "Amount should be less than leftHardcap"
        );
        require(!isBlackList[msg.sender], "Account is blackListed");
        require(!paused[currentSale], "Presale paused");
        require(
            presale[currentSale].Active == true,
            "Presale is not active yet"
        );
        if (!isExist[msg.sender]) {
            isExist[msg.sender] = true;
            uniqueBuyers++;
        }

        uint256 tokens = usdToTokens(currentSale, usdAmount);
        if (isExcludeMinToken[msg.sender] == false) {
            require(tokens >= MinTokenTobuy, "Insufficient Amount!");
        }
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdAmount;
        overalllRaised += usdAmount;
        userData[_msgSender()][currentSale].investedAmount += usdAmount;
        userData[_msgSender()][currentSale].receivedTokenAmount += tokens;
        
        sendValue(payable(fundReceiver), msg.value);
        bool status = IERC20(SaleToken).transfer(
                _msgSender(),
                tokens
            );
        require(status, "Token transfer failed");

        emit TokensBought(
            _msgSender(),
            currentSale,
            address(0),
            tokens,
            msg.value,
            block.timestamp
        );
        return true;
    }

    function ethBuyHelper(uint256 _id, uint256 amount)
        external
        view
        returns (uint256 ethAmount)
    {
        uint256 usdPrice = (amount * presale[_id].price);
        ethAmount =
            (usdPrice * ETH_MULTIPLIER) /
            (getLatestPrice() * 10**IERC20Metadata(SaleToken).decimals());
    }

    function usdBuyHelper(uint256 _id, uint256 amount)
        external
        view
        returns (uint256 usdPrice)
    {
        usdPrice =
            (amount * presale[_id].price) /
            10**IERC20Metadata(SaleToken).decimals();
    }

    function ethToTokens(uint256 _id, uint256 amount)
        public
        view
        returns (uint256 _tokens)
    {
        uint256 usdAmount = (amount * getLatestPrice() * USDT_MULTIPLIER) /
            (ETH_MULTIPLIER * ETH_MULTIPLIER);
        _tokens = usdToTokens(_id, usdAmount);
    }

    function usdToTokens(uint256 _id, uint256 amount)
        public
        view
        returns (uint256 _tokens)
    {
        _tokens = (amount * presale[_id].price) / USDT_MULTIPLIER;
    }

    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 WithdrawTokens(address _token, uint256 amount) external onlyOwner {
        IERC20(_token).transfer(fundReceiver, amount);
    }

    function WithdrawContractFunds(uint256 amount) external onlyOwner {
        sendValue(payable(fundReceiver), amount);
    }

    function ChangeSaleToken(address _token) public onlyOwner {
        SaleToken = _token;
    }

    function ChangeMinTokenToBuy(uint256 _amount) public onlyOwner {
        MinTokenTobuy = _amount;
    }

    function ChangeOracleAddress(address _oracle) public onlyOwner {
        aggregatorInterface = Aggregator(_oracle);
    }

    function blockTimeStamp() public view returns(uint256) {
        return block.timestamp;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"address","name":"_usdt","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_SaleToken","type":"address"},{"internalType":"uint256","name":"_MinTokenTobuy","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"PresaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","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":"PresaleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","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":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangeMinTokenToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"ChangeOracleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ChangeSaleToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeAccouctFromMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MinTokenTobuy","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":"USDCInterface","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"blackListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blockTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdcAmount","type":"uint256"}],"name":"buyWithUSDC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeUSDCToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeUSDTToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_UsdtHardcap","type":"uint256"}],"name":"createPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMinToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overalllRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presale","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"Sold","type":"uint256"},{"internalType":"uint256","name":"tokensToSell","type":"uint256"},{"internalType":"uint256","name":"UsdtHardcap","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setPresaleStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_Hardcap","type":"uint256"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userData","outputs":[{"internalType":"uint256","name":"investedAmount","type":"uint256"},{"internalType":"uint256","name":"receivedTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b506040516151bd3803806151bd83398181016040528101906100319190610319565b60015f819055506100546100496101be60201b60201c565b6101c560201b60201c565b84600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806011819055508360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600581905550620f42406004819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050610390565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102b58261028c565b9050919050565b6102c5816102ab565b81146102cf575f80fd5b50565b5f815190506102e0816102bc565b92915050565b5f819050919050565b6102f8816102e6565b8114610302575f80fd5b50565b5f81519050610313816102ef565b92915050565b5f805f805f60a0868803121561033257610331610288565b5b5f61033f888289016102d2565b9550506020610350888289016102d2565b9450506040610361888289016102d2565b9350506060610372888289016102d2565b925050608061038388828901610305565b9150509295509295909350565b614e208061039d5f395ff3fe608060405260043610610264575f3560e01c80637cde403d11610143578063b36d6919116100b5578063e18e84f911610079578063e18e84f91461092f578063e6ab143414610959578063ecf5f4371461099d578063f2fde38b146109c5578063f597573f146109ed578063fb4aa0a114610a1757610264565b8063b36d69191461083f578063d01608c11461087b578063d099850a146108a3578063df5bc83b146108cb578063e0cef1b01461090757610264565b80638e15f473116101075780638e15f473146107215780639752f3cb1461074b578063a05d03fd14610773578063a7c601601461079d578063aa1c3aa5146107d9578063aeccf7351461080357610264565b80637cde403d14610653578063833cde521461067b5780638561c315146106a55780638d79e66d146106cd5780638da5cb5b146106f757610264565b80633c05eca1116101dc57806358f98585116101a057806358f985851461055d578063680f2e4f146105875780636f891f82146105af5780636fb4adff146105d9578063715018a614610601578063718a19621461061757610264565b80633c05eca11461046a5780634216d650146104a757806348bf4fcf146104e35780634a6413f71461050d578063582b57231461053557610264565b806311b5444f1161022e57806311b5444f146103585780631d5de91c146103765780631ed0c9541461039e5780632127fe04146103da57806325312e5414610416578063397643631461044057610264565b806213eb4b14610268578062dde10e146102a457806303fcd9ac146102e05780630d07cc30146103085780630d2d1f5214610330575b5f80fd5b348015610273575f80fd5b5061028e6004803603810190610289919061385b565b610a41565b60405161029b91906138a0565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c591906138ec565b610a5e565b6040516102d791906138a0565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190613941565b610a7b565b005b348015610313575f80fd5b5061032e6004803603810190610329919061385b565b610adb565b005b34801561033b575f80fd5b506103566004803603810190610351919061385b565b610b26565b005b610360610b71565b60405161036d91906138a0565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906138ec565b611315565b005b3480156103a9575f80fd5b506103c460048036038101906103bf919061385b565b611327565b6040516103d191906138a0565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb919061397f565b611344565b60405161040d91906139cc565b60405180910390f35b348015610421575f80fd5b5061042a611435565b6040516104379190613a40565b60405180910390f35b34801561044b575f80fd5b5061045461145a565b60405161046191906139cc565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190613a59565b611460565b60405161049e929190613a97565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c8919061397f565b61148b565b6040516104da91906139cc565b60405180910390f35b3480156104ee575f80fd5b506104f76114c1565b60405161050491906139cc565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e91906138ec565b6114c7565b005b348015610540575f80fd5b5061055b600480360381019061055691906138ec565b6115e2565b005b348015610568575f80fd5b50610571611618565b60405161057e91906139cc565b60405180910390f35b348015610592575f80fd5b506105ad60048036038101906105a89190613a59565b61161e565b005b3480156105ba575f80fd5b506105c36116c7565b6040516105d091906139cc565b60405180910390f35b3480156105e4575f80fd5b506105ff60048036038101906105fa919061385b565b6116ce565b005b34801561060c575f80fd5b50610615611787565b005b348015610622575f80fd5b5061063d6004803603810190610638919061397f565b61179a565b60405161064a91906139cc565b60405180910390f35b34801561065e575f80fd5b50610679600480360381019061067491906138ec565b6117eb565b005b348015610686575f80fd5b5061068f6118e9565b60405161069c9190613acd565b60405180910390f35b3480156106b0575f80fd5b506106cb60048036038101906106c6919061385b565b61190e565b005b3480156106d8575f80fd5b506106e16119c7565b6040516106ee91906139cc565b60405180910390f35b348015610702575f80fd5b5061070b6119cd565b6040516107189190613acd565b60405180910390f35b34801561072c575f80fd5b506107356119f5565b60405161074291906139cc565b60405180910390f35b348015610756575f80fd5b50610771600480360381019061076c9190613ae6565b611aa5565b005b34801561077e575f80fd5b50610787611bde565b60405161079491906139cc565b60405180910390f35b3480156107a8575f80fd5b506107c360048036038101906107be91906138ec565b611be4565b6040516107d091906138a0565b60405180910390f35b3480156107e4575f80fd5b506107ed6125ae565b6040516107fa91906139cc565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906138ec565b6125b4565b60405161083691906138a0565b60405180910390f35b34801561084a575f80fd5b506108656004803603810190610860919061385b565b612f7e565b60405161087291906138a0565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c91906138ec565b612f9b565b005b3480156108ae575f80fd5b506108c960048036038101906108c49190613b5d565b6130b4565b005b3480156108d6575f80fd5b506108f160048036038101906108ec919061397f565b613261565b6040516108fe91906139cc565b60405180910390f35b348015610912575f80fd5b5061092d60048036038101906109289190613941565b61332e565b005b34801561093a575f80fd5b5061094361338e565b60405161095091906139cc565b60405180910390f35b348015610964575f80fd5b5061097f600480360381019061097a91906138ec565b613394565b60405161099499989796959493929190613bc1565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be919061385b565b6133ea565b005b3480156109d0575f80fd5b506109eb60048036038101906109e6919061385b565b6134a3565b005b3480156109f8575f80fd5b50610a01613525565b604051610a0e9190613a40565b60405180910390f35b348015610a22575f80fd5b50610a2b61354a565b604051610a389190613acd565b60405180910390f35b6010602052805f5260405f205f915054906101000a900460ff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b610a8361356f565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ae361356f565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e61356f565b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6012545f81118015610b85575060125481145b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613ca6565b60405180910390fd5b601254610bd36012543461179a565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff16151514610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613d0e565b60405180910390fd5b5f81118015610c7c5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f2060050154610c789190613d59565b8111155b610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613dd6565b60405180910390fd5b610cc36135ed565b5f600554600554610cd49190613df4565b600454610cdf6119f5565b34610cea9190613df4565b610cf49190613df4565b610cfe9190613e62565b9050600c5f60125481526020019081526020015f206006015481600c5f60125481526020019081526020015f2060070154610d399190613e92565b1115610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613f35565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613f9d565b60405180910390fd5b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff16151514610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061406d565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f8857600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190610f829061408b565b91905055505b5f610f956012548361148b565b90505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361103157601154811015611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061411c565b60405180910390fd5b5b80600c5f60125481526020019081526020015f206004015f8282546110569190613e92565b9250508190555081600c5f60125481526020019081526020015f206007015f8282546110829190613e92565b925050819055508160025f82825461109a9190613e92565b9250508190555081600d5f6110ad61363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f8282546111079190613e92565b9250508190555080600d5f61111a61363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f8282546111759190613e92565b925050819055506111a760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634613641565b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111ed61363a565b846040518363ffffffff1660e01b815260040161120b92919061413a565b6020604051808303815f875af1158015611227573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124b9190614175565b90508061128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906141ea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166012546112af61363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368534426040516112f893929190614208565b60405180910390a46001965050505061130f613731565b50505090565b61131d61356f565b8060118190555050565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f80600c5f8581526020019081526020015f2060020154836113669190613df4565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f69190614273565b600a61140291906143cd565b61140a6119f5565b6114149190613df4565b600554826114229190613df4565b61142c9190613e62565b91505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600d602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154905082565b5f600454600c5f8581526020019081526020015f2060020154836114af9190613df4565b6114b99190613e62565b905092915050565b60045481565b805f811180156114d8575060125481145b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613ca6565b60405180910390fd5b61151f61356f565b600b5f8381526020019081526020015f205f9054906101000a900460ff161561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614461565b60405180910390fd5b6001600b5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f426040516115d691906139cc565b60405180910390a25050565b6115ea61356f565b61161560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613641565b50565b60025481565b61162661356f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161168292919061413a565b6020604051808303815f875af115801561169e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c29190614175565b505050565b5f42905090565b6116d661356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906144c9565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61178f61356f565b6117985f61373a565b565b5f806005546005546117ac9190613df4565b6004546117b76119f5565b856117c29190613df4565b6117cc9190613df4565b6117d69190613e62565b90506117e2848261148b565b91505092915050565b6117f361356f565b5f600c5f8381526020019081526020015f206005015411611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614531565b60405180910390fd5b5f6012541461189b5742600c5f60125481526020019081526020015f20600101819055505f600c5f60125481526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505b42600c5f8381526020019081526020015f205f01819055506001600c5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055508060128190555050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61191661356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614599565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a85919061463d565b5050509150506402540be40081611a9c91906146b4565b90508091505090565b611aad61356f565b5f8411611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614774565b60405180910390fd5b5f8211611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906147dc565b60405180910390fd5b5f8111611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614844565b60405180910390fd5b83600c5f8781526020019081526020015f206002018190555082600c5f8781526020019081526020015f206003018190555081600c5f8781526020019081526020015f206005018190555080600c5f8781526020019081526020015f20600601819055505050505050565b60125481565b5f6012545f81118015611bf8575060125481145b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90613ca6565b60405180910390fd5b601254611c466012548561148b565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff16151514611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613d0e565b60405180910390fd5b5f81118015611cef5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f2060050154611ceb9190613d59565b8111155b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613dd6565b60405180910390fd5b611d366135ed565b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff16151514611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df69061406d565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613f9d565b60405180910390fd5b600c5f60125481526020019081526020015f206006015485600c5f60125481526020019081526020015f2060070154611ec29190613e92565b1115611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613f35565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fbe57600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190611fb89061408b565b91905055505b5f611fcb6012548761148b565b905080600c5f60125481526020019081526020015f206004015f828254611ff29190613e92565b9250508190555085600c5f60125481526020019081526020015f206007015f82825461201e9190613e92565b925050819055508560025f8282546120369190613e92565b925050819055505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036120d7576011548110156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906148ac565b60405180910390fd5b5b85600d5f6120e361363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f82825461213d9190613e92565b9250508190555080600d5f61215061363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f8282546121ab9190613e92565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6121f861363a565b306040518363ffffffff1660e01b81526004016122169291906148ca565b602060405180830381865afa158015612231573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225591906148f1565b90508087111561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061498c565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122db61363a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a604051602401612310939291906149aa565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161239a9190614a31565b5f604051808303815f865af19150503d805f81146123d3576040519150601f19603f3d011682016040523d82523d5f602084013e6123d8565b606091505b505090508061241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614a91565b60405180910390fd5b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61246261363a565b866040518363ffffffff1660e01b815260040161248092919061413a565b6020604051808303815f875af115801561249c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c09190614175565b905080612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906141ea565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660125461254561363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d4260405161258e93929190614208565b60405180910390a460019750505050506125a6613731565b505050919050565b60075481565b5f6012545f811180156125c8575060125481145b612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe90613ca6565b60405180910390fd5b6012546126166012548561148b565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff1615151461267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490613d0e565b60405180910390fd5b5f811180156126bf5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f20600501546126bb9190613d59565b8111155b6126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590613dd6565b60405180910390fd5b6127066135ed565b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff161515146127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c69061406d565b60405180910390fd5b600c5f60125481526020019081526020015f206006015485600c5f60125481526020019081526020015f20600701546128089190613e92565b1115612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090613f35565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90613f9d565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661298e57600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f8154809291906129889061408b565b91905055505b5f61299b6012548761148b565b905080600c5f60125481526020019081526020015f206004015f8282546129c29190613e92565b9250508190555085600c5f60125481526020019081526020015f206007015f8282546129ee9190613e92565b925050819055508560025f828254612a069190613e92565b925050819055505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503612aa757601154811015612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906148ac565b60405180910390fd5b5b85600d5f612ab361363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f828254612b0d9190613e92565b9250508190555080600d5f612b2061363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f828254612b7b9190613e92565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612bc861363a565b306040518363ffffffff1660e01b8152600401612be69291906148ca565b602060405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2591906148f1565b905080871115612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061498c565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cab61363a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a604051602401612ce0939291906149aa565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612d6a9190614a31565b5f604051808303815f865af19150503d805f8114612da3576040519150601f19603f3d011682016040523d82523d5f602084013e612da8565b606091505b5050905080612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614a91565b60405180910390fd5b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612e3261363a565b866040518363ffffffff1660e01b8152600401612e5092919061413a565b6020604051808303815f875af1158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e909190614175565b905080612ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec9906141ea565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601254612f1561363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d42604051612f5e93929190614208565b60405180910390a46001975050505050612f76613731565b505050919050565b600f602052805f5260405f205f915054906101000a900460ff1681565b805f81118015612fac575060125481145b612feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe290613ca6565b60405180910390fd5b612ff361356f565b600b5f8381526020019081526020015f205f9054906101000a900460ff16613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304790614af9565b60405180910390fd5b5f600b5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d426040516130a891906139cc565b60405180910390a25050565b6130bc61356f565b5f84116130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f590614774565b60405180910390fd5b5f8211613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906147dc565b60405180910390fd5b60035f8154809291906131529061408b565b91905055506040518061012001604052805f81526020015f81526020018581526020018481526020015f81526020018381526020018281526020015f81526020015f1515815250600c5f60035481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015f6101000a81548160ff0219169083151502179055509050506003547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8835f8060405161325393929190614b50565b60405180910390a250505050565b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f09190614273565b600a6132fc91906143cd565b600c5f8581526020019081526020015f20600201548361331c9190613df4565b6133269190613e62565b905092915050565b61333661356f565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60035481565b600c602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015f9054906101000a900460ff16905089565b6133f261356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345790614599565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6134ab61356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351090614bf5565b60405180910390fd5b6135228161373a565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61357761363a565b73ffffffffffffffffffffffffffffffffffffffff166135956119cd565b73ffffffffffffffffffffffffffffffffffffffff16146135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614c5d565b60405180910390fd5b565b60025f5403613631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362890614cc5565b60405180910390fd5b60025f81905550565b5f33905090565b80471015613684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367b90614d2d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516136a990614d6e565b5f6040518083038185875af1925050503d805f81146136e3576040519150601f19603f3d011682016040523d82523d5f602084013e6136e8565b606091505b505090508061372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dcc565b60405180910390fd5b505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61382a82613801565b9050919050565b61383a81613820565b8114613844575f80fd5b50565b5f8135905061385581613831565b92915050565b5f602082840312156138705761386f6137fd565b5b5f61387d84828501613847565b91505092915050565b5f8115159050919050565b61389a81613886565b82525050565b5f6020820190506138b35f830184613891565b92915050565b5f819050919050565b6138cb816138b9565b81146138d5575f80fd5b50565b5f813590506138e6816138c2565b92915050565b5f60208284031215613901576139006137fd565b5b5f61390e848285016138d8565b91505092915050565b61392081613886565b811461392a575f80fd5b50565b5f8135905061393b81613917565b92915050565b5f8060408385031215613957576139566137fd565b5b5f61396485828601613847565b92505060206139758582860161392d565b9150509250929050565b5f8060408385031215613995576139946137fd565b5b5f6139a2858286016138d8565b92505060206139b3858286016138d8565b9150509250929050565b6139c6816138b9565b82525050565b5f6020820190506139df5f8301846139bd565b92915050565b5f819050919050565b5f613a08613a036139fe84613801565b6139e5565b613801565b9050919050565b5f613a19826139ee565b9050919050565b5f613a2a82613a0f565b9050919050565b613a3a81613a20565b82525050565b5f602082019050613a535f830184613a31565b92915050565b5f8060408385031215613a6f57613a6e6137fd565b5b5f613a7c85828601613847565b9250506020613a8d858286016138d8565b9150509250929050565b5f604082019050613aaa5f8301856139bd565b613ab760208301846139bd565b9392505050565b613ac781613820565b82525050565b5f602082019050613ae05f830184613abe565b92915050565b5f805f805f60a08688031215613aff57613afe6137fd565b5b5f613b0c888289016138d8565b9550506020613b1d888289016138d8565b9450506040613b2e888289016138d8565b9350506060613b3f888289016138d8565b9250506080613b50888289016138d8565b9150509295509295909350565b5f805f8060808587031215613b7557613b746137fd565b5b5f613b82878288016138d8565b9450506020613b93878288016138d8565b9350506040613ba4878288016138d8565b9250506060613bb5878288016138d8565b91505092959194509250565b5f61012082019050613bd55f83018c6139bd565b613be2602083018b6139bd565b613bef604083018a6139bd565b613bfc60608301896139bd565b613c0960808301886139bd565b613c1660a08301876139bd565b613c2360c08301866139bd565b613c3060e08301856139bd565b613c3e610100830184613891565b9a9950505050505050505050565b5f82825260208201905092915050565b7f496e76616c69642070726573616c6520696400000000000000000000000000005f82015250565b5f613c90601283613c4c565b9150613c9b82613c5c565b602082019050919050565b5f6020820190508181035f830152613cbd81613c84565b9050919050565b7f70726553416c65206e6f742041637469766500000000000000000000000000005f82015250565b5f613cf8601283613c4c565b9150613d0382613cc4565b602082019050919050565b5f6020820190508181035f830152613d2581613cec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d63826138b9565b9150613d6e836138b9565b9250828203905081811115613d8657613d85613d2c565b5b92915050565b7f496e76616c69642073616c6520616d6f756e74000000000000000000000000005f82015250565b5f613dc0601383613c4c565b9150613dcb82613d8c565b602082019050919050565b5f6020820190508181035f830152613ded81613db4565b9050919050565b5f613dfe826138b9565b9150613e09836138b9565b9250828202613e17816138b9565b91508282048414831517613e2e57613e2d613d2c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e6c826138b9565b9150613e77836138b9565b925082613e8757613e86613e35565b5b828204905092915050565b5f613e9c826138b9565b9150613ea7836138b9565b9250828201905080821115613ebf57613ebe613d2c565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c656674485f8201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b5f613f1f602683613c4c565b9150613f2a82613ec5565b604082019050919050565b5f6020820190508181035f830152613f4c81613f13565b9050919050565b7f4163636f756e7420697320626c61636b4c6973746564000000000000000000005f82015250565b5f613f87601683613c4c565b9150613f9282613f53565b602082019050919050565b5f6020820190508181035f830152613fb481613f7b565b9050919050565b7f50726573616c65207061757365640000000000000000000000000000000000005f82015250565b5f613fef600e83613c4c565b9150613ffa82613fbb565b602082019050919050565b5f6020820190508181035f83015261401c81613fe3565b9050919050565b7f50726573616c65206973206e6f742061637469766520796574000000000000005f82015250565b5f614057601983613c4c565b915061406282614023565b602082019050919050565b5f6020820190508181035f8301526140848161404b565b9050919050565b5f614095826138b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140c7576140c6613d2c565b5b600182019050919050565b7f496e73756666696369656e7420416d6f756e74210000000000000000000000005f82015250565b5f614106601483613c4c565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b9050919050565b5f60408201905061414d5f830185613abe565b61415a60208301846139bd565b9392505050565b5f8151905061416f81613917565b92915050565b5f6020828403121561418a576141896137fd565b5b5f61419784828501614161565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6141d4601583613c4c565b91506141df826141a0565b602082019050919050565b5f6020820190508181035f830152614201816141c8565b9050919050565b5f60608201905061421b5f8301866139bd565b61422860208301856139bd565b61423560408301846139bd565b949350505050565b5f60ff82169050919050565b6142528161423d565b811461425c575f80fd5b50565b5f8151905061426d81614249565b92915050565b5f60208284031215614288576142876137fd565b5b5f6142958482850161425f565b91505092915050565b5f8160011c9050919050565b5f808291508390505b60018511156142f3578086048111156142cf576142ce613d2c565b5b60018516156142de5780820291505b80810290506142ec8561429e565b94506142b3565b94509492505050565b5f8261430b57600190506143c6565b81614318575f90506143c6565b816001811461432e576002811461433857614367565b60019150506143c6565b60ff84111561434a57614349613d2c565b5b8360020a91508482111561436157614360613d2c565b5b506143c6565b5060208310610133831016604e8410600b841016171561439c5782820a90508381111561439757614396613d2c565b5b6143c6565b6143a984848460016142aa565b925090508184048111156143c0576143bf613d2c565b5b81810290505b9392505050565b5f6143d7826138b9565b91506143e28361423d565b925061440f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142fc565b905092915050565b7f416c7265616479207061757365640000000000000000000000000000000000005f82015250565b5f61444b600e83613c4c565b915061445682614417565b602082019050919050565b5f6020820190508181035f8301526144788161443f565b9050919050565b7f496e76616c696420706172616d657465727300000000000000000000000000005f82015250565b5f6144b3601283613c4c565b91506144be8261447f565b602082019050919050565b5f6020820190508181035f8301526144e0816144a7565b9050919050565b7f50726573616c6520646f6e2774206578697374000000000000000000000000005f82015250565b5f61451b601383613c4c565b9150614526826144e7565b602082019050919050565b5f6020820190508181035f8301526145488161450f565b9050919050565b7f5a65726f20746f6b656e206164647265737300000000000000000000000000005f82015250565b5f614583601283613c4c565b915061458e8261454f565b602082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b5f69ffffffffffffffffffff82169050919050565b6145d5816145b7565b81146145df575f80fd5b50565b5f815190506145f0816145cc565b92915050565b5f819050919050565b614608816145f6565b8114614612575f80fd5b50565b5f81519050614623816145ff565b92915050565b5f81519050614637816138c2565b92915050565b5f805f805f60a08688031215614656576146556137fd565b5b5f614663888289016145e2565b955050602061467488828901614615565b945050604061468588828901614629565b935050606061469688828901614629565b92505060806146a7888289016145e2565b9150509295509295909350565b5f6146be826145f6565b91506146c9836145f6565b92508282026146d7816145f6565b91507f800000000000000000000000000000000000000000000000000000000000000084145f8412161561470e5761470d613d2c565b5b828205841483151761472357614722613d2c565b5b5092915050565b7f5a65726f207072696365000000000000000000000000000000000000000000005f82015250565b5f61475e600a83613c4c565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c000000000000000000000000005f82015250565b5f6147c6601383613c4c565b91506147d182614792565b602082019050919050565b5f6020820190508181035f8301526147f3816147ba565b9050919050565b7f5a65726f206861726361700000000000000000000000000000000000000000005f82015250565b5f61482e600b83613c4c565b9150614839826147fa565b602082019050919050565b5f6020820190508181035f83015261485b81614822565b9050919050565b7f4c657373207468616e206d696e20616d6f756e740000000000000000000000005f82015250565b5f614896601483613c4c565b91506148a182614862565b602082019050919050565b5f6020820190508181035f8301526148c38161488a565b9050919050565b5f6040820190506148dd5f830185613abe565b6148ea6020830184613abe565b9392505050565b5f60208284031215614906576149056137fd565b5b5f61491384828501614629565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e635f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f614976602183613c4c565b91506149818261491c565b604082019050919050565b5f6020820190508181035f8301526149a38161496a565b9050919050565b5f6060820190506149bd5f830186613abe565b6149ca6020830185613abe565b6149d760408301846139bd565b949350505050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f614a0b826149df565b614a1581856149e9565b9350614a258185602086016149f3565b80840191505092915050565b5f614a3c8284614a01565b915081905092915050565b7f546f6b656e207061796d656e74206661696c65640000000000000000000000005f82015250565b5f614a7b601483613c4c565b9150614a8682614a47565b602082019050919050565b5f6020820190508181035f830152614aa881614a6f565b9050919050565b7f4e6f7420706175736564000000000000000000000000000000000000000000005f82015250565b5f614ae3600a83613c4c565b9150614aee82614aaf565b602082019050919050565b5f6020820190508181035f830152614b1081614ad7565b9050919050565b5f819050919050565b5f614b3a614b35614b3084614b17565b6139e5565b6138b9565b9050919050565b614b4a81614b20565b82525050565b5f606082019050614b635f8301866139bd565b614b706020830185614b41565b614b7d6040830184614b41565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bdf602683613c4c565b9150614bea82614b85565b604082019050919050565b5f6020820190508181035f830152614c0c81614bd3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614c47602083613c4c565b9150614c5282614c13565b602082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614caf601f83613c4c565b9150614cba82614c7b565b602082019050919050565b5f6020820190508181035f830152614cdc81614ca3565b9050919050565b7f4c6f772062616c616e63650000000000000000000000000000000000000000005f82015250565b5f614d17600b83613c4c565b9150614d2282614ce3565b602082019050919050565b5f6020820190508181035f830152614d4481614d0b565b9050919050565b50565b5f614d595f836149e9565b9150614d6482614d4b565b5f82019050919050565b5f614d7882614d4e565b9150819050919050565b7f455448205061796d656e74206661696c656400000000000000000000000000005f82015250565b5f614db6601283613c4c565b9150614dc182614d82565b602082019050919050565b5f6020820190508181035f830152614de381614daa565b905091905056fea264697066735822122050d78ef7f50da6b6d97b791a1ce73d4a2711616d4362bcf934157e86f8cf9f3f64736f6c634300081a00330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000009eaebd7e73d97e78c77fab743e6ffa1b550e224c0000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x608060405260043610610264575f3560e01c80637cde403d11610143578063b36d6919116100b5578063e18e84f911610079578063e18e84f91461092f578063e6ab143414610959578063ecf5f4371461099d578063f2fde38b146109c5578063f597573f146109ed578063fb4aa0a114610a1757610264565b8063b36d69191461083f578063d01608c11461087b578063d099850a146108a3578063df5bc83b146108cb578063e0cef1b01461090757610264565b80638e15f473116101075780638e15f473146107215780639752f3cb1461074b578063a05d03fd14610773578063a7c601601461079d578063aa1c3aa5146107d9578063aeccf7351461080357610264565b80637cde403d14610653578063833cde521461067b5780638561c315146106a55780638d79e66d146106cd5780638da5cb5b146106f757610264565b80633c05eca1116101dc57806358f98585116101a057806358f985851461055d578063680f2e4f146105875780636f891f82146105af5780636fb4adff146105d9578063715018a614610601578063718a19621461061757610264565b80633c05eca11461046a5780634216d650146104a757806348bf4fcf146104e35780634a6413f71461050d578063582b57231461053557610264565b806311b5444f1161022e57806311b5444f146103585780631d5de91c146103765780631ed0c9541461039e5780632127fe04146103da57806325312e5414610416578063397643631461044057610264565b806213eb4b14610268578062dde10e146102a457806303fcd9ac146102e05780630d07cc30146103085780630d2d1f5214610330575b5f80fd5b348015610273575f80fd5b5061028e6004803603810190610289919061385b565b610a41565b60405161029b91906138a0565b60405180910390f35b3480156102af575f80fd5b506102ca60048036038101906102c591906138ec565b610a5e565b6040516102d791906138a0565b60405180910390f35b3480156102eb575f80fd5b5061030660048036038101906103019190613941565b610a7b565b005b348015610313575f80fd5b5061032e6004803603810190610329919061385b565b610adb565b005b34801561033b575f80fd5b506103566004803603810190610351919061385b565b610b26565b005b610360610b71565b60405161036d91906138a0565b60405180910390f35b348015610381575f80fd5b5061039c600480360381019061039791906138ec565b611315565b005b3480156103a9575f80fd5b506103c460048036038101906103bf919061385b565b611327565b6040516103d191906138a0565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb919061397f565b611344565b60405161040d91906139cc565b60405180910390f35b348015610421575f80fd5b5061042a611435565b6040516104379190613a40565b60405180910390f35b34801561044b575f80fd5b5061045461145a565b60405161046191906139cc565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190613a59565b611460565b60405161049e929190613a97565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c8919061397f565b61148b565b6040516104da91906139cc565b60405180910390f35b3480156104ee575f80fd5b506104f76114c1565b60405161050491906139cc565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e91906138ec565b6114c7565b005b348015610540575f80fd5b5061055b600480360381019061055691906138ec565b6115e2565b005b348015610568575f80fd5b50610571611618565b60405161057e91906139cc565b60405180910390f35b348015610592575f80fd5b506105ad60048036038101906105a89190613a59565b61161e565b005b3480156105ba575f80fd5b506105c36116c7565b6040516105d091906139cc565b60405180910390f35b3480156105e4575f80fd5b506105ff60048036038101906105fa919061385b565b6116ce565b005b34801561060c575f80fd5b50610615611787565b005b348015610622575f80fd5b5061063d6004803603810190610638919061397f565b61179a565b60405161064a91906139cc565b60405180910390f35b34801561065e575f80fd5b50610679600480360381019061067491906138ec565b6117eb565b005b348015610686575f80fd5b5061068f6118e9565b60405161069c9190613acd565b60405180910390f35b3480156106b0575f80fd5b506106cb60048036038101906106c6919061385b565b61190e565b005b3480156106d8575f80fd5b506106e16119c7565b6040516106ee91906139cc565b60405180910390f35b348015610702575f80fd5b5061070b6119cd565b6040516107189190613acd565b60405180910390f35b34801561072c575f80fd5b506107356119f5565b60405161074291906139cc565b60405180910390f35b348015610756575f80fd5b50610771600480360381019061076c9190613ae6565b611aa5565b005b34801561077e575f80fd5b50610787611bde565b60405161079491906139cc565b60405180910390f35b3480156107a8575f80fd5b506107c360048036038101906107be91906138ec565b611be4565b6040516107d091906138a0565b60405180910390f35b3480156107e4575f80fd5b506107ed6125ae565b6040516107fa91906139cc565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906138ec565b6125b4565b60405161083691906138a0565b60405180910390f35b34801561084a575f80fd5b506108656004803603810190610860919061385b565b612f7e565b60405161087291906138a0565b60405180910390f35b348015610886575f80fd5b506108a1600480360381019061089c91906138ec565b612f9b565b005b3480156108ae575f80fd5b506108c960048036038101906108c49190613b5d565b6130b4565b005b3480156108d6575f80fd5b506108f160048036038101906108ec919061397f565b613261565b6040516108fe91906139cc565b60405180910390f35b348015610912575f80fd5b5061092d60048036038101906109289190613941565b61332e565b005b34801561093a575f80fd5b5061094361338e565b60405161095091906139cc565b60405180910390f35b348015610964575f80fd5b5061097f600480360381019061097a91906138ec565b613394565b60405161099499989796959493929190613bc1565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be919061385b565b6133ea565b005b3480156109d0575f80fd5b506109eb60048036038101906109e6919061385b565b6134a3565b005b3480156109f8575f80fd5b50610a01613525565b604051610a0e9190613a40565b60405180910390f35b348015610a22575f80fd5b50610a2b61354a565b604051610a389190613acd565b60405180910390f35b6010602052805f5260405f205f915054906101000a900460ff1681565b600b602052805f5260405f205f915054906101000a900460ff1681565b610a8361356f565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610ae361356f565b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b2e61356f565b8060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6012545f81118015610b85575060125481145b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613ca6565b60405180910390fd5b601254610bd36012543461179a565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff16151514610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613d0e565b60405180910390fd5b5f81118015610c7c5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f2060050154610c789190613d59565b8111155b610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613dd6565b60405180910390fd5b610cc36135ed565b5f600554600554610cd49190613df4565b600454610cdf6119f5565b34610cea9190613df4565b610cf49190613df4565b610cfe9190613e62565b9050600c5f60125481526020019081526020015f206006015481600c5f60125481526020019081526020015f2060070154610d399190613e92565b1115610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613f35565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90613f9d565b60405180910390fd5b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff16151514610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec49061406d565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f8857600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190610f829061408b565b91905055505b5f610f956012548361148b565b90505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361103157601154811015611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061411c565b60405180910390fd5b5b80600c5f60125481526020019081526020015f206004015f8282546110569190613e92565b9250508190555081600c5f60125481526020019081526020015f206007015f8282546110829190613e92565b925050819055508160025f82825461109a9190613e92565b9250508190555081600d5f6110ad61363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f8282546111079190613e92565b9250508190555080600d5f61111a61363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f8282546111759190613e92565b925050819055506111a760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634613641565b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111ed61363a565b846040518363ffffffff1660e01b815260040161120b92919061413a565b6020604051808303815f875af1158015611227573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124b9190614175565b90508061128d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611284906141ea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166012546112af61363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368534426040516112f893929190614208565b60405180910390a46001965050505061130f613731565b50505090565b61131d61356f565b8060118190555050565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f80600c5f8581526020019081526020015f2060020154836113669190613df4565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f69190614273565b600a61140291906143cd565b61140a6119f5565b6114149190613df4565b600554826114229190613df4565b61142c9190613e62565b91505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600d602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154905082565b5f600454600c5f8581526020019081526020015f2060020154836114af9190613df4565b6114b99190613e62565b905092915050565b60045481565b805f811180156114d8575060125481145b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613ca6565b60405180910390fd5b61151f61356f565b600b5f8381526020019081526020015f205f9054906101000a900460ff161561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490614461565b60405180910390fd5b6001600b5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f426040516115d691906139cc565b60405180910390a25050565b6115ea61356f565b61161560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613641565b50565b60025481565b61162661356f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161168292919061413a565b6020604051808303815f875af115801561169e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c29190614175565b505050565b5f42905090565b6116d661356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906144c9565b60405180910390fd5b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61178f61356f565b6117985f61373a565b565b5f806005546005546117ac9190613df4565b6004546117b76119f5565b856117c29190613df4565b6117cc9190613df4565b6117d69190613e62565b90506117e2848261148b565b91505092915050565b6117f361356f565b5f600c5f8381526020019081526020015f206005015411611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184090614531565b60405180910390fd5b5f6012541461189b5742600c5f60125481526020019081526020015f20600101819055505f600c5f60125481526020019081526020015f206008015f6101000a81548160ff0219169083151502179055505b42600c5f8381526020019081526020015f205f01819055506001600c5f8381526020019081526020015f206008015f6101000a81548160ff0219169083151502179055508060128190555050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61191661356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614599565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a85919061463d565b5050509150506402540be40081611a9c91906146b4565b90508091505090565b611aad61356f565b5f8411611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690614774565b60405180910390fd5b5f8211611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b28906147dc565b60405180910390fd5b5f8111611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614844565b60405180910390fd5b83600c5f8781526020019081526020015f206002018190555082600c5f8781526020019081526020015f206003018190555081600c5f8781526020019081526020015f206005018190555080600c5f8781526020019081526020015f20600601819055505050505050565b60125481565b5f6012545f81118015611bf8575060125481145b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90613ca6565b60405180910390fd5b601254611c466012548561148b565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff16151514611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490613d0e565b60405180910390fd5b5f81118015611cef5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f2060050154611ceb9190613d59565b8111155b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613dd6565b60405180910390fd5b611d366135ed565b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff16151514611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df69061406d565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8090613f9d565b60405180910390fd5b600c5f60125481526020019081526020015f206006015485600c5f60125481526020019081526020015f2060070154611ec29190613e92565b1115611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa90613f35565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fbe57600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f815480929190611fb89061408b565b91905055505b5f611fcb6012548761148b565b905080600c5f60125481526020019081526020015f206004015f828254611ff29190613e92565b9250508190555085600c5f60125481526020019081526020015f206007015f82825461201e9190613e92565b925050819055508560025f8282546120369190613e92565b925050819055505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036120d7576011548110156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd906148ac565b60405180910390fd5b5b85600d5f6120e361363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f82825461213d9190613e92565b9250508190555080600d5f61215061363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f8282546121ab9190613e92565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6121f861363a565b306040518363ffffffff1660e01b81526004016122169291906148ca565b602060405180830381865afa158015612231573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225591906148f1565b90508087111561229a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122919061498c565b60405180910390fd5b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122db61363a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a604051602401612310939291906149aa565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161239a9190614a31565b5f604051808303815f865af19150503d805f81146123d3576040519150601f19603f3d011682016040523d82523d5f602084013e6123d8565b606091505b505090508061241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614a91565b60405180910390fd5b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61246261363a565b866040518363ffffffff1660e01b815260040161248092919061413a565b6020604051808303815f875af115801561249c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c09190614175565b905080612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906141ea565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660125461254561363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d4260405161258e93929190614208565b60405180910390a460019750505050506125a6613731565b505050919050565b60075481565b5f6012545f811180156125c8575060125481145b612607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fe90613ca6565b60405180910390fd5b6012546126166012548561148b565b60011515600c5f8481526020019081526020015f206008015f9054906101000a900460ff1615151461267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490613d0e565b60405180910390fd5b5f811180156126bf5750600c5f8381526020019081526020015f2060040154600c5f8481526020019081526020015f20600501546126bb9190613d59565b8111155b6126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590613dd6565b60405180910390fd5b6127066135ed565b600b5f60125481526020019081526020015f205f9054906101000a900460ff1615612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90614005565b60405180910390fd5b60011515600c5f60125481526020019081526020015f206008015f9054906101000a900460ff161515146127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c69061406d565b60405180910390fd5b600c5f60125481526020019081526020015f206006015485600c5f60125481526020019081526020015f20600701546128089190613e92565b1115612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090613f35565b60405180910390fd5b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90613f9d565b60405180910390fd5b60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661298e57600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f8154809291906129889061408b565b91905055505b5f61299b6012548761148b565b905080600c5f60125481526020019081526020015f206004015f8282546129c29190613e92565b9250508190555085600c5f60125481526020019081526020015f206007015f8282546129ee9190613e92565b925050819055508560025f828254612a069190613e92565b925050819055505f1515600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503612aa757601154811015612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906148ac565b60405180910390fd5b5b85600d5f612ab361363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f205f015f828254612b0d9190613e92565b9250508190555080600d5f612b2061363a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125481526020019081526020015f206001015f828254612b7b9190613e92565b925050819055505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612bc861363a565b306040518363ffffffff1660e01b8152600401612be69291906148ca565b602060405180830381865afa158015612c01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c2591906148f1565b905080871115612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061498c565b60405180910390fd5b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cab61363a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a604051602401612ce0939291906149aa565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612d6a9190614a31565b5f604051808303815f865af19150503d805f8114612da3576040519150601f19603f3d011682016040523d82523d5f602084013e612da8565b606091505b5050905080612dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de390614a91565b60405180910390fd5b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612e3261363a565b866040518363ffffffff1660e01b8152600401612e5092919061413a565b6020604051808303815f875af1158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e909190614175565b905080612ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec9906141ea565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601254612f1561363a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36878d42604051612f5e93929190614208565b60405180910390a46001975050505050612f76613731565b505050919050565b600f602052805f5260405f205f915054906101000a900460ff1681565b805f81118015612fac575060125481145b612feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe290613ca6565b60405180910390fd5b612ff361356f565b600b5f8381526020019081526020015f205f9054906101000a900460ff16613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304790614af9565b60405180910390fd5b5f600b5f8481526020019081526020015f205f6101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d426040516130a891906139cc565b60405180910390a25050565b6130bc61356f565b5f84116130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f590614774565b60405180910390fd5b5f8211613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906147dc565b60405180910390fd5b60035f8154809291906131529061408b565b91905055506040518061012001604052805f81526020015f81526020018581526020018481526020015f81526020018381526020018281526020015f81526020015f1515815250600c5f60035481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015f6101000a81548160ff0219169083151502179055509050506003547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8835f8060405161325393929190614b50565b60405180910390a250505050565b5f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f09190614273565b600a6132fc91906143cd565b600c5f8581526020019081526020015f20600201548361331c9190613df4565b6133269190613e62565b905092915050565b61333661356f565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60035481565b600c602052805f5260405f205f91509050805f015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015f9054906101000a900460ff16905089565b6133f261356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345790614599565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6134ab61356f565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351090614bf5565b60405180910390fd5b6135228161373a565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61357761363a565b73ffffffffffffffffffffffffffffffffffffffff166135956119cd565b73ffffffffffffffffffffffffffffffffffffffff16146135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614c5d565b60405180910390fd5b565b60025f5403613631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362890614cc5565b60405180910390fd5b60025f81905550565b5f33905090565b80471015613684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367b90614d2d565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516136a990614d6e565b5f6040518083038185875af1925050503d805f81146136e3576040519150601f19603f3d011682016040523d82523d5f602084013e6136e8565b606091505b505090508061372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dcc565b60405180910390fd5b505050565b60015f81905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61382a82613801565b9050919050565b61383a81613820565b8114613844575f80fd5b50565b5f8135905061385581613831565b92915050565b5f602082840312156138705761386f6137fd565b5b5f61387d84828501613847565b91505092915050565b5f8115159050919050565b61389a81613886565b82525050565b5f6020820190506138b35f830184613891565b92915050565b5f819050919050565b6138cb816138b9565b81146138d5575f80fd5b50565b5f813590506138e6816138c2565b92915050565b5f60208284031215613901576139006137fd565b5b5f61390e848285016138d8565b91505092915050565b61392081613886565b811461392a575f80fd5b50565b5f8135905061393b81613917565b92915050565b5f8060408385031215613957576139566137fd565b5b5f61396485828601613847565b92505060206139758582860161392d565b9150509250929050565b5f8060408385031215613995576139946137fd565b5b5f6139a2858286016138d8565b92505060206139b3858286016138d8565b9150509250929050565b6139c6816138b9565b82525050565b5f6020820190506139df5f8301846139bd565b92915050565b5f819050919050565b5f613a08613a036139fe84613801565b6139e5565b613801565b9050919050565b5f613a19826139ee565b9050919050565b5f613a2a82613a0f565b9050919050565b613a3a81613a20565b82525050565b5f602082019050613a535f830184613a31565b92915050565b5f8060408385031215613a6f57613a6e6137fd565b5b5f613a7c85828601613847565b9250506020613a8d858286016138d8565b9150509250929050565b5f604082019050613aaa5f8301856139bd565b613ab760208301846139bd565b9392505050565b613ac781613820565b82525050565b5f602082019050613ae05f830184613abe565b92915050565b5f805f805f60a08688031215613aff57613afe6137fd565b5b5f613b0c888289016138d8565b9550506020613b1d888289016138d8565b9450506040613b2e888289016138d8565b9350506060613b3f888289016138d8565b9250506080613b50888289016138d8565b9150509295509295909350565b5f805f8060808587031215613b7557613b746137fd565b5b5f613b82878288016138d8565b9450506020613b93878288016138d8565b9350506040613ba4878288016138d8565b9250506060613bb5878288016138d8565b91505092959194509250565b5f61012082019050613bd55f83018c6139bd565b613be2602083018b6139bd565b613bef604083018a6139bd565b613bfc60608301896139bd565b613c0960808301886139bd565b613c1660a08301876139bd565b613c2360c08301866139bd565b613c3060e08301856139bd565b613c3e610100830184613891565b9a9950505050505050505050565b5f82825260208201905092915050565b7f496e76616c69642070726573616c6520696400000000000000000000000000005f82015250565b5f613c90601283613c4c565b9150613c9b82613c5c565b602082019050919050565b5f6020820190508181035f830152613cbd81613c84565b9050919050565b7f70726553416c65206e6f742041637469766500000000000000000000000000005f82015250565b5f613cf8601283613c4c565b9150613d0382613cc4565b602082019050919050565b5f6020820190508181035f830152613d2581613cec565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d63826138b9565b9150613d6e836138b9565b9250828203905081811115613d8657613d85613d2c565b5b92915050565b7f496e76616c69642073616c6520616d6f756e74000000000000000000000000005f82015250565b5f613dc0601383613c4c565b9150613dcb82613d8c565b602082019050919050565b5f6020820190508181035f830152613ded81613db4565b9050919050565b5f613dfe826138b9565b9150613e09836138b9565b9250828202613e17816138b9565b91508282048414831517613e2e57613e2d613d2c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e6c826138b9565b9150613e77836138b9565b925082613e8757613e86613e35565b5b828204905092915050565b5f613e9c826138b9565b9150613ea7836138b9565b9250828201905080821115613ebf57613ebe613d2c565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c656674485f8201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b5f613f1f602683613c4c565b9150613f2a82613ec5565b604082019050919050565b5f6020820190508181035f830152613f4c81613f13565b9050919050565b7f4163636f756e7420697320626c61636b4c6973746564000000000000000000005f82015250565b5f613f87601683613c4c565b9150613f9282613f53565b602082019050919050565b5f6020820190508181035f830152613fb481613f7b565b9050919050565b7f50726573616c65207061757365640000000000000000000000000000000000005f82015250565b5f613fef600e83613c4c565b9150613ffa82613fbb565b602082019050919050565b5f6020820190508181035f83015261401c81613fe3565b9050919050565b7f50726573616c65206973206e6f742061637469766520796574000000000000005f82015250565b5f614057601983613c4c565b915061406282614023565b602082019050919050565b5f6020820190508181035f8301526140848161404b565b9050919050565b5f614095826138b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140c7576140c6613d2c565b5b600182019050919050565b7f496e73756666696369656e7420416d6f756e74210000000000000000000000005f82015250565b5f614106601483613c4c565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b9050919050565b5f60408201905061414d5f830185613abe565b61415a60208301846139bd565b9392505050565b5f8151905061416f81613917565b92915050565b5f6020828403121561418a576141896137fd565b5b5f61419784828501614161565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6141d4601583613c4c565b91506141df826141a0565b602082019050919050565b5f6020820190508181035f830152614201816141c8565b9050919050565b5f60608201905061421b5f8301866139bd565b61422860208301856139bd565b61423560408301846139bd565b949350505050565b5f60ff82169050919050565b6142528161423d565b811461425c575f80fd5b50565b5f8151905061426d81614249565b92915050565b5f60208284031215614288576142876137fd565b5b5f6142958482850161425f565b91505092915050565b5f8160011c9050919050565b5f808291508390505b60018511156142f3578086048111156142cf576142ce613d2c565b5b60018516156142de5780820291505b80810290506142ec8561429e565b94506142b3565b94509492505050565b5f8261430b57600190506143c6565b81614318575f90506143c6565b816001811461432e576002811461433857614367565b60019150506143c6565b60ff84111561434a57614349613d2c565b5b8360020a91508482111561436157614360613d2c565b5b506143c6565b5060208310610133831016604e8410600b841016171561439c5782820a90508381111561439757614396613d2c565b5b6143c6565b6143a984848460016142aa565b925090508184048111156143c0576143bf613d2c565b5b81810290505b9392505050565b5f6143d7826138b9565b91506143e28361423d565b925061440f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142fc565b905092915050565b7f416c7265616479207061757365640000000000000000000000000000000000005f82015250565b5f61444b600e83613c4c565b915061445682614417565b602082019050919050565b5f6020820190508181035f8301526144788161443f565b9050919050565b7f496e76616c696420706172616d657465727300000000000000000000000000005f82015250565b5f6144b3601283613c4c565b91506144be8261447f565b602082019050919050565b5f6020820190508181035f8301526144e0816144a7565b9050919050565b7f50726573616c6520646f6e2774206578697374000000000000000000000000005f82015250565b5f61451b601383613c4c565b9150614526826144e7565b602082019050919050565b5f6020820190508181035f8301526145488161450f565b9050919050565b7f5a65726f20746f6b656e206164647265737300000000000000000000000000005f82015250565b5f614583601283613c4c565b915061458e8261454f565b602082019050919050565b5f6020820190508181035f8301526145b081614577565b9050919050565b5f69ffffffffffffffffffff82169050919050565b6145d5816145b7565b81146145df575f80fd5b50565b5f815190506145f0816145cc565b92915050565b5f819050919050565b614608816145f6565b8114614612575f80fd5b50565b5f81519050614623816145ff565b92915050565b5f81519050614637816138c2565b92915050565b5f805f805f60a08688031215614656576146556137fd565b5b5f614663888289016145e2565b955050602061467488828901614615565b945050604061468588828901614629565b935050606061469688828901614629565b92505060806146a7888289016145e2565b9150509295509295909350565b5f6146be826145f6565b91506146c9836145f6565b92508282026146d7816145f6565b91507f800000000000000000000000000000000000000000000000000000000000000084145f8412161561470e5761470d613d2c565b5b828205841483151761472357614722613d2c565b5b5092915050565b7f5a65726f207072696365000000000000000000000000000000000000000000005f82015250565b5f61475e600a83613c4c565b91506147698261472a565b602082019050919050565b5f6020820190508181035f83015261478b81614752565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c000000000000000000000000005f82015250565b5f6147c6601383613c4c565b91506147d182614792565b602082019050919050565b5f6020820190508181035f8301526147f3816147ba565b9050919050565b7f5a65726f206861726361700000000000000000000000000000000000000000005f82015250565b5f61482e600b83613c4c565b9150614839826147fa565b602082019050919050565b5f6020820190508181035f83015261485b81614822565b9050919050565b7f4c657373207468616e206d696e20616d6f756e740000000000000000000000005f82015250565b5f614896601483613c4c565b91506148a182614862565b602082019050919050565b5f6020820190508181035f8301526148c38161488a565b9050919050565b5f6040820190506148dd5f830185613abe565b6148ea6020830184613abe565b9392505050565b5f60208284031215614906576149056137fd565b5b5f61491384828501614629565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e635f8201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b5f614976602183613c4c565b91506149818261491c565b604082019050919050565b5f6020820190508181035f8301526149a38161496a565b9050919050565b5f6060820190506149bd5f830186613abe565b6149ca6020830185613abe565b6149d760408301846139bd565b949350505050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f614a0b826149df565b614a1581856149e9565b9350614a258185602086016149f3565b80840191505092915050565b5f614a3c8284614a01565b915081905092915050565b7f546f6b656e207061796d656e74206661696c65640000000000000000000000005f82015250565b5f614a7b601483613c4c565b9150614a8682614a47565b602082019050919050565b5f6020820190508181035f830152614aa881614a6f565b9050919050565b7f4e6f7420706175736564000000000000000000000000000000000000000000005f82015250565b5f614ae3600a83613c4c565b9150614aee82614aaf565b602082019050919050565b5f6020820190508181035f830152614b1081614ad7565b9050919050565b5f819050919050565b5f614b3a614b35614b3084614b17565b6139e5565b6138b9565b9050919050565b614b4a81614b20565b82525050565b5f606082019050614b635f8301866139bd565b614b706020830185614b41565b614b7d6040830184614b41565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614bdf602683613c4c565b9150614bea82614b85565b604082019050919050565b5f6020820190508181035f830152614c0c81614bd3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614c47602083613c4c565b9150614c5282614c13565b602082019050919050565b5f6020820190508181035f830152614c7481614c3b565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614caf601f83613c4c565b9150614cba82614c7b565b602082019050919050565b5f6020820190508181035f830152614cdc81614ca3565b9050919050565b7f4c6f772062616c616e63650000000000000000000000000000000000000000005f82015250565b5f614d17600b83613c4c565b9150614d2282614ce3565b602082019050919050565b5f6020820190508181035f830152614d4481614d0b565b9050919050565b50565b5f614d595f836149e9565b9150614d6482614d4b565b5f82019050919050565b5f614d7882614d4e565b9150819050919050565b7f455448205061796d656e74206661696c656400000000000000000000000000005f82015250565b5f614db6601283613c4c565b9150614dc182614d82565b602082019050919050565b5f6020820190508181035f830152614de381614daa565b905091905056fea264697066735822122050d78ef7f50da6b6d97b791a1ce73d4a2711616d4362bcf934157e86f8cf9f3f64736f6c634300081a0033

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

0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000009eaebd7e73d97e78c77fab743e6ffa1b550e224c0000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _oracle (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : _usdt (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [2] : _usdc (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [3] : _SaleToken (address): 0x9eAeBd7E73D97E78c77fAB743e6FFA1b550e224c
Arg [4] : _MinTokenTobuy (uint256): 1

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 0000000000000000000000009eaebd7e73d97e78c77fab743e6ffa1b550e224c
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed Bytecode Sourcemap

9080:14592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10141:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9866:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14902:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23442:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23226:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19695:1865;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23329:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10035:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21568:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9776:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9242:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9964:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;22477:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9205:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13764:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23093:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9138:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22946:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23573:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13186:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2488:103;;;;;;;;;;;;;:::i;:::-;;22168:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12224:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10257:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13360:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10189:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2253:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14236:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12638:540;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10224:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15190:2229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9312:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17427:2260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10091:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13984:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11599:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21908:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15068:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9174:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9911:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;13562:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2599:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9734:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9278:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10141:39;;;;;;;;;;;;;;;;;;;;;;:::o;9866:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;14902:158::-;2212:13;:11;:13::i;:::-;15045:7:::1;15018:17;:24;15036:5;15018:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;14902:158:::0;;:::o;23442:123::-;2212:13;:11;:13::i;:::-;23549:7:::1;23516:19;;:41;;;;;;;;;;;;;;;;;;23442:123:::0;:::o;23226:95::-;2212:13;:11;:13::i;:::-;23307:6:::1;23295:9;;:18;;;;;;;;;;;;;;;;;;23226:95:::0;:::o;19695:1865::-;19903:4;19776:11;;14512:1;14506:3;:7;:29;;;;;14524:11;;14517:3;:18;14506:29;14498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19813:11:::1;;19826:35;19838:11;;19851:9;19826:11;:35::i;:::-;14681:4;14658:27;;:7;:12;14666:3;14658:12;;;;;;;;;;;:19;;;;;;;;;;;;:27;;;14650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14750:1;14741:6;:10;:86;;;;;14810:7;:12;14818:3;14810:12;;;;;;;;;;;:17;;;14782:7;:12;14790:3;14782:12;;;;;;;;;;;:25;;;:45;;;;:::i;:::-;14772:6;:55;;14741:86;14719:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;1342:21:::2;:19;:21::i;:::-;19925:17:::3;20027:14;;20010;;:31;;;;:::i;:::-;19977:15;;19958:16;:14;:16::i;:::-;19946:9;:28;;;;:::i;:::-;:46;;;;:::i;:::-;19945:97;;;;:::i;:::-;19925:117;;20141:7;:20;20149:11;;20141:20;;;;;;;;;;;:32;;;20111:9;20075:7;:20;20083:11;;20075:20;;;;;;;;;;;:33;;;:45;;;;:::i;:::-;:98;;20053:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;20259:11;:23;20271:10;20259:23;;;;;;;;;;;;;;;;;;;;;;;;;20258:24;20250:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20329:6;:19;20336:11;;20329:19;;;;;;;;;;;;;;;;;;;;;20328:20;20320:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20431:4;20400:35;;:7;:20;20408:11;;20400:20;;;;;;;;;;;:27;;;;;;;;;;;;:35;;;20378:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20504:7;:19;20512:10;20504:19;;;;;;;;;;;;;;;;;;;;;;;;;20499:108;;20562:4;20540:7;:19;20548:10;20540:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20581:12;;:14;;;;;;;;;:::i;:::-;;;;;;20499:108;20619:14;20636:35;20648:11;;20661:9;20636:11;:35::i;:::-;20619:52;;20719:5;20686:38;;:17;:29;20704:10;20686:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;::::0;20682:127:::3;;20759:13;;20749:6;:23;;20741:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20682:127;20848:6;20819:7;:20;20827:11;;20819:20;;;;;;;;;;;:25;;;:35;;;;;;;:::i;:::-;;;;;;;;20902:9;20865:7;:20;20873:11;;20865:20;;;;;;;;;;;:33;;;:46;;;;;;;:::i;:::-;;;;;;;;20940:9;20922:14;;:27;;;;;;;:::i;:::-;;;;;;;;21014:9;20960:8;:22;20969:12;:10;:12::i;:::-;20960:22;;;;;;;;;;;;;;;:35;20983:11;;20960:35;;;;;;;;;;;:50;;;:63;;;;;;;:::i;:::-;;;;;;;;21093:6;21034:8;:22;21043:12;:10;:12::i;:::-;21034:22;;;;;;;;;;;;;;;:35;21057:11;;21034:35;;;;;;;;;;;:55;;;:65;;;;;;;:::i;:::-;;;;;;;;21120:43;21138:12;;;;;;;;;;;21153:9;21120;:43::i;:::-;21174:11;21195:9;;;;;;;;;;;21188:26;;;21233:12;:10;:12::i;:::-;21264:6;21188:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21174:111;;21304:6;21296:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;21442:1;21354:176;;21408:11;;21381:12;:10;:12::i;:::-;21354:176;;;21459:6;21480:9;21504:15;21354:176;;;;;;;;:::i;:::-;;;;;;;;21548:4;21541:11;;;;;1386:20:::2;:18;:20::i;:::-;14569:1:::1;;19695:1865:::0;;:::o;23329:105::-;2212:13;:11;:13::i;:::-;23419:7:::1;23403:13;:23;;;;23329:105:::0;:::o;10035:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;21568:332::-;21669:17;21704:16;21733:7;:12;21741:3;21733:12;;;;;;;;;;;:18;;;21724:6;:27;;;;:::i;:::-;21704:48;;21870:9;;;;;;;;;;;21855:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21851:2;:40;;;;:::i;:::-;21832:16;:14;:16::i;:::-;:59;;;;:::i;:::-;21800:14;;21789:8;:25;;;;:::i;:::-;21788:104;;;;:::i;:::-;21763:129;;21693:207;21568:332;;;;:::o;9776:35::-;;;;;;;;;;;;;:::o;9242:29::-;;;;:::o;9964:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22477:196::-;22575:15;22650;;22628:7;:12;22636:3;22628:12;;;;;;;;;;;:18;;;22619:6;:27;;;;:::i;:::-;22618:47;;;;:::i;:::-;22608:57;;22477:196;;;;:::o;9205:30::-;;;;:::o;13764:212::-;13823:3;14512:1;14506:3;:7;:29;;;;;14524:11;;14517:3;:18;14506:29;14498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2212:13:::1;:11;:13::i;:::-;13858:6:::2;:11;13865:3;13858:11;;;;;;;;;;;;;;;;;;;;;13857:12;13849:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;13913:4;13899:6;:11;13906:3;13899:11;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;13947:3;13933:35;13952:15;13933:35;;;;;;:::i;:::-;;;;;;;;13764:212:::0;;:::o;23093:125::-;2212:13;:11;:13::i;:::-;23170:40:::1;23188:12;;;;;;;;;;;23203:6;23170:9;:40::i;:::-;23093:125:::0;:::o;9138:29::-;;;;:::o;22946:139::-;2212:13;:11;:13::i;:::-;23039:6:::1;23032:23;;;23056:12;;;;;;;;;;;23070:6;23032:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22946:139:::0;;:::o;23573:96::-;23619:7;23646:15;23639:22;;23573:96;:::o;13186:166::-;2212:13;:11;:13::i;:::-;13286:1:::1;13267:21;;:7;:21;;::::0;13259:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13337:7;13322:12;;:22;;;;;;;;;;;;;;;;;;13186:166:::0;:::o;2488:103::-;2212:13;:11;:13::i;:::-;2553:30:::1;2580:1;2553:18;:30::i;:::-;2488:103::o:0;22168:301::-;22266:15;22299:17;22398:14;;22381;;:31;;;;:::i;:::-;22348:15;;22329:16;:14;:16::i;:::-;22320:6;:25;;;;:::i;:::-;:43;;;;:::i;:::-;22319:94;;;;:::i;:::-;22299:114;;22434:27;22446:3;22451:9;22434:11;:27::i;:::-;22424:37;;22288:181;22168:301;;;;:::o;12224:406::-;2212:13;:11;:13::i;:::-;12326:1:::1;12298:7;:12;12306:3;12298:12;;;;;;;;;;;:25;;;:29;12290:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12381:1;12366:11;;:16;12362:145;;12430:15;12399:7;:20;12407:11;;12399:20;;;;;;;;;;;:28;;:46;;;;12490:5;12460:7;:20;12468:11;;12460:20;;;;;;;;;;;:27;;;:35;;;;;;;;;;;;;;;;;;12362:145;12542:15;12517:7;:12;12525:3;12517:12;;;;;;;;;;;:22;;:40;;;;12590:4;12568:7;:12;12576:3;12568:12;;;;;;;;;;;:19;;;:26;;;;;;;;;;;;;;;;;;12619:3;12605:11;:17;;;;12224:406:::0;:::o;10257:24::-;;;;;;;;;;;;;:::o;13360:194::-;2212:13;:11;:13::i;:::-;13467:1:::1;13444:25;;:11;:25;;::::0;13436:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13534:11;13503:13;;:43;;;;;;;;;;;;;;;;;;13360:194:::0;:::o;10189:28::-;;;;:::o;2253:87::-;2299:7;2326:6;;;;;;;;;;;2319:13;;2253:87;:::o;14236:206::-;14283:7;14306:12;14328:19;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14303:62;;;;;;14394:6;14385:5;:16;;;;:::i;:::-;14376:26;;14428:5;14413:21;;;14236:206;:::o;12638:540::-;2212:13;:11;:13::i;:::-;12855:1:::1;12846:6;:10;12838:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;12906:1;12890:13;:17;12882:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;12961:1;12950:8;:12;12942:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;13010:6;12989:7;:12;12997:3;12989:12;;;;;;;;;;;:18;;:27;;;;13057:15;13027:7;:12;13035:3;13027:12;;;;;;;;;;;:27;;:45;;;;13111:13;13083:7;:12;13091:3;13083:12;;;;;;;;;;;:25;;:41;;;;13162:8;13135:7;:12;13143:3;13135:12;;;;;;;;;;;:24;;:35;;;;12638:540:::0;;;;;:::o;10224:26::-;;;;:::o;15190:2229::-;15399:4;15272:11;;14512:1;14506:3;:7;:29;;;;;14524:11;;14517:3;:18;14506:29;14498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15309:11:::1;;15322:35;15334:11;;15347:9;15322:11;:35::i;:::-;14681:4;14658:27;;:7;:12;14666:3;14658:12;;;;;;;;;;;:19;;;;;;;;;;;;:27;;;14650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14750:1;14741:6;:10;:86;;;;;14810:7;:12;14818:3;14810:12;;;;;;;;;;;:17;;;14782:7;:12;14790:3;14782:12;;;;;;;;;;;:25;;;:45;;;;:::i;:::-;14772:6;:55;;14741:86;14719:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;1342:21:::2;:19;:21::i;:::-;15430:6:::3;:19;15437:11;;15430:19;;;;;;;;;;;;;;;;;;;;;15429:20;15421:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;15532:4;15501:35;;:7;:20;15509:11;;15501:20;;;;;;;;;;;:27;;;;;;;;;;;;:35;;;15479:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:11;:23;15621:10;15609:23;;;;;;;;;;;;;;;;;;;;;;;;;15608:24;15600:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;15758:7;:20;15766:11;;15758:20;;;;;;;;;;;:32;;;15728:9;15692:7;:20;15700:11;;15692:20;;;;;;;;;;;:33;;;:45;;;;:::i;:::-;:98;;15670:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;15872:7;:19;15880:10;15872:19;;;;;;;;;;;;;;;;;;;;;;;;;15867:108;;15930:4;15908:7;:19;15916:10;15908:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;15949:12;;:14;;;;;;;;;:::i;:::-;;;;;;15867:108;15985:14;16002:35;16014:11;;16027:9;16002:11;:35::i;:::-;15985:52;;16077:6;16048:7;:20;16056:11;;16048:20;;;;;;;;;;;:25;;;:35;;;;;;;:::i;:::-;;;;;;;;16131:9;16094:7;:20;16102:11;;16094:20;;;;;;;;;;;:33;;;:46;;;;;;;:::i;:::-;;;;;;;;16169:9;16151:14;;:27;;;;;;;:::i;:::-;;;;;;;;16228:5;16195:38;;:17;:29;16213:10;16195:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;::::0;16191:127:::3;;16268:13;;16258:6;:23;;16250:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16191:127;16382:9;16328:8;:22;16337:12;:10;:12::i;:::-;16328:22;;;;;;;;;;;;;;;:35;16351:11;;16328:35;;;;;;;;;;;:50;;;:63;;;;;;;:::i;:::-;;;;;;;;16461:6;16402:8;:22;16411:12;:10;:12::i;:::-;16402:22;;;;;;;;;;;;;;;:35;16425:11;;16402:35;;;;;;;;;;;:55;;;:65;;;;;;;:::i;:::-;;;;;;;;16488:20;16511:13;;;;;;;;;;;:23;;;16549:12;:10;:12::i;:::-;16584:4;16511:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16488:112;;16632:12;16619:9;:25;;16611:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16694:12;16720:13;;;;;;;;;;;16712:27;;16854:12;:10;:12::i;:::-;16885;;;;;;;;;;;16916:9;16754:186;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16712:239;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:258;;;16970:7;16962:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;17013:11;17034:9;;;;;;;;;;;17027:26;;;17072:12;:10;:12::i;:::-;17103:6;17027:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17013:111;;17143:6;17135:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;17289:13;;;;;;;;;;;17201:188;;17255:11;;17228:12;:10;:12::i;:::-;17201:188;;;17318:6;17339:9;17363:15;17201:188;;;;;;;;:::i;:::-;;;;;;;;17407:4;17400:11;;;;;;1386:20:::2;:18;:20::i;:::-;14569:1:::1;;15190:2229:::0;;;;:::o;9312:27::-;;;;:::o;17427:2260::-;17638:4;17510:11;;14512:1;14506:3;:7;:29;;;;;14524:11;;14517:3;:18;14506:29;14498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17547:11:::1;;17560:36;17572:11;;17585:10;17560:11;:36::i;:::-;14681:4;14658:27;;:7;:12;14666:3;14658:12;;;;;;;;;;;:19;;;;;;;;;;;;:27;;;14650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14750:1;14741:6;:10;:86;;;;;14810:7;:12;14818:3;14810:12;;;;;;;;;;;:17;;;14782:7;:12;14790:3;14782:12;;;;;;;;;;;:25;;;:45;;;;:::i;:::-;14772:6;:55;;14741:86;14719:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;1342:21:::2;:19;:21::i;:::-;17669:6:::3;:19;17676:11;;17669:19;;;;;;;;;;;;;;;;;;;;;17668:20;17660:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;17771:4;17740:35;;:7;:20;17748:11;;17740:20;;;;;;;;;;;:27;;;;;;;;;;;;:35;;;17718:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;17928:7;:20;17936:11;;17928:20;;;;;;;;;;;:32;;;17897:10;17861:7;:20;17869:11;;17861:20;;;;;;;;;;;:33;;;:46;;;;:::i;:::-;:99;;17839:187;;;;;;;;;;;;:::i;:::-;;;;;;;;;18046:11;:23;18058:10;18046:23;;;;;;;;;;;;;;;;;;;;;;;;;18045:24;18037:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18112:7;:19;18120:10;18112:19;;;;;;;;;;;;;;;;;;;;;;;;;18107:108;;18170:4;18148:7;:19;18156:10;18148:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;18189:12;;:14;;;;;;;;;:::i;:::-;;;;;;18107:108;18225:14;18242:36;18254:11;;18267:10;18242:11;:36::i;:::-;18225:53;;18318:6;18289:7;:20;18297:11;;18289:20;;;;;;;;;;;:25;;;:35;;;;;;;:::i;:::-;;;;;;;;18372:10;18335:7;:20;18343:11;;18335:20;;;;;;;;;;;:33;;;:47;;;;;;;:::i;:::-;;;;;;;;18411:10;18393:14;;:28;;;;;;;:::i;:::-;;;;;;;;18471:5;18438:38;;:17;:29;18456:10;18438:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;::::0;18434:127:::3;;18511:13;;18501:6;:23;;18493:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18434:127;18625:10;18571:8;:22;18580:12;:10;:12::i;:::-;18571:22;;;;;;;;;;;;;;;:35;18594:11;;18571:35;;;;;;;;;;;:50;;;:64;;;;;;;:::i;:::-;;;;;;;;18705:6;18646:8;:22;18655:12;:10;:12::i;:::-;18646:22;;;;;;;;;;;;;;;:35;18669:11;;18646:35;;;;;;;;;;;:55;;;:65;;;;;;;:::i;:::-;;;;;;;;18724:20;18747:13;;;;;;;;;;;:23;;;18785:12;:10;:12::i;:::-;18820:4;18747:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18724:112;;18883:12;18869:10;:26;;18847:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18968:12;18994:13;;;;;;;;;;;18986:27;;19128:12;:10;:12::i;:::-;19159;;;;;;;;;;;19190:10;19028:187;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18986:240;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18967:259;;;19245:7;19237:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;19288:11;19309:9;;;;;;;;;;;19302:26;;;19347:12;:10;:12::i;:::-;19378:6;19302:97;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19288:111;;19418:6;19410:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;19556:13;;;;;;;;;;;19468:189;;19522:11;;19495:12;:10;:12::i;:::-;19468:189;;;19585:6;19606:10;19631:15;19468:189;;;;;;;;:::i;:::-;;;;;;;;19675:4;19668:11;;;;;;1386:20:::2;:18;:20::i;:::-;14569:1:::1;;17427:2260:::0;;;;:::o;10091:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;13984:244::-;14063:3;14512:1;14506:3;:7;:29;;;;;14524:11;;14517:3;:18;14506:29;14498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2212:13:::1;:11;:13::i;:::-;14111:6:::2;:11;14118:3;14111:11;;;;;;;;;;;;;;;;;;;;;14103:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;14162:5;14148:6;:11;14155:3;14148:11;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;14199:3;14183:37;14204:15;14183:37;;;;;;:::i;:::-;;;;;;;;13984:244:::0;;:::o;11599:617::-;2212:13;:11;:13::i;:::-;11798:1:::1;11789:6;:10;11781:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;11849:1;11833:13;:17;11825:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;11887:9;;:11;;;;;;;;;:::i;:::-;;;;;;11932:212;;;;;;;;11958:1;11932:212;;;;11974:1;11932:212;;;;11990:6;11932:212;;;;12011:15;11932:212;;;;12041:1;11932:212;;;;12057:13;11932:212;;;;12085:12;11932:212;;;;12112:1;11932:212;;;;12128:5;11932:212;;;;::::0;11911:7:::1;:18;11919:9;;11911:18;;;;;;;;;;;:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12177:9;;12162:46;12188:13;12203:1;12206::::0;12162:46:::1;;;;;;;;:::i;:::-;;;;;;;;11599:617:::0;;;;:::o;21908:252::-;22009:16;22131:9;;;;;;;;;;;22116:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22112:2;:40;;;;:::i;:::-;22077:7;:12;22085:3;22077:12;;;;;;;;;;;:18;;;22068:6;:27;;;;:::i;:::-;22067:85;;;;:::i;:::-;22043:109;;21908:252;;;;:::o;15068:114::-;2212:13;:11;:13::i;:::-;15168:6:::1;15147:11;:18;15159:5;15147:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;15068:114:::0;;:::o;9174:24::-;;;;:::o;9911:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13562:194::-;2212:13;:11;:13::i;:::-;13669:1:::1;13646:25;;:11;:25;;::::0;13638:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13736:11;13705:13;;:43;;;;;;;;;;;;;;;;;;13562:194:::0;:::o;2599:238::-;2212:13;:11;:13::i;:::-;2722:1:::1;2702:22;;:8;:22;;::::0;2680:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2801:28;2820:8;2801:18;:28::i;:::-;2599:238:::0;:::o;9734:35::-;;;;;;;;;;;;;:::o;9278:27::-;;;;;;;;;;;;;:::o;2348:132::-;2423:12;:10;:12::i;:::-;2412:23;;:7;:5;:7::i;:::-;:23;;;2404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2348:132::o;1422:152::-;1202:1;1480:7;;:19;1472:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1202:1;1548:7;:18;;;;1422:152::o;1701:98::-;1754:7;1781:10;1774:17;;1701:98;:::o;22681:257::-;22796:6;22771:21;:31;;22763:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;22830:12;22848:9;:14;;22870:6;22848:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22829:52;;;22900:7;22892:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22752:186;22681:257;;:::o;1582:79::-;1158:1;1631:7;:22;;;;1582:79::o;2845:191::-;2919:16;2938:6;;;;;;;;;;;2919:25;;2964:8;2955:6;;:17;;;;;;;;;;;;;;;;;;3019:8;2988:40;;3009:8;2988:40;;;;;;;;;;;;2908:128;2845:191;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:77::-;1640:7;1669:5;1658:16;;1603:77;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:329::-;2018:6;2067:2;2055:9;2046:7;2042:23;2038:32;2035:119;;;2073:79;;:::i;:::-;2035:119;2193:1;2218:53;2263:7;2254:6;2243:9;2239:22;2218:53;:::i;:::-;2208:63;;2164:117;1959:329;;;;:::o;2294:116::-;2364:21;2379:5;2364:21;:::i;:::-;2357:5;2354:32;2344:60;;2400:1;2397;2390:12;2344:60;2294:116;:::o;2416:133::-;2459:5;2497:6;2484:20;2475:29;;2513:30;2537:5;2513:30;:::i;:::-;2416:133;;;;:::o;2555:468::-;2620:6;2628;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2930:2;2956:50;2998:7;2989:6;2978:9;2974:22;2956:50;:::i;:::-;2946:60;;2901:115;2555:468;;;;;:::o;3029:474::-;3097:6;3105;3154:2;3142:9;3133:7;3129:23;3125:32;3122:119;;;3160:79;;:::i;:::-;3122:119;3280:1;3305:53;3350:7;3341:6;3330:9;3326:22;3305:53;:::i;:::-;3295:63;;3251:117;3407:2;3433:53;3478:7;3469:6;3458:9;3454:22;3433:53;:::i;:::-;3423:63;;3378:118;3029:474;;;;;:::o;3509:118::-;3596:24;3614:5;3596:24;:::i;:::-;3591:3;3584:37;3509:118;;:::o;3633:222::-;3726:4;3764:2;3753:9;3749:18;3741:26;;3777:71;3845:1;3834:9;3830:17;3821:6;3777:71;:::i;:::-;3633:222;;;;:::o;3861:60::-;3889:3;3910:5;3903:12;;3861:60;;;:::o;3927:142::-;3977:9;4010:53;4028:34;4037:24;4055:5;4037:24;:::i;:::-;4028:34;:::i;:::-;4010:53;:::i;:::-;3997:66;;3927:142;;;:::o;4075:126::-;4125:9;4158:37;4189:5;4158:37;:::i;:::-;4145:50;;4075:126;;;:::o;4207:148::-;4279:9;4312:37;4343:5;4312:37;:::i;:::-;4299:50;;4207:148;;;:::o;4361:175::-;4470:59;4523:5;4470:59;:::i;:::-;4465:3;4458:72;4361:175;;:::o;4542:266::-;4657:4;4695:2;4684:9;4680:18;4672:26;;4708:93;4798:1;4787:9;4783:17;4774:6;4708:93;:::i;:::-;4542:266;;;;:::o;4814:474::-;4882:6;4890;4939:2;4927:9;4918:7;4914:23;4910:32;4907:119;;;4945:79;;:::i;:::-;4907:119;5065:1;5090:53;5135:7;5126:6;5115:9;5111:22;5090:53;:::i;:::-;5080:63;;5036:117;5192:2;5218:53;5263:7;5254:6;5243:9;5239:22;5218:53;:::i;:::-;5208:63;;5163:118;4814:474;;;;;:::o;5294:332::-;5415:4;5453:2;5442:9;5438:18;5430:26;;5466:71;5534:1;5523:9;5519:17;5510:6;5466:71;:::i;:::-;5547:72;5615:2;5604:9;5600:18;5591:6;5547:72;:::i;:::-;5294:332;;;;;:::o;5632:118::-;5719:24;5737:5;5719:24;:::i;:::-;5714:3;5707:37;5632:118;;:::o;5756:222::-;5849:4;5887:2;5876:9;5872:18;5864:26;;5900:71;5968:1;5957:9;5953:17;5944:6;5900:71;:::i;:::-;5756:222;;;;:::o;5984:911::-;6079:6;6087;6095;6103;6111;6160:3;6148:9;6139:7;6135:23;6131:33;6128:120;;;6167:79;;:::i;:::-;6128:120;6287:1;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;:::i;:::-;6302:63;;6258:117;6414:2;6440:53;6485:7;6476:6;6465:9;6461:22;6440:53;:::i;:::-;6430:63;;6385:118;6542:2;6568:53;6613:7;6604:6;6593:9;6589:22;6568:53;:::i;:::-;6558:63;;6513:118;6670:2;6696:53;6741:7;6732:6;6721:9;6717:22;6696:53;:::i;:::-;6686:63;;6641:118;6798:3;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6769:119;5984:911;;;;;;;;:::o;6901:765::-;6987:6;6995;7003;7011;7060:3;7048:9;7039:7;7035:23;7031:33;7028:120;;;7067:79;;:::i;:::-;7028:120;7187:1;7212:53;7257:7;7248:6;7237:9;7233:22;7212:53;:::i;:::-;7202:63;;7158:117;7314:2;7340:53;7385:7;7376:6;7365:9;7361:22;7340:53;:::i;:::-;7330:63;;7285:118;7442:2;7468:53;7513:7;7504:6;7493:9;7489:22;7468:53;:::i;:::-;7458:63;;7413:118;7570:2;7596:53;7641:7;7632:6;7621:9;7617:22;7596:53;:::i;:::-;7586:63;;7541:118;6901:765;;;;;;;:::o;7672:1096::-;7983:4;8021:3;8010:9;8006:19;7998:27;;8035:71;8103:1;8092:9;8088:17;8079:6;8035:71;:::i;:::-;8116:72;8184:2;8173:9;8169:18;8160:6;8116:72;:::i;:::-;8198;8266:2;8255:9;8251:18;8242:6;8198:72;:::i;:::-;8280;8348:2;8337:9;8333:18;8324:6;8280:72;:::i;:::-;8362:73;8430:3;8419:9;8415:19;8406:6;8362:73;:::i;:::-;8445;8513:3;8502:9;8498:19;8489:6;8445:73;:::i;:::-;8528;8596:3;8585:9;8581:19;8572:6;8528:73;:::i;:::-;8611;8679:3;8668:9;8664:19;8655:6;8611:73;:::i;:::-;8694:67;8756:3;8745:9;8741:19;8732:6;8694:67;:::i;:::-;7672:1096;;;;;;;;;;;;:::o;8774:169::-;8858:11;8892:6;8887:3;8880:19;8932:4;8927:3;8923:14;8908:29;;8774:169;;;;:::o;8949:168::-;9089:20;9085:1;9077:6;9073:14;9066:44;8949:168;:::o;9123:366::-;9265:3;9286:67;9350:2;9345:3;9286:67;:::i;:::-;9279:74;;9362:93;9451:3;9362:93;:::i;:::-;9480:2;9475:3;9471:12;9464:19;;9123:366;;;:::o;9495:419::-;9661:4;9699:2;9688:9;9684:18;9676:26;;9748:9;9742:4;9738:20;9734:1;9723:9;9719:17;9712:47;9776:131;9902:4;9776:131;:::i;:::-;9768:139;;9495:419;;;:::o;9920:168::-;10060:20;10056:1;10048:6;10044:14;10037:44;9920:168;:::o;10094:366::-;10236:3;10257:67;10321:2;10316:3;10257:67;:::i;:::-;10250:74;;10333:93;10422:3;10333:93;:::i;:::-;10451:2;10446:3;10442:12;10435:19;;10094:366;;;:::o;10466:419::-;10632:4;10670:2;10659:9;10655:18;10647:26;;10719:9;10713:4;10709:20;10705:1;10694:9;10690:17;10683:47;10747:131;10873:4;10747:131;:::i;:::-;10739:139;;10466:419;;;:::o;10891:180::-;10939:77;10936:1;10929:88;11036:4;11033:1;11026:15;11060:4;11057:1;11050:15;11077:194;11117:4;11137:20;11155:1;11137:20;:::i;:::-;11132:25;;11171:20;11189:1;11171:20;:::i;:::-;11166:25;;11215:1;11212;11208:9;11200:17;;11239:1;11233:4;11230:11;11227:37;;;11244:18;;:::i;:::-;11227:37;11077:194;;;;:::o;11277:169::-;11417:21;11413:1;11405:6;11401:14;11394:45;11277:169;:::o;11452:366::-;11594:3;11615:67;11679:2;11674:3;11615:67;:::i;:::-;11608:74;;11691:93;11780:3;11691:93;:::i;:::-;11809:2;11804:3;11800:12;11793:19;;11452:366;;;:::o;11824:419::-;11990:4;12028:2;12017:9;12013:18;12005:26;;12077:9;12071:4;12067:20;12063:1;12052:9;12048:17;12041:47;12105:131;12231:4;12105:131;:::i;:::-;12097:139;;11824:419;;;:::o;12249:410::-;12289:7;12312:20;12330:1;12312:20;:::i;:::-;12307:25;;12346:20;12364:1;12346:20;:::i;:::-;12341:25;;12401:1;12398;12394:9;12423:30;12441:11;12423:30;:::i;:::-;12412:41;;12602:1;12593:7;12589:15;12586:1;12583:22;12563:1;12556:9;12536:83;12513:139;;12632:18;;:::i;:::-;12513:139;12297:362;12249:410;;;;:::o;12665:180::-;12713:77;12710:1;12703:88;12810:4;12807:1;12800:15;12834:4;12831:1;12824:15;12851:185;12891:1;12908:20;12926:1;12908:20;:::i;:::-;12903:25;;12942:20;12960:1;12942:20;:::i;:::-;12937:25;;12981:1;12971:35;;12986:18;;:::i;:::-;12971:35;13028:1;13025;13021:9;13016:14;;12851:185;;;;:::o;13042:191::-;13082:3;13101:20;13119:1;13101:20;:::i;:::-;13096:25;;13135:20;13153:1;13135:20;:::i;:::-;13130:25;;13178:1;13175;13171:9;13164:16;;13199:3;13196:1;13193:10;13190:36;;;13206:18;;:::i;:::-;13190:36;13042:191;;;;:::o;13239:225::-;13379:34;13375:1;13367:6;13363:14;13356:58;13448:8;13443:2;13435:6;13431:15;13424:33;13239:225;:::o;13470:366::-;13612:3;13633:67;13697:2;13692:3;13633:67;:::i;:::-;13626:74;;13709:93;13798:3;13709:93;:::i;:::-;13827:2;13822:3;13818:12;13811:19;;13470:366;;;:::o;13842:419::-;14008:4;14046:2;14035:9;14031:18;14023:26;;14095:9;14089:4;14085:20;14081:1;14070:9;14066:17;14059:47;14123:131;14249:4;14123:131;:::i;:::-;14115:139;;13842:419;;;:::o;14267:172::-;14407:24;14403:1;14395:6;14391:14;14384:48;14267:172;:::o;14445:366::-;14587:3;14608:67;14672:2;14667:3;14608:67;:::i;:::-;14601:74;;14684:93;14773:3;14684:93;:::i;:::-;14802:2;14797:3;14793:12;14786:19;;14445:366;;;:::o;14817:419::-;14983:4;15021:2;15010:9;15006:18;14998:26;;15070:9;15064:4;15060:20;15056:1;15045:9;15041:17;15034:47;15098:131;15224:4;15098:131;:::i;:::-;15090:139;;14817:419;;;:::o;15242:164::-;15382:16;15378:1;15370:6;15366:14;15359:40;15242:164;:::o;15412:366::-;15554:3;15575:67;15639:2;15634:3;15575:67;:::i;:::-;15568:74;;15651:93;15740:3;15651:93;:::i;:::-;15769:2;15764:3;15760:12;15753:19;;15412:366;;;:::o;15784:419::-;15950:4;15988:2;15977:9;15973:18;15965:26;;16037:9;16031:4;16027:20;16023:1;16012:9;16008:17;16001:47;16065:131;16191:4;16065:131;:::i;:::-;16057:139;;15784:419;;;:::o;16209:175::-;16349:27;16345:1;16337:6;16333:14;16326:51;16209:175;:::o;16390:366::-;16532:3;16553:67;16617:2;16612:3;16553:67;:::i;:::-;16546:74;;16629:93;16718:3;16629:93;:::i;:::-;16747:2;16742:3;16738:12;16731:19;;16390:366;;;:::o;16762:419::-;16928:4;16966:2;16955:9;16951:18;16943:26;;17015:9;17009:4;17005:20;17001:1;16990:9;16986:17;16979:47;17043:131;17169:4;17043:131;:::i;:::-;17035:139;;16762:419;;;:::o;17187:233::-;17226:3;17249:24;17267:5;17249:24;:::i;:::-;17240:33;;17295:66;17288:5;17285:77;17282:103;;17365:18;;:::i;:::-;17282:103;17412:1;17405:5;17401:13;17394:20;;17187:233;;;:::o;17426:170::-;17566:22;17562:1;17554:6;17550:14;17543:46;17426:170;:::o;17602:366::-;17744:3;17765:67;17829:2;17824:3;17765:67;:::i;:::-;17758:74;;17841:93;17930:3;17841:93;:::i;:::-;17959:2;17954:3;17950:12;17943:19;;17602:366;;;:::o;17974:419::-;18140:4;18178:2;18167:9;18163:18;18155:26;;18227:9;18221:4;18217:20;18213:1;18202:9;18198:17;18191:47;18255:131;18381:4;18255:131;:::i;:::-;18247:139;;17974:419;;;:::o;18399:332::-;18520:4;18558:2;18547:9;18543:18;18535:26;;18571:71;18639:1;18628:9;18624:17;18615:6;18571:71;:::i;:::-;18652:72;18720:2;18709:9;18705:18;18696:6;18652:72;:::i;:::-;18399:332;;;;;:::o;18737:137::-;18791:5;18822:6;18816:13;18807:22;;18838:30;18862:5;18838:30;:::i;:::-;18737:137;;;;:::o;18880:345::-;18947:6;18996:2;18984:9;18975:7;18971:23;18967:32;18964:119;;;19002:79;;:::i;:::-;18964:119;19122:1;19147:61;19200:7;19191:6;19180:9;19176:22;19147:61;:::i;:::-;19137:71;;19093:125;18880:345;;;;:::o;19231:171::-;19371:23;19367:1;19359:6;19355:14;19348:47;19231:171;:::o;19408:366::-;19550:3;19571:67;19635:2;19630:3;19571:67;:::i;:::-;19564:74;;19647:93;19736:3;19647:93;:::i;:::-;19765:2;19760:3;19756:12;19749:19;;19408:366;;;:::o;19780:419::-;19946:4;19984:2;19973:9;19969:18;19961:26;;20033:9;20027:4;20023:20;20019:1;20008:9;20004:17;19997:47;20061:131;20187:4;20061:131;:::i;:::-;20053:139;;19780:419;;;:::o;20205:442::-;20354:4;20392:2;20381:9;20377:18;20369:26;;20405:71;20473:1;20462:9;20458:17;20449:6;20405:71;:::i;:::-;20486:72;20554:2;20543:9;20539:18;20530:6;20486:72;:::i;:::-;20568;20636:2;20625:9;20621:18;20612:6;20568:72;:::i;:::-;20205:442;;;;;;:::o;20653:86::-;20688:7;20728:4;20721:5;20717:16;20706:27;;20653:86;;;:::o;20745:118::-;20816:22;20832:5;20816:22;:::i;:::-;20809:5;20806:33;20796:61;;20853:1;20850;20843:12;20796:61;20745:118;:::o;20869:139::-;20924:5;20955:6;20949:13;20940:22;;20971:31;20996:5;20971:31;:::i;:::-;20869:139;;;;:::o;21014:347::-;21082:6;21131:2;21119:9;21110:7;21106:23;21102:32;21099:119;;;21137:79;;:::i;:::-;21099:119;21257:1;21282:62;21336:7;21327:6;21316:9;21312:22;21282:62;:::i;:::-;21272:72;;21228:126;21014:347;;;;:::o;21367:102::-;21409:8;21456:5;21453:1;21449:13;21428:34;;21367:102;;;:::o;21475:848::-;21536:5;21543:4;21567:6;21558:15;;21591:5;21582:14;;21605:712;21626:1;21616:8;21613:15;21605:712;;;21721:4;21716:3;21712:14;21706:4;21703:24;21700:50;;;21730:18;;:::i;:::-;21700:50;21780:1;21770:8;21766:16;21763:451;;;22195:4;22188:5;22184:16;22175:25;;21763:451;22245:4;22239;22235:15;22227:23;;22275:32;22298:8;22275:32;:::i;:::-;22263:44;;21605:712;;;21475:848;;;;;;;:::o;22329:1073::-;22383:5;22574:8;22564:40;;22595:1;22586:10;;22597:5;;22564:40;22623:4;22613:36;;22640:1;22631:10;;22642:5;;22613:36;22709:4;22757:1;22752:27;;;;22793:1;22788:191;;;;22702:277;;22752:27;22770:1;22761:10;;22772:5;;;22788:191;22833:3;22823:8;22820:17;22817:43;;;22840:18;;:::i;:::-;22817:43;22889:8;22886:1;22882:16;22873:25;;22924:3;22917:5;22914:14;22911:40;;;22931:18;;:::i;:::-;22911:40;22964:5;;;22702:277;;23088:2;23078:8;23075:16;23069:3;23063:4;23060:13;23056:36;23038:2;23028:8;23025:16;23020:2;23014:4;23011:12;23007:35;22991:111;22988:246;;;23144:8;23138:4;23134:19;23125:28;;23179:3;23172:5;23169:14;23166:40;;;23186:18;;:::i;:::-;23166:40;23219:5;;22988:246;23259:42;23297:3;23287:8;23281:4;23278:1;23259:42;:::i;:::-;23244:57;;;;23333:4;23328:3;23324:14;23317:5;23314:25;23311:51;;;23342:18;;:::i;:::-;23311:51;23391:4;23384:5;23380:16;23371:25;;22329:1073;;;;;;:::o;23408:281::-;23466:5;23490:23;23508:4;23490:23;:::i;:::-;23482:31;;23534:25;23550:8;23534:25;:::i;:::-;23522:37;;23578:104;23615:66;23605:8;23599:4;23578:104;:::i;:::-;23569:113;;23408:281;;;;:::o;23695:164::-;23835:16;23831:1;23823:6;23819:14;23812:40;23695:164;:::o;23865:366::-;24007:3;24028:67;24092:2;24087:3;24028:67;:::i;:::-;24021:74;;24104:93;24193:3;24104:93;:::i;:::-;24222:2;24217:3;24213:12;24206:19;;23865:366;;;:::o;24237:419::-;24403:4;24441:2;24430:9;24426:18;24418:26;;24490:9;24484:4;24480:20;24476:1;24465:9;24461:17;24454:47;24518:131;24644:4;24518:131;:::i;:::-;24510:139;;24237:419;;;:::o;24662:168::-;24802:20;24798:1;24790:6;24786:14;24779:44;24662:168;:::o;24836:366::-;24978:3;24999:67;25063:2;25058:3;24999:67;:::i;:::-;24992:74;;25075:93;25164:3;25075:93;:::i;:::-;25193:2;25188:3;25184:12;25177:19;;24836:366;;;:::o;25208:419::-;25374:4;25412:2;25401:9;25397:18;25389:26;;25461:9;25455:4;25451:20;25447:1;25436:9;25432:17;25425:47;25489:131;25615:4;25489:131;:::i;:::-;25481:139;;25208:419;;;:::o;25633:169::-;25773:21;25769:1;25761:6;25757:14;25750:45;25633:169;:::o;25808:366::-;25950:3;25971:67;26035:2;26030:3;25971:67;:::i;:::-;25964:74;;26047:93;26136:3;26047:93;:::i;:::-;26165:2;26160:3;26156:12;26149:19;;25808:366;;;:::o;26180:419::-;26346:4;26384:2;26373:9;26369:18;26361:26;;26433:9;26427:4;26423:20;26419:1;26408:9;26404:17;26397:47;26461:131;26587:4;26461:131;:::i;:::-;26453:139;;26180:419;;;:::o;26605:168::-;26745:20;26741:1;26733:6;26729:14;26722:44;26605:168;:::o;26779:366::-;26921:3;26942:67;27006:2;27001:3;26942:67;:::i;:::-;26935:74;;27018:93;27107:3;27018:93;:::i;:::-;27136:2;27131:3;27127:12;27120:19;;26779:366;;;:::o;27151:419::-;27317:4;27355:2;27344:9;27340:18;27332:26;;27404:9;27398:4;27394:20;27390:1;27379:9;27375:17;27368:47;27432:131;27558:4;27432:131;:::i;:::-;27424:139;;27151:419;;;:::o;27576:105::-;27612:7;27652:22;27645:5;27641:34;27630:45;;27576:105;;;:::o;27687:120::-;27759:23;27776:5;27759:23;:::i;:::-;27752:5;27749:34;27739:62;;27797:1;27794;27787:12;27739:62;27687:120;:::o;27813:141::-;27869:5;27900:6;27894:13;27885:22;;27916:32;27942:5;27916:32;:::i;:::-;27813:141;;;;:::o;27960:76::-;27996:7;28025:5;28014:16;;27960:76;;;:::o;28042:120::-;28114:23;28131:5;28114:23;:::i;:::-;28107:5;28104:34;28094:62;;28152:1;28149;28142:12;28094:62;28042:120;:::o;28168:141::-;28224:5;28255:6;28249:13;28240:22;;28271:32;28297:5;28271:32;:::i;:::-;28168:141;;;;:::o;28315:143::-;28372:5;28403:6;28397:13;28388:22;;28419:33;28446:5;28419:33;:::i;:::-;28315:143;;;;:::o;28464:971::-;28567:6;28575;28583;28591;28599;28648:3;28636:9;28627:7;28623:23;28619:33;28616:120;;;28655:79;;:::i;:::-;28616:120;28775:1;28800:63;28855:7;28846:6;28835:9;28831:22;28800:63;:::i;:::-;28790:73;;28746:127;28912:2;28938:63;28993:7;28984:6;28973:9;28969:22;28938:63;:::i;:::-;28928:73;;28883:128;29050:2;29076:64;29132:7;29123:6;29112:9;29108:22;29076:64;:::i;:::-;29066:74;;29021:129;29189:2;29215:64;29271:7;29262:6;29251:9;29247:22;29215:64;:::i;:::-;29205:74;;29160:129;29328:3;29355:63;29410:7;29401:6;29390:9;29386:22;29355:63;:::i;:::-;29345:73;;29299:129;28464:971;;;;;;;;:::o;29441:556::-;29480:7;29503:19;29520:1;29503:19;:::i;:::-;29498:24;;29536:19;29553:1;29536:19;:::i;:::-;29531:24;;29590:1;29587;29583:9;29612:29;29629:11;29612:29;:::i;:::-;29601:40;;29699:66;29696:1;29693:73;29689:1;29686;29682:9;29678:89;29675:115;;;29770:18;;:::i;:::-;29675:115;29940:1;29931:7;29926:16;29923:1;29920:23;29900:1;29893:9;29873:84;29850:140;;29970:18;;:::i;:::-;29850:140;29488:509;29441:556;;;;:::o;30003:160::-;30143:12;30139:1;30131:6;30127:14;30120:36;30003:160;:::o;30169:366::-;30311:3;30332:67;30396:2;30391:3;30332:67;:::i;:::-;30325:74;;30408:93;30497:3;30408:93;:::i;:::-;30526:2;30521:3;30517:12;30510:19;;30169:366;;;:::o;30541:419::-;30707:4;30745:2;30734:9;30730:18;30722:26;;30794:9;30788:4;30784:20;30780:1;30769:9;30765:17;30758:47;30822:131;30948:4;30822:131;:::i;:::-;30814:139;;30541:419;;;:::o;30966:169::-;31106:21;31102:1;31094:6;31090:14;31083:45;30966:169;:::o;31141:366::-;31283:3;31304:67;31368:2;31363:3;31304:67;:::i;:::-;31297:74;;31380:93;31469:3;31380:93;:::i;:::-;31498:2;31493:3;31489:12;31482:19;;31141:366;;;:::o;31513:419::-;31679:4;31717:2;31706:9;31702:18;31694:26;;31766:9;31760:4;31756:20;31752:1;31741:9;31737:17;31730:47;31794:131;31920:4;31794:131;:::i;:::-;31786:139;;31513:419;;;:::o;31938:161::-;32078:13;32074:1;32066:6;32062:14;32055:37;31938:161;:::o;32105:366::-;32247:3;32268:67;32332:2;32327:3;32268:67;:::i;:::-;32261:74;;32344:93;32433:3;32344:93;:::i;:::-;32462:2;32457:3;32453:12;32446:19;;32105:366;;;:::o;32477:419::-;32643:4;32681:2;32670:9;32666:18;32658:26;;32730:9;32724:4;32720:20;32716:1;32705:9;32701:17;32694:47;32758:131;32884:4;32758:131;:::i;:::-;32750:139;;32477:419;;;:::o;32902:170::-;33042:22;33038:1;33030:6;33026:14;33019:46;32902:170;:::o;33078:366::-;33220:3;33241:67;33305:2;33300:3;33241:67;:::i;:::-;33234:74;;33317:93;33406:3;33317:93;:::i;:::-;33435:2;33430:3;33426:12;33419:19;;33078:366;;;:::o;33450:419::-;33616:4;33654:2;33643:9;33639:18;33631:26;;33703:9;33697:4;33693:20;33689:1;33678:9;33674:17;33667:47;33731:131;33857:4;33731:131;:::i;:::-;33723:139;;33450:419;;;:::o;33875:332::-;33996:4;34034:2;34023:9;34019:18;34011:26;;34047:71;34115:1;34104:9;34100:17;34091:6;34047:71;:::i;:::-;34128:72;34196:2;34185:9;34181:18;34172:6;34128:72;:::i;:::-;33875:332;;;;;:::o;34213:351::-;34283:6;34332:2;34320:9;34311:7;34307:23;34303:32;34300:119;;;34338:79;;:::i;:::-;34300:119;34458:1;34483:64;34539:7;34530:6;34519:9;34515:22;34483:64;:::i;:::-;34473:74;;34429:128;34213:351;;;;:::o;34570:220::-;34710:34;34706:1;34698:6;34694:14;34687:58;34779:3;34774:2;34766:6;34762:15;34755:28;34570:220;:::o;34796:366::-;34938:3;34959:67;35023:2;35018:3;34959:67;:::i;:::-;34952:74;;35035:93;35124:3;35035:93;:::i;:::-;35153:2;35148:3;35144:12;35137:19;;34796:366;;;:::o;35168:419::-;35334:4;35372:2;35361:9;35357:18;35349:26;;35421:9;35415:4;35411:20;35407:1;35396:9;35392:17;35385:47;35449:131;35575:4;35449:131;:::i;:::-;35441:139;;35168:419;;;:::o;35593:442::-;35742:4;35780:2;35769:9;35765:18;35757:26;;35793:71;35861:1;35850:9;35846:17;35837:6;35793:71;:::i;:::-;35874:72;35942:2;35931:9;35927:18;35918:6;35874:72;:::i;:::-;35956;36024:2;36013:9;36009:18;36000:6;35956:72;:::i;:::-;35593:442;;;;;;:::o;36041:98::-;36092:6;36126:5;36120:12;36110:22;;36041:98;;;:::o;36145:147::-;36246:11;36283:3;36268:18;;36145:147;;;;:::o;36298:139::-;36387:6;36382:3;36377;36371:23;36428:1;36419:6;36414:3;36410:16;36403:27;36298:139;;;:::o;36443:386::-;36547:3;36575:38;36607:5;36575:38;:::i;:::-;36629:88;36710:6;36705:3;36629:88;:::i;:::-;36622:95;;36726:65;36784:6;36779:3;36772:4;36765:5;36761:16;36726:65;:::i;:::-;36816:6;36811:3;36807:16;36800:23;;36551:278;36443:386;;;;:::o;36835:271::-;36965:3;36987:93;37076:3;37067:6;36987:93;:::i;:::-;36980:100;;37097:3;37090:10;;36835:271;;;;:::o;37112:170::-;37252:22;37248:1;37240:6;37236:14;37229:46;37112:170;:::o;37288:366::-;37430:3;37451:67;37515:2;37510:3;37451:67;:::i;:::-;37444:74;;37527:93;37616:3;37527:93;:::i;:::-;37645:2;37640:3;37636:12;37629:19;;37288:366;;;:::o;37660:419::-;37826:4;37864:2;37853:9;37849:18;37841:26;;37913:9;37907:4;37903:20;37899:1;37888:9;37884:17;37877:47;37941:131;38067:4;37941:131;:::i;:::-;37933:139;;37660:419;;;:::o;38085:160::-;38225:12;38221:1;38213:6;38209:14;38202:36;38085:160;:::o;38251:366::-;38393:3;38414:67;38478:2;38473:3;38414:67;:::i;:::-;38407:74;;38490:93;38579:3;38490:93;:::i;:::-;38608:2;38603:3;38599:12;38592:19;;38251:366;;;:::o;38623:419::-;38789:4;38827:2;38816:9;38812:18;38804:26;;38876:9;38870:4;38866:20;38862:1;38851:9;38847:17;38840:47;38904:131;39030:4;38904:131;:::i;:::-;38896:139;;38623:419;;;:::o;39048:85::-;39093:7;39122:5;39111:16;;39048:85;;;:::o;39139:158::-;39197:9;39230:61;39248:42;39257:32;39283:5;39257:32;:::i;:::-;39248:42;:::i;:::-;39230:61;:::i;:::-;39217:74;;39139:158;;;:::o;39303:147::-;39398:45;39437:5;39398:45;:::i;:::-;39393:3;39386:58;39303:147;;:::o;39456:474::-;39621:4;39659:2;39648:9;39644:18;39636:26;;39672:71;39740:1;39729:9;39725:17;39716:6;39672:71;:::i;:::-;39753:80;39829:2;39818:9;39814:18;39805:6;39753:80;:::i;:::-;39843;39919:2;39908:9;39904:18;39895:6;39843:80;:::i;:::-;39456:474;;;;;;:::o;39936:225::-;40076:34;40072:1;40064:6;40060:14;40053:58;40145:8;40140:2;40132:6;40128:15;40121:33;39936:225;:::o;40167:366::-;40309:3;40330:67;40394:2;40389:3;40330:67;:::i;:::-;40323:74;;40406:93;40495:3;40406:93;:::i;:::-;40524:2;40519:3;40515:12;40508:19;;40167:366;;;:::o;40539:419::-;40705:4;40743:2;40732:9;40728:18;40720:26;;40792:9;40786:4;40782:20;40778:1;40767:9;40763:17;40756:47;40820:131;40946:4;40820:131;:::i;:::-;40812:139;;40539:419;;;:::o;40964:182::-;41104:34;41100:1;41092:6;41088:14;41081:58;40964:182;:::o;41152:366::-;41294:3;41315:67;41379:2;41374:3;41315:67;:::i;:::-;41308:74;;41391:93;41480:3;41391:93;:::i;:::-;41509:2;41504:3;41500:12;41493:19;;41152:366;;;:::o;41524:419::-;41690:4;41728:2;41717:9;41713:18;41705:26;;41777:9;41771:4;41767:20;41763:1;41752:9;41748:17;41741:47;41805:131;41931:4;41805:131;:::i;:::-;41797:139;;41524:419;;;:::o;41949:181::-;42089:33;42085:1;42077:6;42073:14;42066:57;41949:181;:::o;42136:366::-;42278:3;42299:67;42363:2;42358:3;42299:67;:::i;:::-;42292:74;;42375:93;42464:3;42375:93;:::i;:::-;42493:2;42488:3;42484:12;42477:19;;42136:366;;;:::o;42508:419::-;42674:4;42712:2;42701:9;42697:18;42689:26;;42761:9;42755:4;42751:20;42747:1;42736:9;42732:17;42725:47;42789:131;42915:4;42789:131;:::i;:::-;42781:139;;42508:419;;;:::o;42933:161::-;43073:13;43069:1;43061:6;43057:14;43050:37;42933:161;:::o;43100:366::-;43242:3;43263:67;43327:2;43322:3;43263:67;:::i;:::-;43256:74;;43339:93;43428:3;43339:93;:::i;:::-;43457:2;43452:3;43448:12;43441:19;;43100:366;;;:::o;43472:419::-;43638:4;43676:2;43665:9;43661:18;43653:26;;43725:9;43719:4;43715:20;43711:1;43700:9;43696:17;43689:47;43753:131;43879:4;43753:131;:::i;:::-;43745:139;;43472:419;;;:::o;43897:114::-;;:::o;44017:398::-;44176:3;44197:83;44278:1;44273:3;44197:83;:::i;:::-;44190:90;;44289:93;44378:3;44289:93;:::i;:::-;44407:1;44402:3;44398:11;44391:18;;44017:398;;;:::o;44421:379::-;44605:3;44627:147;44770:3;44627:147;:::i;:::-;44620:154;;44791:3;44784:10;;44421:379;;;:::o;44806:168::-;44946:20;44942:1;44934:6;44930:14;44923:44;44806:168;:::o;44980:366::-;45122:3;45143:67;45207:2;45202:3;45143:67;:::i;:::-;45136:74;;45219:93;45308:3;45219:93;:::i;:::-;45337:2;45332:3;45328:12;45321:19;;44980:366;;;:::o;45352:419::-;45518:4;45556:2;45545:9;45541:18;45533:26;;45605:9;45599:4;45595:20;45591:1;45580:9;45576:17;45569:47;45633:131;45759:4;45633:131;:::i;:::-;45625:139;;45352:419;;;:::o

Swarm Source

ipfs://50d78ef7f50da6b6d97b791a1ce73d4a2711616d4362bcf934157e86f8cf9f3f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.