ETH Price: $3,670.49 (-1.63%)

Contract

0xd5Fdd5E156e2D3d0F87838351e8b733b8Fd26b89
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Buy With Eth212995202024-11-30 9:11:592 days ago1732957919IN
0xd5Fdd5E1...b8Fd26b89
0.02968544 ETH0.001504088.03998668
Buy With Eth212079792024-11-17 14:19:2315 days ago1731853163IN
0xd5Fdd5E1...b8Fd26b89
0.01 ETH0.00181839.71964705
Buy With Eth211195122024-11-05 5:59:2327 days ago1730786363IN
0xd5Fdd5E1...b8Fd26b89
0.1 ETH0.000428083.74432178
Buy With Eth211194782024-11-05 5:52:3527 days ago1730785955IN
0xd5Fdd5E1...b8Fd26b89
0.06 ETH0.000429913.76026031
Buy With Eth211194702024-11-05 5:50:5927 days ago1730785859IN
0xd5Fdd5E1...b8Fd26b89
0.06 ETH0.000413193.6140192
Buy With Eth211194562024-11-05 5:47:4727 days ago1730785667IN
0xd5Fdd5E1...b8Fd26b89
0.06 ETH0.000342652.99708898
Buy With Eth210360512024-10-24 14:27:1139 days ago1729780031IN
0xd5Fdd5E1...b8Fd26b89
0.066 ETH0.0017036814.90146779
Update Presale209997792024-10-19 13:01:1144 days ago1729342871IN
0xd5Fdd5E1...b8Fd26b89
0 ETH0.0004843913.35858869
Buy With Eth209953462024-10-18 22:10:2344 days ago1729289423IN
0xd5Fdd5E1...b8Fd26b89
0.001 ETH0.0030984412.24802111
Update Presale T...209952172024-10-18 21:44:2344 days ago1729287863IN
0xd5Fdd5E1...b8Fd26b89
0 ETH0.0006141811.98782011
Set Current Stag...209950552024-10-18 21:11:4744 days ago1729285907IN
0xd5Fdd5E1...b8Fd26b89
0 ETH0.0010499611.37090852
Create Presale209950492024-10-18 21:10:3544 days ago1729285835IN
0xd5Fdd5E1...b8Fd26b89
0 ETH0.0016429111.04527908

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
212995202024-11-30 9:11:592 days ago1732957919
0xd5Fdd5E1...b8Fd26b89
0.02968544 ETH
212079792024-11-17 14:19:2315 days ago1731853163
0xd5Fdd5E1...b8Fd26b89
0.01 ETH
211195122024-11-05 5:59:2327 days ago1730786363
0xd5Fdd5E1...b8Fd26b89
0.1 ETH
211194782024-11-05 5:52:3527 days ago1730785955
0xd5Fdd5E1...b8Fd26b89
0.06 ETH
211194702024-11-05 5:50:5927 days ago1730785859
0xd5Fdd5E1...b8Fd26b89
0.06 ETH
211194562024-11-05 5:47:4727 days ago1730785667
0xd5Fdd5E1...b8Fd26b89
0.06 ETH
210360512024-10-24 14:27:1139 days ago1729780031
0xd5Fdd5E1...b8Fd26b89
0.066 ETH
209953462024-10-18 22:10:2344 days ago1729289423
0xd5Fdd5E1...b8Fd26b89
0.001 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MediCoin_Presale

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-18
*/

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

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 MediCoin_Presale is ReentrancyGuard, Ownable {
    IERC20Metadata public USDTInterface;
    IERC20Metadata public USDCInterface;
    Aggregator internal aggregatorInterface;
    address public SaleToken;
    address public fundReceiver;

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

    struct VestingData {
        uint256 vestingStartTime;
        uint256 initialClaimPercent;
        uint256 vestingTime;
        uint256 vestingPercentage;
        uint256 totalClaimCycles;
    }

    struct UserData {
        uint256 investedAmount;
        uint256 claimAt;
        uint256 claimAbleAmount;
        uint256 claimedVestingAmount;
        uint256 claimedAmount;
        uint256 claimCount;
        uint256 activePercentAmount;
    }

    mapping(uint256 => bool) public paused;
    mapping(uint256 => PresaleData) public presale;
    mapping(uint256 => VestingData) public vesting;
    mapping(address => mapping(uint256 => UserData)) public userClaimData;
    mapping(address => bool) public isBlackList;
    mapping(address => bool) public isExist;

    uint256 public presaleId;
    uint256 public uniqueBuyers;
    uint256 public overalllRaised;
    uint256 public MinTokenTobuy;
    uint256 public currentSale;
    uint256 public USDT_MULTIPLIER;
    uint256 public ETH_MULTIPLIER;

    uint256 initialClaimPercent;
    uint256 vestingTime;
    uint256 vestingPercentage;
    uint256 totalClaimCycles;

    event PresaleCreated(
        uint256 indexed id,
        uint256 totalTokens,
        uint256 startTime,
        uint256 endTime
    );

    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 PresaleTokenAddressUpdated(
        address indexed prevValue,
        address indexed newValue,
        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
    ) {
        aggregatorInterface = Aggregator(_oracle);
        SaleToken = _SaleToken;
        MinTokenTobuy = 100e9;
        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 _usdHardcap
    ) external onlyOwner {
        require(_price > 0, "Zero price");
        require(_tokensToSell > 0, "Zero tokens to sell");

        presaleId++;

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

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

    function setCurrentStage(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 setPresaleVesting(
        uint256[] memory _id,
        uint256[] memory vestingStartTime,
        uint256[] memory _initialClaimPercent,
        uint256[] memory _vestingTime,
        uint256[] memory _vestingPercentage
    ) public onlyOwner {
        for (uint256 i = 0; i < _id.length; i++) {
            vesting[_id[i]] = VestingData(
                vestingStartTime[i],
                _initialClaimPercent[i],
                _vestingTime[i],
                _vestingPercentage[i],
                (100 - _initialClaimPercent[i]) / _vestingPercentage[i]
            );
        }
    }

    function updatePresaleVesting(
        uint256 _id,
        uint256 _vestingStartTime,
        uint256 _initialClaimPercent,
        uint256 _vestingTime,
        uint256 _vestingPercentage
    ) public onlyOwner {
        vesting[_id].vestingStartTime = _vestingStartTime;
        vesting[_id].initialClaimPercent = _initialClaimPercent;
        vesting[_id].vestingTime = _vestingTime;
        vesting[_id].vestingPercentage = _vestingPercentage;
        vesting[_id].totalClaimCycles =
            (100 - _initialClaimPercent) /
            _vestingPercentage;
    }

    function updateClaimStatus(uint256 _id, bool _status) public onlyOwner {
        presale[_id].isEnableClaim = _status;
    }

    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].usdHardcap = _Hardcap;
    }

    function updatePresaleTime(
        uint256 _id,
        uint256 _startTime,
        uint256 _endTime
    ) external onlyOwner {
        presale[_id].startTime = _startTime;
        presale[_id].endTime = _endTime;
    }

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

    function WithdrawContractFunds(uint256 amount) external onlyOwner {
        payable(fundReceiver).transfer(amount);
    }

    function ChangeTokenToSell(address _token) public onlyOwner {
        emit PresaleTokenAddressUpdated(SaleToken, _token, block.timestamp);
        SaleToken = _token;
    }

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

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

    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 changeClaimAddress(address _oldAddress, address _newWallet)
        public
        onlyOwner
    {
        for (uint256 i = 1; i < presaleId; i++) {
            require(isExist[_oldAddress], "User not a participant");
            userClaimData[_newWallet][i].claimAbleAmount = userClaimData[
                _oldAddress
            ][i].claimAbleAmount;
            userClaimData[_oldAddress][i].claimAbleAmount = 0;
        }
        isExist[_oldAddress] = false;
        isExist[_newWallet] = true;
    }

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

    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].usdHardcap,
            "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 = usdtToTokens(currentSale, usdAmount);
        require(tokens >= MinTokenTobuy, "Insufficient amount!");
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdAmount;
        overalllRaised += usdAmount;

        if (userClaimData[_msgSender()][currentSale].claimAbleAmount > 0) {
            userClaimData[_msgSender()][currentSale].claimAbleAmount += tokens;
            userClaimData[_msgSender()][currentSale].investedAmount += usdAmount;
        } else {
            userClaimData[_msgSender()][currentSale] = UserData(
                usdAmount,
                0, // Last claimed at
                tokens, // total tokens to be claimed
                0, // vesting claimed amount
                0, // claimed amount
                0, // claim count
                0 // vesting percent
            );
        }

        payable(fundReceiver).transfer(msg.value);
        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 ethToTokens(uint256 _id, uint256 amount)
        public
        view
        returns (uint256 _tokens)
    {
        uint256 usdAmount = (amount * getLatestPrice() * USDT_MULTIPLIER) /
            (ETH_MULTIPLIER * ETH_MULTIPLIER);
        _tokens = usdtToTokens(_id, usdAmount);
    }

    function buyWithUSDT(uint256 usdAmount)
        external
        checkPresaleId(currentSale)
        checkSaleState(currentSale, usdtToTokens(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].usdHardcap,
            "Amount should be less than leftHardcap"
        );
        if (!isExist[msg.sender]) {
            isExist[msg.sender] = true;
            uniqueBuyers++;
        }
        uint256 tokens = usdtToTokens(currentSale, usdAmount);
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdAmount;
        overalllRaised += usdAmount;
        require(tokens >= MinTokenTobuy, "Less than min amount");
        
        if (userClaimData[_msgSender()][currentSale].claimAbleAmount > 0) {
            userClaimData[_msgSender()][currentSale].claimAbleAmount += tokens;
            userClaimData[_msgSender()][currentSale].investedAmount += usdAmount;
        } else {
            userClaimData[_msgSender()][currentSale] = UserData(
                usdAmount,
                0,
                tokens,
                0,
                0,
                0,
                0
            );
        }
        USDTInterface.transferFrom(msg.sender, fundReceiver, usdAmount);
        emit TokensBought(
            _msgSender(),
            currentSale,
            address(USDTInterface),
            tokens,
            usdAmount,
            block.timestamp
        );
        return true;
    }

    function buyWithUSDC(uint256 usdAmount)
        external
        checkPresaleId(currentSale)
        checkSaleState(currentSale, usdtToTokens(currentSale, usdAmount))
        nonReentrant
        returns (bool)
    {
        require(!paused[currentSale], "Presale paused");
        require(
            presale[currentSale].Active == true,
            "Presale is not active yet"
        );
        require(
            presale[currentSale].amountRaised + usdAmount <=
                presale[currentSale].usdHardcap,
            "Amount should be less than leftHardcap"
        );
        require(!isBlackList[msg.sender], "Account is blackListed");
        if (!isExist[msg.sender]) {
            isExist[msg.sender] = true;
            uniqueBuyers++;
        }
        uint256 tokens = usdtToTokens(currentSale, usdAmount);
        presale[currentSale].Sold += tokens;
        presale[currentSale].amountRaised += usdAmount;
        overalllRaised += usdAmount;
        require(tokens >= MinTokenTobuy, "Less than min amount");
        
        if (userClaimData[_msgSender()][currentSale].claimAbleAmount > 0) {
            userClaimData[_msgSender()][currentSale].claimAbleAmount += tokens;
            userClaimData[_msgSender()][currentSale].investedAmount += usdAmount;
        } else {
            userClaimData[_msgSender()][currentSale] = UserData(
                usdAmount,
                0,
                tokens,
                0,
                0,
                0,
                0
            );
            require(isExist[_msgSender()], "User not a participant");
        }

        USDCInterface.transferFrom(msg.sender, fundReceiver, usdAmount);
        emit TokensBought(
            _msgSender(),
            currentSale,
            address(USDCInterface),
            tokens,
            usdAmount,
            block.timestamp
        );
        return true;
    }

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

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

    function claimableAmount(address user, uint256 _id)
        public
        view
        returns (uint256)
    {
        UserData memory _user = userClaimData[user][_id];

        require(_user.claimAbleAmount > 0, "Nothing to claim");
        uint256 amount = _user.claimAbleAmount;
        require(amount > 0, "Already claimed");
        return amount;
    }

    function claimMultiple() public {
        for(uint8 i=1 ; i<=presaleId ; i++){
            if(userClaimData[msg.sender][i].claimAbleAmount > 0 && 
            block.timestamp > vesting[i].vestingStartTime){
                claim(msg.sender, i);
            }
        }
    }

    function claimAmount(uint256 _id) public {
        claim(msg.sender, _id);
    }

    function claim(address _user, uint256 _id) internal returns (bool) {
        require(isExist[_msgSender()], "User not a participant");
        uint256 amount = claimableAmount(_user, _id);
        require(amount > 0, "No claimable amount");
        require(!isBlackList[_user], "Account is blackListed");
        require(SaleToken != address(0), "Presale token address not set");
        require(
            amount <= IERC20(SaleToken).balanceOf(address(this)),
            "Not enough tokens in the contract"
        );
        require((presale[_id].isEnableClaim == true), "Claim is not enable");
        require(block.timestamp > vesting[_id].vestingStartTime,"Vesting time is not started yet");
        uint256 transferAmount;
        if (userClaimData[_user][_id].claimCount == 0) {
            transferAmount =
                (amount * (vesting[_id].initialClaimPercent)) /
                1000;
            userClaimData[_user][_id].activePercentAmount =
                (amount * vesting[_id].vestingPercentage) /
                1000;
            bool status = IERC20(SaleToken).transfer(
                _user,
                transferAmount
            );
            require(status, "Token transfer failed");
            userClaimData[_user][_id].claimAbleAmount -= transferAmount;
            userClaimData[_user][_id].claimedAmount += transferAmount;
            userClaimData[_user][_id].claimCount++;
        } else if (
            userClaimData[_user][_id].claimAbleAmount >
            userClaimData[_user][_id].activePercentAmount
        ) {
            uint256 duration = block.timestamp - vesting[_id].vestingStartTime;
            uint256 multiplier = duration / vesting[_id].vestingTime;
            if (multiplier > vesting[_id].totalClaimCycles) {
                multiplier = vesting[_id].totalClaimCycles;
            }
            uint256 _amount = multiplier *
                userClaimData[_user][_id].activePercentAmount;
            transferAmount =
                _amount -
                userClaimData[_user][_id].claimedVestingAmount;
            require(transferAmount > 0, "Please wait till next claim");
            bool status = IERC20(SaleToken).transfer(
                _user,
                transferAmount
            );
            require(status, "Token transfer failed");
            userClaimData[_user][_id].claimAbleAmount -= transferAmount;
            userClaimData[_user][_id]
                .claimedVestingAmount += transferAmount;
            userClaimData[_user][_id].claimedAmount += transferAmount;
            userClaimData[_user][_id].claimCount++;
        } else {
            uint256 duration = block.timestamp - vesting[_id].vestingStartTime;
            uint256 multiplier = duration / vesting[_id].vestingTime;
            if (multiplier > vesting[_id].totalClaimCycles + 1) {
                transferAmount = userClaimData[_user][_id].claimAbleAmount;
                require(transferAmount > 0, "Please wait till next claim");
                bool status = IERC20(SaleToken).transfer(
                    _user,
                    transferAmount
                );
                require(status, "Token transfer failed");
                userClaimData[_user][_id]
                    .claimAbleAmount -= transferAmount;
                userClaimData[_user][_id].claimedAmount += transferAmount;
                userClaimData[_user][_id]
                    .claimedVestingAmount += transferAmount;
                userClaimData[_user][_id].claimCount++;
            } else {
                revert("Wait for next claiim");
            }
        }
        emit TokensClaimed(_user, _id, transferAmount, block.timestamp);
        return true;
    }

    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"}],"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":"address","name":"prevValue","type":"address"},{"indexed":true,"internalType":"address","name":"newValue","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleTokenAddressUpdated","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":"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":"ChangeTokenToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"usdAmount","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":"_oldAddress","type":"address"},{"internalType":"address","name":"_newWallet","type":"address"}],"name":"changeClaimAddress","outputs":[],"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":"_id","type":"uint256"}],"name":"claimAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_usdHardcap","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":"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":"usdHardcap","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"},{"internalType":"bool","name":"isEnableClaim","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":"setCurrentStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"uint256[]","name":"vestingStartTime","type":"uint256[]"},{"internalType":"uint256[]","name":"_initialClaimPercent","type":"uint256[]"},{"internalType":"uint256[]","name":"_vestingTime","type":"uint256[]"},{"internalType":"uint256[]","name":"_vestingPercentage","type":"uint256[]"}],"name":"setPresaleVesting","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":"bool","name":"_status","type":"bool"}],"name":"updateClaimStatus","outputs":[],"stateMutability":"nonpayable","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":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"updatePresaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_vestingStartTime","type":"uint256"},{"internalType":"uint256","name":"_initialClaimPercent","type":"uint256"},{"internalType":"uint256","name":"_vestingTime","type":"uint256"},{"internalType":"uint256","name":"_vestingPercentage","type":"uint256"}],"name":"updatePresaleVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtBuyHelper","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":"usdtToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userClaimData","outputs":[{"internalType":"uint256","name":"investedAmount","type":"uint256"},{"internalType":"uint256","name":"claimAt","type":"uint256"},{"internalType":"uint256","name":"claimAbleAmount","type":"uint256"},{"internalType":"uint256","name":"claimedVestingAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"claimCount","type":"uint256"},{"internalType":"uint256","name":"activePercentAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vesting","outputs":[{"internalType":"uint256","name":"vestingStartTime","type":"uint256"},{"internalType":"uint256","name":"initialClaimPercent","type":"uint256"},{"internalType":"uint256","name":"vestingTime","type":"uint256"},{"internalType":"uint256","name":"vestingPercentage","type":"uint256"},{"internalType":"uint256","name":"totalClaimCycles","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801562000010575f80fd5b5060405162003c0b38038062003c0b83398101604081905262000033916200012b565b60015f556200004233620000be565b600480546001600160a01b03199081166001600160a01b03968716179091556005805482169286169290921790915564174876e800601055600280548216938516939093179092556003805483169190931617909155670de0b6b3a7640000601355620f42406012556006805433921691909117905562000185565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b038116811462000126575f80fd5b919050565b5f805f80608085870312156200013f575f80fd5b6200014a856200010f565b93506200015a602086016200010f565b92506200016a604086016200010f565b91506200017a606086016200010f565b905092959194509250565b613a7880620001935f395ff3fe6080604052600436106102d7575f3560e01c80637f1d24c811610189578063c8f74e11116100d8578063e6ab143411610092578063f309fed91161006d578063f309fed9146109d1578063f597573f146109f0578063fb4aa0a114610a0f578063fe9f676e14610a2e575f80fd5b8063e6ab1434146108d6578063ecf5f43714610993578063f2fde38b146109b2575f80fd5b8063c8f74e1114610826578063cf87367714610845578063d01608c114610864578063d099850a14610883578063e0cef1b0146108a2578063e18e84f9146108c1575f80fd5b80639752f3cb11610143578063aa1c3aa51161011e578063aa1c3aa51461072c578063aeccf73514610741578063b04c734614610760578063b36d6919146107f8575f80fd5b80639752f3cb146106d9578063a05d03fd146106f8578063a7c601601461070d575f80fd5b80637f1d24c814610636578063833cde52146106555780638561c315146106745780638d79e66d146106935780638da5cb5b146106a85780638e15f473146106c5575f80fd5b806348bf4fcf11610245578063680f2e4f116101ff5780637108b385116101da5780637108b385146105d0578063715018a6146105e4578063718a1962146105f857806379b8d93814610617575f80fd5b8063680f2e4f146105805780636f891f821461059f5780636fb4adff146105b1575f80fd5b806348bf4fcf146104da5780634a3bf6c9146104ef5780634a6413f71461050e578063582b57231461052d57806358f985851461054c5780635dfd59f614610561575f80fd5b80632127fe04116102965780632127fe04146103b357806323b221a0146103e057806325312e54146103ff5780632ffac82c1461043657806338c67b73146104a657806339764363146104c5575f80fd5b806213eb4b146102db578062dde10e1461031e5780630d07cc301461034c5780630ec809a81461036d57806311b5444f1461038c5780631d5de91c14610394575b5f80fd5b3480156102e6575f80fd5b506103096102f53660046132e9565b600c6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610329575f80fd5b50610309610338366004613302565b60076020525f908152604090205460ff1681565b348015610357575f80fd5b5061036b6103663660046132e9565b610a4d565b005b348015610378575f80fd5b5061036b6103873660046132e9565b610a77565b610309610ae5565b34801561039f575f80fd5b5061036b6103ae366004613302565b610f94565b3480156103be575f80fd5b506103d26103cd366004613319565b610fa1565b604051908152602001610315565b3480156103eb575f80fd5b5061036b6103fa366004613302565b611070565b34801561040a575f80fd5b5060035461041e906001600160a01b031681565b6040516001600160a01b039091168152602001610315565b348015610441575f80fd5b5061047e610450366004613302565b60096020525f9081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610315565b3480156104b1575f80fd5b5061036b6104c0366004613302565b61107e565b3480156104d0575f80fd5b506103d260135481565b3480156104e5575f80fd5b506103d260125481565b3480156104fa575f80fd5b5061036b610509366004613339565b611131565b348015610519575f80fd5b5061036b610528366004613302565b61118e565b348015610538575f80fd5b5061036b610547366004613302565b61126a565b348015610557575f80fd5b506103d2600f5481565b34801561056c575f80fd5b5061036b61057b366004613370565b6112a9565b34801561058b575f80fd5b5061036b61059a3660046133a1565b61138d565b3480156105aa575f80fd5b50426103d2565b3480156105bc575f80fd5b5061036b6105cb3660046132e9565b61140e565b3480156105db575f80fd5b5061036b611483565b3480156105ef575f80fd5b5061036b6114f9565b348015610603575f80fd5b506103d2610612366004613319565b61150c565b348015610622575f80fd5b506103d26106313660046133a1565b611553565b348015610641575f80fd5b5061036b6106503660046133d6565b61164c565b348015610660575f80fd5b5060055461041e906001600160a01b031681565b34801561067f575f80fd5b5061036b61068e3660046132e9565b61167f565b34801561069e575f80fd5b506103d260105481565b3480156106b3575f80fd5b506001546001600160a01b031661041e565b3480156106d0575f80fd5b506103d26116f4565b3480156106e4575f80fd5b5061036b6106f3366004613339565b611775565b348015610703575f80fd5b506103d260115481565b348015610718575f80fd5b50610309610727366004613302565b611864565b348015610737575f80fd5b506103d2600e5481565b34801561074c575f80fd5b5061030961075b366004613302565b611d3a565b34801561076b575f80fd5b506107c361077a3660046133a1565b600a602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610315565b348015610803575f80fd5b506103096108123660046132e9565b600b6020525f908152604090205460ff1681565b348015610831575f80fd5b5061036b6108403660046134b0565b6121d6565b348015610850575f80fd5b5061036b61085f366004613579565b612335565b34801561086f575f80fd5b5061036b61087e366004613302565b612354565b34801561088e575f80fd5b5061036b61089d3660046135a2565b61241c565b3480156108ad575f80fd5b5061036b6108bc3660046135d1565b6125c7565b3480156108cc575f80fd5b506103d2600d5481565b3480156108e1575f80fd5b506109456108f0366004613302565b600860208190525f918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154979098015495979496939592949193909260ff808216916101009004168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401521515610100830152151561012082015261014001610315565b34801561099e575f80fd5b5061036b6109ad3660046132e9565b6125f9565b3480156109bd575f80fd5b5061036b6109cc3660046132e9565b61266e565b3480156109dc575f80fd5b506103d26109eb366004613319565b6126e4565b3480156109fb575f80fd5b5060025461041e906001600160a01b031681565b348015610a1a575f80fd5b5060065461041e906001600160a01b031681565b348015610a39575f80fd5b506103d2610a48366004613319565b612716565b610a556127a7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610a7f6127a7565b6005546040514281526001600160a01b038381169216907f08bc1d537b06e3eae23dbd7475fa799c807a3eab60257650edc088d96d923d4c9060200160405180910390a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f6011545f81118015610af9575060115481145b610b1e5760405162461bcd60e51b8152600401610b15906135fb565b60405180910390fd5b601154610b2b813461150c565b5f828152600860208190526040909120015460ff161515600114610b615760405162461bcd60e51b8152600401610b1590613627565b5f81118015610b9157505f8281526008602052604090206004810154600590910154610b8d9190613667565b8111155b610bad5760405162461bcd60e51b8152600401610b159061367a565b610bb5612801565b6013545f90610bc490806136a7565b601254610bcf6116f4565b610bd990346136a7565b610be391906136a7565b610bed91906136be565b6011545f908152600860205260409020600681015460079091015491925090610c179083906136dd565b1115610c355760405162461bcd60e51b8152600401610b15906136f0565b335f908152600b602052604090205460ff1615610c645760405162461bcd60e51b8152600401610b1590613736565b6011545f9081526007602052604090205460ff1615610c955760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff161515600114610cce5760405162461bcd60e51b8152600401610b159061378e565b335f908152600c602052604090205460ff16610d1157335f908152600c60205260408120805460ff19166001179055600e805491610d0b836137c5565b91905055505b5f610d1e601154836126e4565b9050601054811015610d695760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e7420616d6f756e742160601b6044820152606401610b15565b6011545f9081526008602052604081206004018054839290610d8c9084906136dd565b90915550506011545f9081526008602052604081206007018054849290610db49084906136dd565b9250508190555081600f5f828254610dcc91906136dd565b9091555050335f908152600a60209081526040808320601154845290915290206002015415610e5e57335f908152600a60209081526040808320601154845290915281206002018054839290610e239084906136dd565b9091555050335f908152600a60209081526040808320601154845290915281208054849290610e539084906136dd565b90915550610f029050565b6040518060e001604052808381526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f610e9b3390565b6001600160a01b0316815260208082019290925260409081015f90812060115482528352819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555b6006546040516001600160a01b03909116903480156108fc02915f818181858888f19350505050158015610f38573d5f803e3d5ffd5b5060115460408051838152346020820152428183015290515f929133917f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d369181900360600190a4600195505050610f8e60015f55565b50505090565b610f9c6127a7565b601055565b5f828152600860205260408120600201548190610fbe90846136a7565b905060055f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103491906137dd565b61103f90600a6138dd565b6110476116f4565b61105191906136a7565b60135461105e90836136a7565b61106891906136be565b949350505050565b61107a3382612858565b5050565b6110866127a7565b5f818152600860205260409020600501546110d95760405162461bcd60e51b8152602060048201526013602482015272141c995cd85b1948191bdb89dd08195e1a5cdd606a1b6044820152606401610b15565b6011541561110d57601180545f908152600860208190526040808320426001909101559254825291902001805460ff191690555b5f81815260086020819052604090912042815501805460ff19166001179055601155565b6111396127a7565b5f858152600960205260409020848155600181018490556002810183905560030181905580611169846064613667565b61117391906136be565b5f958652600960205260409095206004019490945550505050565b805f8111801561119f575060115481145b6111bb5760405162461bcd60e51b8152600401610b15906135fb565b6111c36127a7565b5f8281526007602052604090205460ff16156112125760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c185d5cd95960921b6044820152606401610b15565b5f8281526007602052604090819020805460ff191660011790555182907f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f9061125e9042815260200190565b60405180910390a25050565b6112726127a7565b6006546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561107a573d5f803e3d5ffd5b6112b16127a7565b60015b600d54811015611352576001600160a01b0383165f908152600c602052604090205460ff166112f55760405162461bcd60e51b8152600401610b15906138eb565b6001600160a01b038381165f908152600a6020818152604080842086855280835281852060029081018054978a1687529484528286208887528452918520909101949094559290925290558061134a816137c5565b9150506112b4565b506001600160a01b039182165f908152600c6020526040808220805460ff199081169091559290931681529190912080549091166001179055565b6113956127a7565b60065460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af11580156113e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611409919061391b565b505050565b6114166127a7565b6001600160a01b0381166114615760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401610b15565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60015b600d548160ff16116114f657335f908152600a6020908152604080832060ff85168452909152902060020154158015906114d0575060ff81165f9081526009602052604090205442115b156114e4576114e2338260ff16612858565b505b806114ee81613936565b915050611486565b50565b6115016127a7565b61150a5f61327d565b565b5f8060135460135461151e91906136a7565b6012546115296116f4565b61153390866136a7565b61153d91906136a7565b61154791906136be565b905061106884826126e4565b6001600160a01b0382165f908152600a602090815260408083208484528252808320815160e0810183528154815260018201549381019390935260028101549183018290526003810154606084015260048101546080840152600581015460a08401526006015460c08301526115fe5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610b15565b6040810151806116425760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610b15565b9150505b92915050565b6116546127a7565b5f91825260086020819052604090922090910180549115156101000261ff0019909216919091179055565b6116876127a7565b6001600160a01b0381166116d25760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401610b15565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460408051633fabe5a360e21b815290515f9384936001600160a01b03169263feaf968c928183019260a0928290030181865afa15801561173a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175e919061396d565b505050915050806402540be40061164691906139b9565b61177d6127a7565b5f84116117b95760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610b15565b5f82116117fe5760405162461bcd60e51b815260206004820152601360248201527216995c9bc81d1bdad95b9cc81d1bc81cd95b1b606a1b6044820152606401610b15565b5f811161183b5760405162461bcd60e51b815260206004820152600b60248201526a05a65726f206861726361760ac1b6044820152606401610b15565b5f9485526008602052604090942060028101939093556003830191909155600582015560060155565b5f6011545f81118015611878575060115481145b6118945760405162461bcd60e51b8152600401610b15906135fb565b6011546118a181856126e4565b5f828152600860208190526040909120015460ff1615156001146118d75760405162461bcd60e51b8152600401610b1590613627565b5f8111801561190757505f82815260086020526040902060048101546005909101546119039190613667565b8111155b6119235760405162461bcd60e51b8152600401610b159061367a565b61192b612801565b6011545f9081526007602052604090205460ff161561195c5760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff1615156001146119955760405162461bcd60e51b8152600401610b159061378e565b335f908152600b602052604090205460ff16156119c45760405162461bcd60e51b8152600401610b1590613736565b6011545f90815260086020526040902060068101546007909101546119ea9087906136dd565b1115611a085760405162461bcd60e51b8152600401610b15906136f0565b335f908152600c602052604090205460ff16611a4b57335f908152600c60205260408120805460ff19166001179055600e805491611a45836137c5565b91905055505b5f611a58601154876126e4565b90508060085f60115481526020019081526020015f206004015f828254611a7f91906136dd565b90915550506011545f9081526008602052604081206007018054889290611aa79084906136dd565b9250508190555085600f5f828254611abf91906136dd565b9091555050601054811015611b0d5760405162461bcd60e51b815260206004820152601460248201527313195cdcc81d1a185b881b5a5b88185b5bdd5b9d60621b6044820152606401610b15565b335f908152600a60209081526040808320601154845290915290206002015415611b9a57335f908152600a60209081526040808320601154845290915281206002018054839290611b5f9084906136dd565b9091555050335f908152600a60209081526040808320601154845290915281208054889290611b8f9084906136dd565b90915550611c3e9050565b6040518060e001604052808781526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f611bd73390565b6001600160a01b0316815260208082019290925260409081015f90812060115482528352819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555b6002546006546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018990529116906323b872dd906064016020604051808303815f875af1158015611c96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cba919061391b565b506002546011546001600160a01b0390911690335b6001600160a01b03167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36848a42604051611d1c939291909283526020830191909152604082015260600190565b60405180910390a46001945050611d3260015f55565b505050919050565b5f6011545f81118015611d4e575060115481145b611d6a5760405162461bcd60e51b8152600401610b15906135fb565b601154611d7781856126e4565b5f828152600860208190526040909120015460ff161515600114611dad5760405162461bcd60e51b8152600401610b1590613627565b5f81118015611ddd57505f8281526008602052604090206004810154600590910154611dd99190613667565b8111155b611df95760405162461bcd60e51b8152600401610b159061367a565b611e01612801565b6011545f9081526007602052604090205460ff1615611e325760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff161515600114611e6b5760405162461bcd60e51b8152600401610b159061378e565b6011545f9081526008602052604090206006810154600790910154611e919087906136dd565b1115611eaf5760405162461bcd60e51b8152600401610b15906136f0565b335f908152600b602052604090205460ff1615611ede5760405162461bcd60e51b8152600401610b1590613736565b335f908152600c602052604090205460ff16611f2157335f908152600c60205260408120805460ff19166001179055600e805491611f1b836137c5565b91905055505b5f611f2e601154876126e4565b90508060085f60115481526020019081526020015f206004015f828254611f5591906136dd565b90915550506011545f9081526008602052604081206007018054889290611f7d9084906136dd565b9250508190555085600f5f828254611f9591906136dd565b9091555050601054811015611fe35760405162461bcd60e51b815260206004820152601460248201527313195cdcc81d1a185b881b5a5b88185b5bdd5b9d60621b6044820152606401610b15565b335f908152600a6020908152604080832060115484529091529020600201541561207057335f908152600a602090815260408083206011548452909152812060020180548392906120359084906136dd565b9091555050335f908152600a602090815260408083206011548452909152812080548892906120659084906136dd565b909155506121419050565b6040518060e001604052808781526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f6120ad3390565b6001600160a01b0316815260208082019290925260409081015f9081206011548252835281812084518155848401516001820155848301516002820155606085015160038201556080850151600482015560a0850151600582015560c090940151600690940193909355338352600c90915290205460ff166121415760405162461bcd60e51b8152600401610b15906138eb565b6003546006546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018990529116906323b872dd906064016020604051808303815f875af1158015612199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bd919061391b565b506003546011546001600160a01b039091169033611ccf565b6121de6127a7565b5f5b855181101561232d576040518060a00160405280868381518110612206576122066139e8565b60200260200101518152602001858381518110612225576122256139e8565b60200260200101518152602001848381518110612244576122446139e8565b60200260200101518152602001838381518110612263576122636139e8565b60200260200101518152602001838381518110612282576122826139e8565b602002602001015186848151811061229c5761229c6139e8565b602002602001015160646122b09190613667565b6122ba91906136be565b81525060095f8884815181106122d2576122d26139e8565b602002602001015181526020019081526020015f205f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508080612325906137c5565b9150506121e0565b505050505050565b61233d6127a7565b5f9283526008602052604090922090815560010155565b805f81118015612365575060115481145b6123815760405162461bcd60e51b8152600401610b15906135fb565b6123896127a7565b5f8281526007602052604090205460ff166123d35760405162461bcd60e51b815260206004820152600a602482015269139bdd081c185d5cd95960b21b6044820152606401610b15565b5f8281526007602052604090819020805460ff191690555182907ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d9061125e9042815260200190565b6124246127a7565b5f84116124605760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610b15565b5f82116124a55760405162461bcd60e51b815260206004820152601360248201527216995c9bc81d1bdad95b9cc81d1bc81cd95b1b606a1b6044820152606401610b15565b600d8054905f6124b4836137c5565b909155505060408051610140810182525f8082526020808301828152838501898152606085018981526080860185815260a087018a815260c088018a815260e08901888152610100808b018a81526101208c018b8152600d80548d5260089b8c90528e8d209d518e55995160018e0155975160028d0155955160038c0155935160048b0155915160058a015551600689015551600788015590519590930180549151151590930261ff00199515159590951661ffff1990911617939093179055905491517f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8916125b99186919081909283526020830191909152604082015260600190565b60405180910390a250505050565b6125cf6127a7565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6126016127a7565b6001600160a01b03811661264c5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401610b15565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6126766127a7565b6001600160a01b0381166126db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b15565b6114f68161327d565b6012545f8381526008602052604081206002015490919061270590846136a7565b61270f91906136be565b9392505050565b6005546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa15801561275d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278191906137dd565b61278c90600a6138dd565b5f8481526008602052604090206002015461270590846136a7565b6001546001600160a01b0316331461150a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b15565b60025f54036128525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b15565b60025f55565b335f908152600c602052604081205460ff166128865760405162461bcd60e51b8152600401610b15906138eb565b5f6128918484611553565b90505f81116128d85760405162461bcd60e51b8152602060048201526013602482015272139bc818db185a5b58589b1948185b5bdd5b9d606a1b6044820152606401610b15565b6001600160a01b0384165f908152600b602052604090205460ff16156129105760405162461bcd60e51b8152600401610b1590613736565b6005546001600160a01b03166129685760405162461bcd60e51b815260206004820152601d60248201527f50726573616c6520746f6b656e2061646472657373206e6f74207365740000006044820152606401610b15565b6005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156129ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d291906139fc565b811115612a2b5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e747261636044820152601d60fa1b6064820152608401610b15565b5f838152600860208190526040909120015460ff610100909104161515600114612a8d5760405162461bcd60e51b8152602060048201526013602482015272436c61696d206973206e6f7420656e61626c6560681b6044820152606401610b15565b5f838152600960205260409020544211612ae95760405162461bcd60e51b815260206004820152601f60248201527f56657374696e672074696d65206973206e6f74207374617274656420796574006044820152606401610b15565b6001600160a01b0384165f908152600a602090815260408083208684529091528120600501548103612cd0575f848152600960205260409020600101546103e890612b3490846136a7565b612b3e91906136be565b5f858152600960205260409020600301549091506103e890612b6090846136a7565b612b6a91906136be565b6001600160a01b038681165f818152600a602090815260408083208a845290915280822060060194909455600554935163a9059cbb60e01b8152600481019290925260248201859052929091169063a9059cbb906044016020604051808303815f875af1158015612bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c01919061391b565b905080612c205760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0386165f908152600a6020908152604080832088845290915281206002018054849290612c55908490613667565b90915550506001600160a01b0386165f908152600a6020908152604080832088845290915281206004018054849290612c8f9084906136dd565b90915550506001600160a01b0386165f908152600a602090815260408083208884529091528120600501805491612cc5836137c5565b91905055505061322d565b6001600160a01b0385165f908152600a60209081526040808320878452909152902060068101546002909101541115612f9c575f84815260096020526040812054612d1b9042613667565b5f8681526009602052604081206002015491925090612d3a90836136be565b5f87815260096020526040902060040154909150811115612d6857505f858152600960205260409020600401545b6001600160a01b0387165f908152600a60209081526040808320898452909152812060060154612d9890836136a7565b6001600160a01b0389165f908152600a602090815260408083208b8452909152902060030154909150612dcb9082613667565b93505f8411612e1c5760405162461bcd60e51b815260206004820152601b60248201527f506c6561736520776169742074696c6c206e65787420636c61696d00000000006044820152606401610b15565b60055460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018790525f92169063a9059cbb906044016020604051808303815f875af1158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e90919061391b565b905080612eaf5760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0389165f908152600a602090815260408083208b845290915281206002018054879290612ee4908490613667565b90915550506001600160a01b0389165f908152600a602090815260408083208b845290915281206003018054879290612f1e9084906136dd565b90915550506001600160a01b0389165f908152600a602090815260408083208b845290915281206004018054879290612f589084906136dd565b90915550506001600160a01b0389165f908152600a602090815260408083208b84529091528120600501805491612f8e836137c5565b91905055505050505061322d565b5f84815260096020526040812054612fb49042613667565b5f8681526009602052604081206002015491925090612fd390836136be565b5f87815260096020526040902060040154909150612ff29060016136dd565b8111156131eb576001600160a01b0387165f908152600a6020908152604080832089845290915290206002015492508261306e5760405162461bcd60e51b815260206004820152601b60248201527f506c6561736520776169742074696c6c206e65787420636c61696d00000000006044820152606401610b15565b60055460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018690525f92169063a9059cbb906044016020604051808303815f875af11580156130be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e2919061391b565b9050806131015760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0388165f908152600a602090815260408083208a845290915281206002018054869290613136908490613667565b90915550506001600160a01b0388165f908152600a602090815260408083208a8452909152812060040180548692906131709084906136dd565b90915550506001600160a01b0388165f908152600a602090815260408083208a8452909152812060030180548692906131aa9084906136dd565b90915550506001600160a01b0388165f908152600a602090815260408083208a845290915281206005018054916131e0836137c5565b91905055505061322a565b60405162461bcd60e51b81526020600482015260146024820152735761697420666f72206e65787420636c6169696d60601b6044820152606401610b15565b50505b6040805182815242602082015285916001600160a01b038816917fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c548910160405180910390a3506001949350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80356001600160a01b03811681146132e4575f80fd5b919050565b5f602082840312156132f9575f80fd5b61270f826132ce565b5f60208284031215613312575f80fd5b5035919050565b5f806040838503121561332a575f80fd5b50508035926020909101359150565b5f805f805f60a0868803121561334d575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f8060408385031215613381575f80fd5b61338a836132ce565b9150613398602084016132ce565b90509250929050565b5f80604083850312156133b2575f80fd5b6133bb836132ce565b946020939093013593505050565b80151581146114f6575f80fd5b5f80604083850312156133e7575f80fd5b8235915060208301356133f9816133c9565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112613427575f80fd5b8135602067ffffffffffffffff8083111561344457613444613404565b8260051b604051601f19603f8301168101818110848211171561346957613469613404565b604052938452858101830193838101925087851115613486575f80fd5b83870191505b848210156134a55781358352918301919083019061348c565b979650505050505050565b5f805f805f60a086880312156134c4575f80fd5b853567ffffffffffffffff808211156134db575f80fd5b6134e789838a01613418565b965060208801359150808211156134fc575f80fd5b61350889838a01613418565b9550604088013591508082111561351d575f80fd5b61352989838a01613418565b9450606088013591508082111561353e575f80fd5b61354a89838a01613418565b9350608088013591508082111561355f575f80fd5b5061356c88828901613418565b9150509295509295909350565b5f805f6060848603121561358b575f80fd5b505081359360208301359350604090920135919050565b5f805f80608085870312156135b5575f80fd5b5050823594602084013594506040840135936060013592509050565b5f80604083850312156135e2575f80fd5b6135eb836132ce565b915060208301356133f9816133c9565b602080825260129082015271125b9d985b1a59081c1c995cd85b19481a5960721b604082015260600190565b60208082526012908201527170726553416c65206e6f742041637469766560701b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561164657611646613653565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b808202811582820484141761164657611646613653565b5f826136d857634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561164657611646613653565b60208082526026908201527f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860408201526506172646361760d41b606082015260800190565b6020808252601690820152751058d8dbdd5b9d081a5cc8189b1858dad31a5cdd195960521b604082015260600190565b6020808252600e908201526d141c995cd85b19481c185d5cd95960921b604082015260600190565b60208082526019908201527f50726573616c65206973206e6f74206163746976652079657400000000000000604082015260600190565b5f600182016137d6576137d6613653565b5060010190565b5f602082840312156137ed575f80fd5b815160ff8116811461270f575f80fd5b600181815b8085111561383757815f190482111561381d5761381d613653565b8085161561382a57918102915b93841c9390800290613802565b509250929050565b5f8261384d57506001611646565b8161385957505f611646565b816001811461386f576002811461387957613895565b6001915050611646565b60ff84111561388a5761388a613653565b50506001821b611646565b5060208310610133831016604e8410600b84101617156138b8575081810a611646565b6138c283836137fd565b805f19048211156138d5576138d5613653565b029392505050565b5f61270f60ff84168361383f565b602080825260169082015275155cd95c881b9bdd0818481c185c9d1a58da5c185b9d60521b604082015260600190565b5f6020828403121561392b575f80fd5b815161270f816133c9565b5f60ff821660ff810361394b5761394b613653565b60010192915050565b805169ffffffffffffffffffff811681146132e4575f80fd5b5f805f805f60a08688031215613981575f80fd5b61398a86613954565b94506020860151935060408601519250606086015191506139ad60808701613954565b90509295509295909350565b8082025f8212600160ff1b841416156139d4576139d4613653565b818105831482151761164657611646613653565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613a0c575f80fd5b5051919050565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60408201526060019056fea2646970667358221220fc7d2b63adf86d214922cbc8df3389cbef8f5f73e8efd3ac102ed9a97f704a1764736f6c634300081400330000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000096e53a42c959f4c30be135ff1ca4c059dfeefeaf

Deployed Bytecode

0x6080604052600436106102d7575f3560e01c80637f1d24c811610189578063c8f74e11116100d8578063e6ab143411610092578063f309fed91161006d578063f309fed9146109d1578063f597573f146109f0578063fb4aa0a114610a0f578063fe9f676e14610a2e575f80fd5b8063e6ab1434146108d6578063ecf5f43714610993578063f2fde38b146109b2575f80fd5b8063c8f74e1114610826578063cf87367714610845578063d01608c114610864578063d099850a14610883578063e0cef1b0146108a2578063e18e84f9146108c1575f80fd5b80639752f3cb11610143578063aa1c3aa51161011e578063aa1c3aa51461072c578063aeccf73514610741578063b04c734614610760578063b36d6919146107f8575f80fd5b80639752f3cb146106d9578063a05d03fd146106f8578063a7c601601461070d575f80fd5b80637f1d24c814610636578063833cde52146106555780638561c315146106745780638d79e66d146106935780638da5cb5b146106a85780638e15f473146106c5575f80fd5b806348bf4fcf11610245578063680f2e4f116101ff5780637108b385116101da5780637108b385146105d0578063715018a6146105e4578063718a1962146105f857806379b8d93814610617575f80fd5b8063680f2e4f146105805780636f891f821461059f5780636fb4adff146105b1575f80fd5b806348bf4fcf146104da5780634a3bf6c9146104ef5780634a6413f71461050e578063582b57231461052d57806358f985851461054c5780635dfd59f614610561575f80fd5b80632127fe04116102965780632127fe04146103b357806323b221a0146103e057806325312e54146103ff5780632ffac82c1461043657806338c67b73146104a657806339764363146104c5575f80fd5b806213eb4b146102db578062dde10e1461031e5780630d07cc301461034c5780630ec809a81461036d57806311b5444f1461038c5780631d5de91c14610394575b5f80fd5b3480156102e6575f80fd5b506103096102f53660046132e9565b600c6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610329575f80fd5b50610309610338366004613302565b60076020525f908152604090205460ff1681565b348015610357575f80fd5b5061036b6103663660046132e9565b610a4d565b005b348015610378575f80fd5b5061036b6103873660046132e9565b610a77565b610309610ae5565b34801561039f575f80fd5b5061036b6103ae366004613302565b610f94565b3480156103be575f80fd5b506103d26103cd366004613319565b610fa1565b604051908152602001610315565b3480156103eb575f80fd5b5061036b6103fa366004613302565b611070565b34801561040a575f80fd5b5060035461041e906001600160a01b031681565b6040516001600160a01b039091168152602001610315565b348015610441575f80fd5b5061047e610450366004613302565b60096020525f9081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610315565b3480156104b1575f80fd5b5061036b6104c0366004613302565b61107e565b3480156104d0575f80fd5b506103d260135481565b3480156104e5575f80fd5b506103d260125481565b3480156104fa575f80fd5b5061036b610509366004613339565b611131565b348015610519575f80fd5b5061036b610528366004613302565b61118e565b348015610538575f80fd5b5061036b610547366004613302565b61126a565b348015610557575f80fd5b506103d2600f5481565b34801561056c575f80fd5b5061036b61057b366004613370565b6112a9565b34801561058b575f80fd5b5061036b61059a3660046133a1565b61138d565b3480156105aa575f80fd5b50426103d2565b3480156105bc575f80fd5b5061036b6105cb3660046132e9565b61140e565b3480156105db575f80fd5b5061036b611483565b3480156105ef575f80fd5b5061036b6114f9565b348015610603575f80fd5b506103d2610612366004613319565b61150c565b348015610622575f80fd5b506103d26106313660046133a1565b611553565b348015610641575f80fd5b5061036b6106503660046133d6565b61164c565b348015610660575f80fd5b5060055461041e906001600160a01b031681565b34801561067f575f80fd5b5061036b61068e3660046132e9565b61167f565b34801561069e575f80fd5b506103d260105481565b3480156106b3575f80fd5b506001546001600160a01b031661041e565b3480156106d0575f80fd5b506103d26116f4565b3480156106e4575f80fd5b5061036b6106f3366004613339565b611775565b348015610703575f80fd5b506103d260115481565b348015610718575f80fd5b50610309610727366004613302565b611864565b348015610737575f80fd5b506103d2600e5481565b34801561074c575f80fd5b5061030961075b366004613302565b611d3a565b34801561076b575f80fd5b506107c361077a3660046133a1565b600a602052815f5260405f20602052805f5260405f205f9150915050805f0154908060010154908060020154908060030154908060040154908060050154908060060154905087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610315565b348015610803575f80fd5b506103096108123660046132e9565b600b6020525f908152604090205460ff1681565b348015610831575f80fd5b5061036b6108403660046134b0565b6121d6565b348015610850575f80fd5b5061036b61085f366004613579565b612335565b34801561086f575f80fd5b5061036b61087e366004613302565b612354565b34801561088e575f80fd5b5061036b61089d3660046135a2565b61241c565b3480156108ad575f80fd5b5061036b6108bc3660046135d1565b6125c7565b3480156108cc575f80fd5b506103d2600d5481565b3480156108e1575f80fd5b506109456108f0366004613302565b600860208190525f918252604090912080546001820154600283015460038401546004850154600586015460068701546007880154979098015495979496939592949193909260ff808216916101009004168a565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401521515610100830152151561012082015261014001610315565b34801561099e575f80fd5b5061036b6109ad3660046132e9565b6125f9565b3480156109bd575f80fd5b5061036b6109cc3660046132e9565b61266e565b3480156109dc575f80fd5b506103d26109eb366004613319565b6126e4565b3480156109fb575f80fd5b5060025461041e906001600160a01b031681565b348015610a1a575f80fd5b5060065461041e906001600160a01b031681565b348015610a39575f80fd5b506103d2610a48366004613319565b612716565b610a556127a7565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610a7f6127a7565b6005546040514281526001600160a01b038381169216907f08bc1d537b06e3eae23dbd7475fa799c807a3eab60257650edc088d96d923d4c9060200160405180910390a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f6011545f81118015610af9575060115481145b610b1e5760405162461bcd60e51b8152600401610b15906135fb565b60405180910390fd5b601154610b2b813461150c565b5f828152600860208190526040909120015460ff161515600114610b615760405162461bcd60e51b8152600401610b1590613627565b5f81118015610b9157505f8281526008602052604090206004810154600590910154610b8d9190613667565b8111155b610bad5760405162461bcd60e51b8152600401610b159061367a565b610bb5612801565b6013545f90610bc490806136a7565b601254610bcf6116f4565b610bd990346136a7565b610be391906136a7565b610bed91906136be565b6011545f908152600860205260409020600681015460079091015491925090610c179083906136dd565b1115610c355760405162461bcd60e51b8152600401610b15906136f0565b335f908152600b602052604090205460ff1615610c645760405162461bcd60e51b8152600401610b1590613736565b6011545f9081526007602052604090205460ff1615610c955760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff161515600114610cce5760405162461bcd60e51b8152600401610b159061378e565b335f908152600c602052604090205460ff16610d1157335f908152600c60205260408120805460ff19166001179055600e805491610d0b836137c5565b91905055505b5f610d1e601154836126e4565b9050601054811015610d695760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e7420616d6f756e742160601b6044820152606401610b15565b6011545f9081526008602052604081206004018054839290610d8c9084906136dd565b90915550506011545f9081526008602052604081206007018054849290610db49084906136dd565b9250508190555081600f5f828254610dcc91906136dd565b9091555050335f908152600a60209081526040808320601154845290915290206002015415610e5e57335f908152600a60209081526040808320601154845290915281206002018054839290610e239084906136dd565b9091555050335f908152600a60209081526040808320601154845290915281208054849290610e539084906136dd565b90915550610f029050565b6040518060e001604052808381526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f610e9b3390565b6001600160a01b0316815260208082019290925260409081015f90812060115482528352819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555b6006546040516001600160a01b03909116903480156108fc02915f818181858888f19350505050158015610f38573d5f803e3d5ffd5b5060115460408051838152346020820152428183015290515f929133917f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d369181900360600190a4600195505050610f8e60015f55565b50505090565b610f9c6127a7565b601055565b5f828152600860205260408120600201548190610fbe90846136a7565b905060055f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611010573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103491906137dd565b61103f90600a6138dd565b6110476116f4565b61105191906136a7565b60135461105e90836136a7565b61106891906136be565b949350505050565b61107a3382612858565b5050565b6110866127a7565b5f818152600860205260409020600501546110d95760405162461bcd60e51b8152602060048201526013602482015272141c995cd85b1948191bdb89dd08195e1a5cdd606a1b6044820152606401610b15565b6011541561110d57601180545f908152600860208190526040808320426001909101559254825291902001805460ff191690555b5f81815260086020819052604090912042815501805460ff19166001179055601155565b6111396127a7565b5f858152600960205260409020848155600181018490556002810183905560030181905580611169846064613667565b61117391906136be565b5f958652600960205260409095206004019490945550505050565b805f8111801561119f575060115481145b6111bb5760405162461bcd60e51b8152600401610b15906135fb565b6111c36127a7565b5f8281526007602052604090205460ff16156112125760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c185d5cd95960921b6044820152606401610b15565b5f8281526007602052604090819020805460ff191660011790555182907f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f9061125e9042815260200190565b60405180910390a25050565b6112726127a7565b6006546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561107a573d5f803e3d5ffd5b6112b16127a7565b60015b600d54811015611352576001600160a01b0383165f908152600c602052604090205460ff166112f55760405162461bcd60e51b8152600401610b15906138eb565b6001600160a01b038381165f908152600a6020818152604080842086855280835281852060029081018054978a1687529484528286208887528452918520909101949094559290925290558061134a816137c5565b9150506112b4565b506001600160a01b039182165f908152600c6020526040808220805460ff199081169091559290931681529190912080549091166001179055565b6113956127a7565b60065460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af11580156113e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611409919061391b565b505050565b6114166127a7565b6001600160a01b0381166114615760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b6044820152606401610b15565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60015b600d548160ff16116114f657335f908152600a6020908152604080832060ff85168452909152902060020154158015906114d0575060ff81165f9081526009602052604090205442115b156114e4576114e2338260ff16612858565b505b806114ee81613936565b915050611486565b50565b6115016127a7565b61150a5f61327d565b565b5f8060135460135461151e91906136a7565b6012546115296116f4565b61153390866136a7565b61153d91906136a7565b61154791906136be565b905061106884826126e4565b6001600160a01b0382165f908152600a602090815260408083208484528252808320815160e0810183528154815260018201549381019390935260028101549183018290526003810154606084015260048101546080840152600581015460a08401526006015460c08301526115fe5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b6044820152606401610b15565b6040810151806116425760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b6044820152606401610b15565b9150505b92915050565b6116546127a7565b5f91825260086020819052604090922090910180549115156101000261ff0019909216919091179055565b6116876127a7565b6001600160a01b0381166116d25760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401610b15565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460408051633fabe5a360e21b815290515f9384936001600160a01b03169263feaf968c928183019260a0928290030181865afa15801561173a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175e919061396d565b505050915050806402540be40061164691906139b9565b61177d6127a7565b5f84116117b95760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610b15565b5f82116117fe5760405162461bcd60e51b815260206004820152601360248201527216995c9bc81d1bdad95b9cc81d1bc81cd95b1b606a1b6044820152606401610b15565b5f811161183b5760405162461bcd60e51b815260206004820152600b60248201526a05a65726f206861726361760ac1b6044820152606401610b15565b5f9485526008602052604090942060028101939093556003830191909155600582015560060155565b5f6011545f81118015611878575060115481145b6118945760405162461bcd60e51b8152600401610b15906135fb565b6011546118a181856126e4565b5f828152600860208190526040909120015460ff1615156001146118d75760405162461bcd60e51b8152600401610b1590613627565b5f8111801561190757505f82815260086020526040902060048101546005909101546119039190613667565b8111155b6119235760405162461bcd60e51b8152600401610b159061367a565b61192b612801565b6011545f9081526007602052604090205460ff161561195c5760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff1615156001146119955760405162461bcd60e51b8152600401610b159061378e565b335f908152600b602052604090205460ff16156119c45760405162461bcd60e51b8152600401610b1590613736565b6011545f90815260086020526040902060068101546007909101546119ea9087906136dd565b1115611a085760405162461bcd60e51b8152600401610b15906136f0565b335f908152600c602052604090205460ff16611a4b57335f908152600c60205260408120805460ff19166001179055600e805491611a45836137c5565b91905055505b5f611a58601154876126e4565b90508060085f60115481526020019081526020015f206004015f828254611a7f91906136dd565b90915550506011545f9081526008602052604081206007018054889290611aa79084906136dd565b9250508190555085600f5f828254611abf91906136dd565b9091555050601054811015611b0d5760405162461bcd60e51b815260206004820152601460248201527313195cdcc81d1a185b881b5a5b88185b5bdd5b9d60621b6044820152606401610b15565b335f908152600a60209081526040808320601154845290915290206002015415611b9a57335f908152600a60209081526040808320601154845290915281206002018054839290611b5f9084906136dd565b9091555050335f908152600a60209081526040808320601154845290915281208054889290611b8f9084906136dd565b90915550611c3e9050565b6040518060e001604052808781526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f611bd73390565b6001600160a01b0316815260208082019290925260409081015f90812060115482528352819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0909101516006909101555b6002546006546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018990529116906323b872dd906064016020604051808303815f875af1158015611c96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cba919061391b565b506002546011546001600160a01b0390911690335b6001600160a01b03167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d36848a42604051611d1c939291909283526020830191909152604082015260600190565b60405180910390a46001945050611d3260015f55565b505050919050565b5f6011545f81118015611d4e575060115481145b611d6a5760405162461bcd60e51b8152600401610b15906135fb565b601154611d7781856126e4565b5f828152600860208190526040909120015460ff161515600114611dad5760405162461bcd60e51b8152600401610b1590613627565b5f81118015611ddd57505f8281526008602052604090206004810154600590910154611dd99190613667565b8111155b611df95760405162461bcd60e51b8152600401610b159061367a565b611e01612801565b6011545f9081526007602052604090205460ff1615611e325760405162461bcd60e51b8152600401610b1590613766565b6011545f908152600860208190526040909120015460ff161515600114611e6b5760405162461bcd60e51b8152600401610b159061378e565b6011545f9081526008602052604090206006810154600790910154611e919087906136dd565b1115611eaf5760405162461bcd60e51b8152600401610b15906136f0565b335f908152600b602052604090205460ff1615611ede5760405162461bcd60e51b8152600401610b1590613736565b335f908152600c602052604090205460ff16611f2157335f908152600c60205260408120805460ff19166001179055600e805491611f1b836137c5565b91905055505b5f611f2e601154876126e4565b90508060085f60115481526020019081526020015f206004015f828254611f5591906136dd565b90915550506011545f9081526008602052604081206007018054889290611f7d9084906136dd565b9250508190555085600f5f828254611f9591906136dd565b9091555050601054811015611fe35760405162461bcd60e51b815260206004820152601460248201527313195cdcc81d1a185b881b5a5b88185b5bdd5b9d60621b6044820152606401610b15565b335f908152600a6020908152604080832060115484529091529020600201541561207057335f908152600a602090815260408083206011548452909152812060020180548392906120359084906136dd565b9091555050335f908152600a602090815260408083206011548452909152812080548892906120659084906136dd565b909155506121419050565b6040518060e001604052808781526020015f81526020018281526020015f81526020015f81526020015f81526020015f815250600a5f6120ad3390565b6001600160a01b0316815260208082019290925260409081015f9081206011548252835281812084518155848401516001820155848301516002820155606085015160038201556080850151600482015560a0850151600582015560c090940151600690940193909355338352600c90915290205460ff166121415760405162461bcd60e51b8152600401610b15906138eb565b6003546006546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018990529116906323b872dd906064016020604051808303815f875af1158015612199573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bd919061391b565b506003546011546001600160a01b039091169033611ccf565b6121de6127a7565b5f5b855181101561232d576040518060a00160405280868381518110612206576122066139e8565b60200260200101518152602001858381518110612225576122256139e8565b60200260200101518152602001848381518110612244576122446139e8565b60200260200101518152602001838381518110612263576122636139e8565b60200260200101518152602001838381518110612282576122826139e8565b602002602001015186848151811061229c5761229c6139e8565b602002602001015160646122b09190613667565b6122ba91906136be565b81525060095f8884815181106122d2576122d26139e8565b602002602001015181526020019081526020015f205f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508080612325906137c5565b9150506121e0565b505050505050565b61233d6127a7565b5f9283526008602052604090922090815560010155565b805f81118015612365575060115481145b6123815760405162461bcd60e51b8152600401610b15906135fb565b6123896127a7565b5f8281526007602052604090205460ff166123d35760405162461bcd60e51b815260206004820152600a602482015269139bdd081c185d5cd95960b21b6044820152606401610b15565b5f8281526007602052604090819020805460ff191690555182907ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d9061125e9042815260200190565b6124246127a7565b5f84116124605760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610b15565b5f82116124a55760405162461bcd60e51b815260206004820152601360248201527216995c9bc81d1bdad95b9cc81d1bc81cd95b1b606a1b6044820152606401610b15565b600d8054905f6124b4836137c5565b909155505060408051610140810182525f8082526020808301828152838501898152606085018981526080860185815260a087018a815260c088018a815260e08901888152610100808b018a81526101208c018b8152600d80548d5260089b8c90528e8d209d518e55995160018e0155975160028d0155955160038c0155935160048b0155915160058a015551600689015551600788015590519590930180549151151590930261ff00199515159590951661ffff1990911617939093179055905491517f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8916125b99186919081909283526020830191909152604082015260600190565b60405180910390a250505050565b6125cf6127a7565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6126016127a7565b6001600160a01b03811661264c5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401610b15565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6126766127a7565b6001600160a01b0381166126db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b15565b6114f68161327d565b6012545f8381526008602052604081206002015490919061270590846136a7565b61270f91906136be565b9392505050565b6005546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa15801561275d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278191906137dd565b61278c90600a6138dd565b5f8481526008602052604090206002015461270590846136a7565b6001546001600160a01b0316331461150a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b15565b60025f54036128525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b15565b60025f55565b335f908152600c602052604081205460ff166128865760405162461bcd60e51b8152600401610b15906138eb565b5f6128918484611553565b90505f81116128d85760405162461bcd60e51b8152602060048201526013602482015272139bc818db185a5b58589b1948185b5bdd5b9d606a1b6044820152606401610b15565b6001600160a01b0384165f908152600b602052604090205460ff16156129105760405162461bcd60e51b8152600401610b1590613736565b6005546001600160a01b03166129685760405162461bcd60e51b815260206004820152601d60248201527f50726573616c6520746f6b656e2061646472657373206e6f74207365740000006044820152606401610b15565b6005546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156129ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d291906139fc565b811115612a2b5760405162461bcd60e51b815260206004820152602160248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e747261636044820152601d60fa1b6064820152608401610b15565b5f838152600860208190526040909120015460ff610100909104161515600114612a8d5760405162461bcd60e51b8152602060048201526013602482015272436c61696d206973206e6f7420656e61626c6560681b6044820152606401610b15565b5f838152600960205260409020544211612ae95760405162461bcd60e51b815260206004820152601f60248201527f56657374696e672074696d65206973206e6f74207374617274656420796574006044820152606401610b15565b6001600160a01b0384165f908152600a602090815260408083208684529091528120600501548103612cd0575f848152600960205260409020600101546103e890612b3490846136a7565b612b3e91906136be565b5f858152600960205260409020600301549091506103e890612b6090846136a7565b612b6a91906136be565b6001600160a01b038681165f818152600a602090815260408083208a845290915280822060060194909455600554935163a9059cbb60e01b8152600481019290925260248201859052929091169063a9059cbb906044016020604051808303815f875af1158015612bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c01919061391b565b905080612c205760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0386165f908152600a6020908152604080832088845290915281206002018054849290612c55908490613667565b90915550506001600160a01b0386165f908152600a6020908152604080832088845290915281206004018054849290612c8f9084906136dd565b90915550506001600160a01b0386165f908152600a602090815260408083208884529091528120600501805491612cc5836137c5565b91905055505061322d565b6001600160a01b0385165f908152600a60209081526040808320878452909152902060068101546002909101541115612f9c575f84815260096020526040812054612d1b9042613667565b5f8681526009602052604081206002015491925090612d3a90836136be565b5f87815260096020526040902060040154909150811115612d6857505f858152600960205260409020600401545b6001600160a01b0387165f908152600a60209081526040808320898452909152812060060154612d9890836136a7565b6001600160a01b0389165f908152600a602090815260408083208b8452909152902060030154909150612dcb9082613667565b93505f8411612e1c5760405162461bcd60e51b815260206004820152601b60248201527f506c6561736520776169742074696c6c206e65787420636c61696d00000000006044820152606401610b15565b60055460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018790525f92169063a9059cbb906044016020604051808303815f875af1158015612e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e90919061391b565b905080612eaf5760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0389165f908152600a602090815260408083208b845290915281206002018054879290612ee4908490613667565b90915550506001600160a01b0389165f908152600a602090815260408083208b845290915281206003018054879290612f1e9084906136dd565b90915550506001600160a01b0389165f908152600a602090815260408083208b845290915281206004018054879290612f589084906136dd565b90915550506001600160a01b0389165f908152600a602090815260408083208b84529091528120600501805491612f8e836137c5565b91905055505050505061322d565b5f84815260096020526040812054612fb49042613667565b5f8681526009602052604081206002015491925090612fd390836136be565b5f87815260096020526040902060040154909150612ff29060016136dd565b8111156131eb576001600160a01b0387165f908152600a6020908152604080832089845290915290206002015492508261306e5760405162461bcd60e51b815260206004820152601b60248201527f506c6561736520776169742074696c6c206e65787420636c61696d00000000006044820152606401610b15565b60055460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018690525f92169063a9059cbb906044016020604051808303815f875af11580156130be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e2919061391b565b9050806131015760405162461bcd60e51b8152600401610b1590613a13565b6001600160a01b0388165f908152600a602090815260408083208a845290915281206002018054869290613136908490613667565b90915550506001600160a01b0388165f908152600a602090815260408083208a8452909152812060040180548692906131709084906136dd565b90915550506001600160a01b0388165f908152600a602090815260408083208a8452909152812060030180548692906131aa9084906136dd565b90915550506001600160a01b0388165f908152600a602090815260408083208a845290915281206005018054916131e0836137c5565b91905055505061322a565b60405162461bcd60e51b81526020600482015260146024820152735761697420666f72206e65787420636c6169696d60601b6044820152606401610b15565b50505b6040805182815242602082015285916001600160a01b038816917fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c548910160405180910390a3506001949350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80356001600160a01b03811681146132e4575f80fd5b919050565b5f602082840312156132f9575f80fd5b61270f826132ce565b5f60208284031215613312575f80fd5b5035919050565b5f806040838503121561332a575f80fd5b50508035926020909101359150565b5f805f805f60a0868803121561334d575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f8060408385031215613381575f80fd5b61338a836132ce565b9150613398602084016132ce565b90509250929050565b5f80604083850312156133b2575f80fd5b6133bb836132ce565b946020939093013593505050565b80151581146114f6575f80fd5b5f80604083850312156133e7575f80fd5b8235915060208301356133f9816133c9565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112613427575f80fd5b8135602067ffffffffffffffff8083111561344457613444613404565b8260051b604051601f19603f8301168101818110848211171561346957613469613404565b604052938452858101830193838101925087851115613486575f80fd5b83870191505b848210156134a55781358352918301919083019061348c565b979650505050505050565b5f805f805f60a086880312156134c4575f80fd5b853567ffffffffffffffff808211156134db575f80fd5b6134e789838a01613418565b965060208801359150808211156134fc575f80fd5b61350889838a01613418565b9550604088013591508082111561351d575f80fd5b61352989838a01613418565b9450606088013591508082111561353e575f80fd5b61354a89838a01613418565b9350608088013591508082111561355f575f80fd5b5061356c88828901613418565b9150509295509295909350565b5f805f6060848603121561358b575f80fd5b505081359360208301359350604090920135919050565b5f805f80608085870312156135b5575f80fd5b5050823594602084013594506040840135936060013592509050565b5f80604083850312156135e2575f80fd5b6135eb836132ce565b915060208301356133f9816133c9565b602080825260129082015271125b9d985b1a59081c1c995cd85b19481a5960721b604082015260600190565b60208082526012908201527170726553416c65206e6f742041637469766560701b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561164657611646613653565b602080825260139082015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b604082015260600190565b808202811582820484141761164657611646613653565b5f826136d857634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561164657611646613653565b60208082526026908201527f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860408201526506172646361760d41b606082015260800190565b6020808252601690820152751058d8dbdd5b9d081a5cc8189b1858dad31a5cdd195960521b604082015260600190565b6020808252600e908201526d141c995cd85b19481c185d5cd95960921b604082015260600190565b60208082526019908201527f50726573616c65206973206e6f74206163746976652079657400000000000000604082015260600190565b5f600182016137d6576137d6613653565b5060010190565b5f602082840312156137ed575f80fd5b815160ff8116811461270f575f80fd5b600181815b8085111561383757815f190482111561381d5761381d613653565b8085161561382a57918102915b93841c9390800290613802565b509250929050565b5f8261384d57506001611646565b8161385957505f611646565b816001811461386f576002811461387957613895565b6001915050611646565b60ff84111561388a5761388a613653565b50506001821b611646565b5060208310610133831016604e8410600b84101617156138b8575081810a611646565b6138c283836137fd565b805f19048211156138d5576138d5613653565b029392505050565b5f61270f60ff84168361383f565b602080825260169082015275155cd95c881b9bdd0818481c185c9d1a58da5c185b9d60521b604082015260600190565b5f6020828403121561392b575f80fd5b815161270f816133c9565b5f60ff821660ff810361394b5761394b613653565b60010192915050565b805169ffffffffffffffffffff811681146132e4575f80fd5b5f805f805f60a08688031215613981575f80fd5b61398a86613954565b94506020860151935060408601519250606086015191506139ad60808701613954565b90509295509295909350565b8082025f8212600160ff1b841416156139d4576139d4613653565b818105831482151761164657611646613653565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613a0c575f80fd5b5051919050565b602080825260159082015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60408201526060019056fea2646970667358221220fc7d2b63adf86d214922cbc8df3389cbef8f5f73e8efd3ac102ed9a97f704a1764736f6c63430008140033

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

0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000096e53a42c959f4c30be135ff1ca4c059dfeefeaf

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 00000000000000000000000096e53a42c959f4c30be135ff1ca4c059dfeefeaf


Deployed Bytecode Sourcemap

3302:20987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4620:39;;;;;;;;;;-1:-1:-1;4620:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:1;;541:22;523:41;;511:2;496:18;4620:39:0;;;;;;;;4343:38;;;;;;;;;;-1:-1:-1;4343:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10638:123;;;;;;;;;;-1:-1:-1;10638:123:0;;;;;:::i;:::-;;:::i;:::-;;10342:175;;;;;;;;;;-1:-1:-1;10342:175:0;;;;;:::i;:::-;;:::i;12565:2093::-;;;:::i;10525:105::-;;;;;;;;;;-1:-1:-1;10525:105:0;;;;;:::i;:::-;;:::i;14666:332::-;;;;;;;;;;-1:-1:-1;14666:332:0;;;;;:::i;:::-;;:::i;:::-;;;1159:25:1;;;1147:2;1132:18;14666:332:0;1013:177:1;20294:82:0;;;;;;;;;;-1:-1:-1;20294:82:0;;;;;:::i;:::-;;:::i;3405:35::-;;;;;;;;;;-1:-1:-1;3405:35:0;;;;-1:-1:-1;;;;;3405:35:0;;;;;;-1:-1:-1;;;;;1381:32:1;;;1363:51;;1351:2;1336:18;3405:35:0;1195:225:1;4441:46:0;;;;;;;;;;-1:-1:-1;4441:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:25:1;;;1740:2;1725:18;;1718:34;;;;1768:18;;;1761:34;;;;1826:2;1811:18;;1804:34;1869:3;1854:19;;1847:35;1671:3;1656:19;4441:46:0;1425:463:1;6939:406:0;;;;;;;;;;-1:-1:-1;6939:406:0;;;;;:::i;:::-;;:::i;4874:29::-;;;;;;;;;;;;;;;;4837:30;;;;;;;;;;;;;;;;7979:583;;;;;;;;;;-1:-1:-1;7979:583:0;;;;;:::i;:::-;;:::i;10769:212::-;;;;;;;;;;-1:-1:-1;10769:212:0;;;;;:::i;:::-;;:::i;10211:123::-;;;;;;;;;;-1:-1:-1;10211:123:0;;;;;:::i;:::-;;:::i;4733:29::-;;;;;;;;;;;;;;;;11907:528;;;;;;;;;;-1:-1:-1;11907:528:0;;;;;:::i;:::-;;:::i;10064:139::-;;;;;;;;;;-1:-1:-1;10064:139:0;;;;;:::i;:::-;;:::i;24190:96::-;;;;;;;;;;-1:-1:-1;24263:15:0;24190:96;;9486:166;;;;;;;;;;-1:-1:-1;9486:166:0;;;;;:::i;:::-;;:::i;20005:281::-;;;;;;;;;;;;;:::i;1471:103::-;;;;;;;;;;;;;:::i;15006:302::-;;;;;;;;;;-1:-1:-1;15006:302:0;;;;;:::i;:::-;;:::i;19627:370::-;;;;;;;;;;-1:-1:-1;19627:370:0;;;;;:::i;:::-;;:::i;8570:126::-;;;;;;;;;;-1:-1:-1;8570:126:0;;;;;:::i;:::-;;:::i;3493:24::-;;;;;;;;;;-1:-1:-1;3493:24:0;;;;-1:-1:-1;;;;;3493:24:0;;;9660:194;;;;;;;;;;-1:-1:-1;9660:194:0;;;;;:::i;:::-;;:::i;4769:28::-;;;;;;;;;;;;;;;;1236:87;;;;;;;;;;-1:-1:-1;1309:6:0;;-1:-1:-1;;;;;1309:6:0;1236:87;;11241:206;;;;;;;;;;;;;:::i;8704:539::-;;;;;;;;;;-1:-1:-1;8704:539:0;;;;;:::i;:::-;;:::i;4804:26::-;;;;;;;;;;;;;;;;15316:1878;;;;;;;;;;-1:-1:-1;15316:1878:0;;;;;:::i;:::-;;:::i;4699:27::-;;;;;;;;;;;;;;;;17202:1951;;;;;;;;;;-1:-1:-1;17202:1951:0;;;;;:::i;:::-;;:::i;4494:69::-;;;;;;;;;;-1:-1:-1;4494:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3836:25:1;;;3892:2;3877:18;;3870:34;;;;3920:18;;;3913:34;;;;3978:2;3963:18;;3956:34;;;;4021:3;4006:19;;3999:35;4065:3;4050:19;;4043:35;4109:3;4094:19;;4087:35;3823:3;3808:19;4494:69:0;3521:607:1;4570:43:0;;;;;;;;;;-1:-1:-1;4570:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7353:618;;;;;;;;;;-1:-1:-1;7353:618:0;;;;;:::i;:::-;;:::i;9251:227::-;;;;;;;;;;-1:-1:-1;9251:227:0;;;;;:::i;:::-;;:::i;10989:244::-;;;;;;;;;;-1:-1:-1;10989:244:0;;;;;:::i;:::-;;:::i;6296:635::-;;;;;;;;;;-1:-1:-1;6296:635:0;;;;;:::i;:::-;;:::i;12443:114::-;;;;;;;;;;-1:-1:-1;12443:114:0;;;;;:::i;:::-;;:::i;4668:24::-;;;;;;;;;;;;;;;;4388:46;;;;;;;;;;-1:-1:-1;4388:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7870:25:1;;;7926:2;7911:18;;7904:34;;;;7954:18;;;7947:34;;;;8012:2;7997:18;;7990:34;;;;8055:3;8040:19;;8033:35;;;;8099:3;8084:19;;8077:35;8143:3;8128:19;;8121:35;8187:3;8172:19;;8165:35;8244:14;8237:22;8231:3;8216:19;;8209:51;8304:14;8297:22;8291:3;8276:19;;8269:51;7857:3;7842:19;4388:46:0;7483:843:1;9862:194:0;;;;;;;;;;-1:-1:-1;9862:194:0;;;;;:::i;:::-;;:::i;1582:238::-;;;;;;;;;;-1:-1:-1;1582:238:0;;;;;:::i;:::-;;:::i;19422:197::-;;;;;;;;;;-1:-1:-1;19422:197:0;;;;;:::i;:::-;;:::i;3363:35::-;;;;;;;;;;-1:-1:-1;3363:35:0;;;;-1:-1:-1;;;;;3363:35:0;;;3524:27;;;;;;;;;;-1:-1:-1;3524:27:0;;;;-1:-1:-1;;;;;3524:27:0;;;19161:253;;;;;;;;;;-1:-1:-1;19161:253:0;;;;;:::i;:::-;;:::i;10638:123::-;1195:13;:11;:13::i;:::-;10712:19:::1;:41:::0;;-1:-1:-1;;;;;;10712:41:0::1;-1:-1:-1::0;;;;;10712:41:0;;;::::1;::::0;;;::::1;::::0;;10638:123::o;10342:175::-;1195:13;:11;:13::i;:::-;10445:9:::1;::::0;10418:62:::1;::::0;10464:15:::1;1159:25:1::0;;-1:-1:-1;;;;;10418:62:0;;::::1;::::0;10445:9:::1;::::0;10418:62:::1;::::0;1147:2:1;1132:18;10418:62:0::1;;;;;;;10491:9;:18:::0;;-1:-1:-1;;;;;;10491:18:0::1;-1:-1:-1::0;;;;;10491:18:0;;;::::1;::::0;;;::::1;::::0;;10342:175::o;12565:2093::-;12773:4;12646:11;;11517:1;11511:3;:7;:29;;;;;11529:11;;11522:3;:18;11511:29;11503:60;;;;-1:-1:-1;;;11503:60:0;;;;;;;:::i;:::-;;;;;;;;;12683:11:::1;::::0;12696:35:::1;12683:11:::0;12721:9:::1;12696:11;:35::i;:::-;11663:12;::::0;;;:7:::1;:12;::::0;;;;;;;:19:::1;::::0;::::1;;:27;;:19:::0;:27:::1;11655:58;;;;-1:-1:-1::0;;;11655:58:0::1;;;;;;;:::i;:::-;11755:1;11746:6;:10;:86;;;;-1:-1:-1::0;11815:12:0::1;::::0;;;:7:::1;:12;::::0;;;;:17:::1;::::0;::::1;::::0;11787:25:::1;::::0;;::::1;::::0;:45:::1;::::0;11815:17;11787:45:::1;:::i;:::-;11777:6;:55;;11746:86;11724:155;;;;-1:-1:-1::0;;;11724:155:0::1;;;;;;;:::i;:::-;325:21:::2;:19;:21::i;:::-;12897:14:::3;::::0;12795:17:::3;::::0;12880:31:::3;::::0;12897:14;12880:31:::3;:::i;:::-;12847:15;;12828:16;:14;:16::i;:::-;12816:28;::::0;:9:::3;:28;:::i;:::-;:46;;;;:::i;:::-;12815:97;;;;:::i;:::-;13019:11;::::0;13011:20:::3;::::0;;;:7:::3;:20;::::0;;;;:31:::3;::::0;::::3;::::0;12945:33:::3;::::0;;::::3;::::0;12795:117;;-1:-1:-1;13011:31:0;12945:45:::3;::::0;12795:117;;12945:45:::3;:::i;:::-;:97;;12923:185;;;;-1:-1:-1::0;;;12923:185:0::3;;;;;;;:::i;:::-;13140:10;13128:23;::::0;;;:11:::3;:23;::::0;;;;;::::3;;13127:24;13119:59;;;;-1:-1:-1::0;;;13119:59:0::3;;;;;;;:::i;:::-;13205:11;::::0;13198:19:::3;::::0;;;:6:::3;:19;::::0;;;;;::::3;;13197:20;13189:47;;;;-1:-1:-1::0;;;13189:47:0::3;;;;;;;:::i;:::-;13277:11;::::0;13269:20:::3;::::0;;;:7:::3;:20;::::0;;;;;;;:27:::3;::::0;::::3;;:35;;:27:::0;:35:::3;13247:110;;;;-1:-1:-1::0;;;13247:110:0::3;;;;;;;:::i;:::-;13381:10;13373:19;::::0;;;:7:::3;:19;::::0;;;;;::::3;;13368:108;;13417:10;13409:19;::::0;;;:7:::3;:19;::::0;;;;:26;;-1:-1:-1;;13409:26:0::3;13431:4;13409:26;::::0;;13450:12:::3;:14:::0;;;::::3;::::0;::::3;:::i;:::-;;;;;;13368:108;13488:14;13505:36;13518:11;;13531:9;13505:12;:36::i;:::-;13488:53;;13570:13;;13560:6;:23;;13552:56;;;::::0;-1:-1:-1;;;13552:56:0;;11960:2:1;13552:56:0::3;::::0;::::3;11942:21:1::0;11999:2;11979:18;;;11972:30;-1:-1:-1;;;12018:18:1;;;12011:50;12078:18;;13552:56:0::3;11758:344:1::0;13552:56:0::3;13627:11;::::0;13619:20:::3;::::0;;;:7:::3;:20;::::0;;;;:25:::3;;:35:::0;;13648:6;;13619:20;:35:::3;::::0;13648:6;;13619:35:::3;:::i;:::-;::::0;;;-1:-1:-1;;13673:11:0::3;::::0;13665:20:::3;::::0;;;:7:::3;:20;::::0;;;;:33:::3;;:46:::0;;13702:9;;13665:20;:46:::3;::::0;13702:9;;13665:46:::3;:::i;:::-;;;;;;;;13740:9;13722:14;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;764:10:0;13825:1:::3;13766:27:::0;;;:13:::3;:27;::::0;;;;;;;13794:11:::3;::::0;13766:40;;;;;;;:56:::3;;::::0;:60;13762:621:::3;;764:10:::0;13843:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;13871:11:::3;::::0;13843:40;;;;;;;:56:::3;;:66:::0;;13903:6;;13843:27;:66:::3;::::0;13903:6;;13843:66:::3;:::i;:::-;::::0;;;-1:-1:-1;;764:10:0;13924:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;13952:11:::3;::::0;13924:40;;;;;;;:68;;13983:9;;13924:27;:68:::3;::::0;13983:9;;13924:68:::3;:::i;:::-;::::0;;;-1:-1:-1;13762:621:0::3;::::0;-1:-1:-1;13762:621:0::3;;14068:303;;;;;;;;14095:9;14068:303;;;;14123:1;14068:303;;;;14162:6;14068:303;;;;14217:1;14068:303;;;;14263:1;14068:303;;;;14301:1;14068:303;;;;14336:1;14068:303;;::::0;14025:13:::3;:27;14039:12;764:10:::0;;684:98;14039:12:::3;-1:-1:-1::0;;;;;14025:27:0::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;-1:-1:-1;14025:27:0;;;14053:11:::3;::::0;14025:40;;;;;;;:346;;;;;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;13762:621:::3;14403:12;::::0;14395:41:::3;::::0;-1:-1:-1;;;;;14403:12:0;;::::3;::::0;14426:9:::3;14395:41:::0;::::3;;;::::0;14403:12:::3;14395:41:::0;14403:12;14395:41;14426:9;14403:12;14395:41;::::3;;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;14506:11:0::3;::::0;14452:176:::3;::::0;;12309:25:1;;;14578:9:0::3;12365:2:1::0;12350:18;;12343:34;14602:15:0::3;12393:18:1::0;;;12386:34;14452:176:0;;-1:-1:-1;;14506:11:0;764:10;;14452:176:::3;::::0;;;;12297:2:1;14452:176:0;;::::3;14646:4;14639:11;;;;369:20:::2;141:1:::0;614:7;:22;565:79;369:20:::2;11574:1:::1;;12565:2093:::0;;:::o;10525:105::-;1195:13;:11;:13::i;:::-;10599::::1;:23:::0;10525:105::o;14666:332::-;14767:17;14831:12;;;:7;:12;;;;;:18;;;14767:17;;14822:27;;:6;:27;:::i;:::-;14802:48;;14968:9;;;;;;;;;-1:-1:-1;;;;;14968:9:0;-1:-1:-1;;;;;14953:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14949:40;;:2;:40;:::i;:::-;14930:16;:14;:16::i;:::-;:59;;;;:::i;:::-;14898:14;;14887:25;;:8;:25;:::i;:::-;14886:104;;;;:::i;:::-;14861:129;14666:332;-1:-1:-1;;;;14666:332:0:o;20294:82::-;20346:22;20352:10;20364:3;20346:5;:22::i;:::-;;20294:82;:::o;6939:406::-;1195:13;:11;:13::i;:::-;7041:1:::1;7013:12:::0;;;:7:::1;:12;::::0;;;;:25:::1;;::::0;7005:61:::1;;;::::0;-1:-1:-1;;;7005:61:0;;14294:2:1;7005:61:0::1;::::0;::::1;14276:21:1::0;14333:2;14313:18;;;14306:30;-1:-1:-1;;;14352:18:1;;;14345:49;14411:18;;7005:61:0::1;14092:343:1::0;7005:61:0::1;7081:11;::::0;:16;7077:145:::1;;7122:11;::::0;;7114:20:::1;::::0;;;:7:::1;:20;::::0;;;;;;;7145:15:::1;7114:28;::::0;;::::1;:46:::0;7183:11;;7175:20;;;;;:27:::1;:35:::0;;-1:-1:-1;;7175:35:0::1;::::0;;7077:145:::1;7232:12;::::0;;;:7:::1;:12;::::0;;;;;;;7257:15:::1;7232:40:::0;;7283:19:::1;:26:::0;;-1:-1:-1;;7283:26:0::1;7305:4;7283:26;::::0;;7320:11:::1;:17:::0;6939:406::o;7979:583::-;1195:13;:11;:13::i;:::-;8209:12:::1;::::0;;;:7:::1;:12;::::0;;;;:49;;;8269:32:::1;::::0;::::1;:55:::0;;;8335:24:::1;::::0;::::1;:39:::0;;;8385:30:::1;;:51:::0;;;8418:18;8493:26:::1;8304:20:::0;8493:3:::1;:26;:::i;:::-;8492:62;;;;:::i;:::-;8447:12;::::0;;;:7:::1;:12;::::0;;;;;:29:::1;;:107:::0;;;;-1:-1:-1;;;;7979:583:0:o;10769:212::-;10828:3;11517:1;11511:3;:7;:29;;;;;11529:11;;11522:3;:18;11511:29;11503:60;;;;-1:-1:-1;;;11503:60:0;;;;;;;:::i;:::-;1195:13:::1;:11;:13::i;:::-;10863:11:::2;::::0;;;:6:::2;:11;::::0;;;;;::::2;;10862:12;10854:39;;;::::0;-1:-1:-1;;;10854:39:0;;14642:2:1;10854:39:0::2;::::0;::::2;14624:21:1::0;14681:2;14661:18;;;14654:30;-1:-1:-1;;;14700:18:1;;;14693:44;14754:18;;10854:39:0::2;14440:338:1::0;10854:39:0::2;10904:11;::::0;;;:6:::2;:11;::::0;;;;;;:18;;-1:-1:-1;;10904:18:0::2;10918:4;10904:18;::::0;;10938:35;10911:3;;10938:35:::2;::::0;::::2;::::0;10957:15:::2;1159:25:1::0;;1147:2;1132:18;;1013:177;10938:35:0::2;;;;;;;;10769:212:::0;;:::o;10211:123::-;1195:13;:11;:13::i;:::-;10296:12:::1;::::0;10288:38:::1;::::0;-1:-1:-1;;;;;10296:12:0;;::::1;::::0;10288:38;::::1;;;::::0;10319:6;;10296:12:::1;10288:38:::0;10296:12;10288:38;10319:6;10296:12;10288:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;11907:528:::0;1195:13;:11;:13::i;:::-;12044:1:::1;12027:325;12051:9;;12047:1;:13;12027:325;;;-1:-1:-1::0;;;;;12090:20:0;::::1;;::::0;;;:7:::1;:20;::::0;;;;;::::1;;12082:55;;;;-1:-1:-1::0;;;12082:55:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12199:58:0;;::::1;;::::0;;;:13:::1;:58;::::0;;;;;;;:61;;;;;;;;;:77:::1;::::0;;::::1;::::0;;12152:25;;::::1;::::0;;;;;;;;:28;;;;;;;;:44;;::::1;:124:::0;;;;12291:29;;;;:49;;12199:61;12062:3:::1;12199:61:::0;12062:3:::1;:::i;:::-;;;;12027:325;;;-1:-1:-1::0;;;;;;12362:20:0;;::::1;12385:5;12362:20:::0;;;:7:::1;:20;::::0;;;;;:28;;-1:-1:-1;;12362:28:0;;::::1;::::0;;;12401:19;;;::::1;::::0;;;;;;:26;;;;::::1;12362:28:::0;12401:26:::1;::::0;;11907:528::o;10064:139::-;1195:13;:11;:13::i;:::-;10174:12:::1;::::0;10150:45:::1;::::0;-1:-1:-1;;;10150:45:0;;-1:-1:-1;;;;;10174:12:0;;::::1;10150:45;::::0;::::1;15308:51:1::0;15375:18;;;15368:34;;;10150:23:0;;::::1;::::0;::::1;::::0;15281:18:1;;10150:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10064:139:::0;;:::o;9486:166::-;1195:13;:11;:13::i;:::-;-1:-1:-1;;;;;9567:21:0;::::1;9559:52;;;::::0;-1:-1:-1;;;9559:52:0;;15865:2:1;9559:52:0::1;::::0;::::1;15847:21:1::0;15904:2;15884:18;;;15877:30;-1:-1:-1;;;15923:18:1;;;15916:48;15981:18;;9559:52:0::1;15663:342:1::0;9559:52:0::1;9622:12;:22:::0;;-1:-1:-1;;;;;;9622:22:0::1;-1:-1:-1::0;;;;;9622:22:0;;;::::1;::::0;;;::::1;::::0;;9486:166::o;20005:281::-;20060:1;20048:231;20067:9;;20064:1;:12;;;20048:231;;20115:10;20148:1;20101:25;;;:13;:25;;;;;;;;:28;;;;;;;;;;:44;;;:48;;;;:111;;-1:-1:-1;20185:10:0;;;;;;;:7;:10;;;;;:27;20167:15;:45;20101:111;20098:170;;;20232:20;20238:10;20250:1;20232:20;;:5;:20::i;:::-;;20098:170;20079:3;;;;:::i;:::-;;;;20048:231;;;;20005:281::o;1471:103::-;1195:13;:11;:13::i;:::-;1536:30:::1;1563:1;1536:18;:30::i;:::-;1471:103::o:0;15006:302::-;15104:15;15137:17;15236:14;;15219;;:31;;;;:::i;:::-;15186:15;;15167:16;:14;:16::i;:::-;15158:25;;:6;:25;:::i;:::-;:43;;;;:::i;:::-;15157:94;;;;:::i;:::-;15137:114;;15272:28;15285:3;15290:9;15272:12;:28::i;19627:370::-;-1:-1:-1;;;;;19776:19:0;;19727:7;19776:19;;;:13;:19;;;;;;;;:24;;;;;;;;19752:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19813:54;;;;-1:-1:-1;;;19813:54:0;;16392:2:1;19813:54:0;;;16374:21:1;16431:2;16411:18;;;16404:30;-1:-1:-1;;;16450:18:1;;;16443:46;16506:18;;19813:54:0;16190:340:1;19813:54:0;19895:21;;;;19935:10;19927:38;;;;-1:-1:-1;;;19927:38:0;;16737:2:1;19927:38:0;;;16719:21:1;16776:2;16756:18;;;16749:30;-1:-1:-1;;;16795:18:1;;;16788:45;16850:18;;19927:38:0;16535:339:1;19927:38:0;19983:6;-1:-1:-1;;19627:370:0;;;;;:::o;8570:126::-;1195:13;:11;:13::i;:::-;8652:12:::1;::::0;;;:7:::1;:12;::::0;;;;;;;:26;;::::1;:36:::0;;;::::1;;;;-1:-1:-1::0;;8652:36:0;;::::1;::::0;;;::::1;::::0;;8570:126::o;9660:194::-;1195:13;:11;:13::i;:::-;-1:-1:-1;;;;;9744:25:0;::::1;9736:56;;;::::0;-1:-1:-1;;;9736:56:0;;17081:2:1;9736:56:0::1;::::0;::::1;17063:21:1::0;17120:2;17100:18;;;17093:30;-1:-1:-1;;;17139:18:1;;;17132:48;17197:18;;9736:56:0::1;16879:342:1::0;9736:56:0::1;9803:13;:43:::0;;-1:-1:-1;;;;;;9803:43:0::1;-1:-1:-1::0;;;;;9803:43:0;;;::::1;::::0;;;::::1;::::0;;9660:194::o;11241:206::-;11333:19;;;:37;;;-1:-1:-1;;;11333:37:0;;;;11288:7;;;;-1:-1:-1;;;;;11333:19:0;;:35;;:37;;;;;;;;;;;:19;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11308:62;;;;;;11390:5;11399:6;11390:16;;;;:::i;8704:539::-;1195:13;:11;:13::i;:::-;8921:1:::1;8912:6;:10;8904:33;;;::::0;-1:-1:-1;;;8904:33:0;;18332:2:1;8904:33:0::1;::::0;::::1;18314:21:1::0;18371:2;18351:18;;;18344:30;-1:-1:-1;;;18390:18:1;;;18383:40;18440:18;;8904:33:0::1;18130:334:1::0;8904:33:0::1;8972:1;8956:13;:17;8948:49;;;::::0;-1:-1:-1;;;8948:49:0;;18671:2:1;8948:49:0::1;::::0;::::1;18653:21:1::0;18710:2;18690:18;;;18683:30;-1:-1:-1;;;18729:18:1;;;18722:49;18788:18;;8948:49:0::1;18469:343:1::0;8948:49:0::1;9027:1;9016:8;:12;9008:36;;;::::0;-1:-1:-1;;;9008:36:0;;19019:2:1;9008:36:0::1;::::0;::::1;19001:21:1::0;19058:2;19038:18;;;19031:30;-1:-1:-1;;;19077:18:1;;;19070:41;19128:18;;9008:36:0::1;18817:335:1::0;9008:36:0::1;9055:12;::::0;;;:7:::1;:12;::::0;;;;;:18:::1;::::0;::::1;:27:::0;;;;9093::::1;::::0;::::1;:45:::0;;;;9149:25:::1;::::0;::::1;:41:::0;9201:23:::1;;:34:::0;8704:539::o;15316:1878::-;15526:4;15398:11;;11517:1;11511:3;:7;:29;;;;;11529:11;;11522:3;:18;11511:29;11503:60;;;;-1:-1:-1;;;11503:60:0;;;;;;;:::i;:::-;15435:11:::1;::::0;15448:36:::1;15435:11:::0;15474:9;15448:12:::1;:36::i;:::-;11663:12;::::0;;;:7:::1;:12;::::0;;;;;;;:19:::1;::::0;::::1;;:27;;:19:::0;:27:::1;11655:58;;;;-1:-1:-1::0;;;11655:58:0::1;;;;;;;:::i;:::-;11755:1;11746:6;:10;:86;;;;-1:-1:-1::0;11815:12:0::1;::::0;;;:7:::1;:12;::::0;;;;:17:::1;::::0;::::1;::::0;11787:25:::1;::::0;;::::1;::::0;:45:::1;::::0;11815:17;11787:45:::1;:::i;:::-;11777:6;:55;;11746:86;11724:155;;;;-1:-1:-1::0;;;11724:155:0::1;;;;;;;:::i;:::-;325:21:::2;:19;:21::i;:::-;15564:11:::3;::::0;15557:19:::3;::::0;;;:6:::3;:19;::::0;;;;;::::3;;15556:20;15548:47;;;;-1:-1:-1::0;;;15548:47:0::3;;;;;;;:::i;:::-;15636:11;::::0;15628:20:::3;::::0;;;:7:::3;:20;::::0;;;;;;;:27:::3;::::0;::::3;;:35;;:27:::0;:35:::3;15606:110;;;;-1:-1:-1::0;;;15606:110:0::3;;;;;;;:::i;:::-;15748:10;15736:23;::::0;;;:11:::3;:23;::::0;;;;;::::3;;15735:24;15727:59;;;;-1:-1:-1::0;;;15727:59:0::3;;;;;;;:::i;:::-;15893:11;::::0;15885:20:::3;::::0;;;:7:::3;:20;::::0;;;;:31:::3;::::0;::::3;::::0;15819:33:::3;::::0;;::::3;::::0;:45:::3;::::0;15855:9;;15819:45:::3;:::i;:::-;:97;;15797:185;;;;-1:-1:-1::0;;;15797:185:0::3;;;;;;;:::i;:::-;16006:10;15998:19;::::0;;;:7:::3;:19;::::0;;;;;::::3;;15993:108;;16042:10;16034:19;::::0;;;:7:::3;:19;::::0;;;;:26;;-1:-1:-1;;16034:26:0::3;16056:4;16034:26;::::0;;16075:12:::3;:14:::0;;;::::3;::::0;::::3;:::i;:::-;;;;;;15993:108;16111:14;16128:36;16141:11;;16154:9;16128:12;:36::i;:::-;16111:53;;16204:6;16175:7;:20;16183:11;;16175:20;;;;;;;;;;;:25;;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16229:11:0::3;::::0;16221:20:::3;::::0;;;:7:::3;:20;::::0;;;;:33:::3;;:46:::0;;16258:9;;16221:20;:46:::3;::::0;16258:9;;16221:46:::3;:::i;:::-;;;;;;;;16296:9;16278:14;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16334:13:0::3;::::0;16324:23;::::3;;16316:56;;;::::0;-1:-1:-1;;;16316:56:0;;19359:2:1;16316:56:0::3;::::0;::::3;19341:21:1::0;19398:2;19378:18;;;19371:30;-1:-1:-1;;;19417:18:1;;;19410:50;19477:18;;16316:56:0::3;19157:344:1::0;16316:56:0::3;764:10:::0;16456:1:::3;16397:27:::0;;;:13:::3;:27;::::0;;;;;;;16425:11:::3;::::0;16397:40;;;;;;;:56:::3;;::::0;:60;16393:494:::3;;764:10:::0;16474:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;16502:11:::3;::::0;16474:40;;;;;;;:56:::3;;:66:::0;;16534:6;;16474:27;:66:::3;::::0;16534:6;;16474:66:::3;:::i;:::-;::::0;;;-1:-1:-1;;764:10:0;16555:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;16583:11:::3;::::0;16555:40;;;;;;;:68;;16614:9;;16555:27;:68:::3;::::0;16614:9;;16555:68:::3;:::i;:::-;::::0;;;-1:-1:-1;16393:494:0::3;::::0;-1:-1:-1;16393:494:0::3;;16699:176;;;;;;;;16726:9;16699:176;;;;16754:1;16699:176;;;;16774:6;16699:176;;;;16799:1;16699:176;;;;16819:1;16699:176;;;;16839:1;16699:176;;;;16859:1;16699:176;;::::0;16656:13:::3;:27;16670:12;764:10:::0;;684:98;16670:12:::3;-1:-1:-1::0;;;;;16656:27:0::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;-1:-1:-1;16656:27:0;;;16684:11:::3;::::0;16656:40;;;;;;;:219;;;;;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;16393:494:::3;16897:13;::::0;16936:12:::3;::::0;16897:63:::3;::::0;-1:-1:-1;;;16897:63:0;;16924:10:::3;16897:63;::::0;::::3;19746:34:1::0;-1:-1:-1;;;;;16936:12:0;;::::3;19796:18:1::0;;;19789:43;19848:18;;;19841:34;;;16897:13:0;::::3;::::0;:26:::3;::::0;19681:18:1;;16897:63:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17064:13:0::3;::::0;17030:11:::3;::::0;-1:-1:-1;;;;;17064:13:0;;::::3;::::0;764:10;17003:12:::3;-1:-1:-1::0;;;;;16976:188:0::3;;17093:6;17114:9;17138:15;16976:188;;;;;;;12309:25:1::0;;;12365:2;12350:18;;12343:34;;;;12408:2;12393:18;;12386:34;12297:2;12282:18;;12107:319;16976:188:0::3;;;;;;;;17182:4;17175:11;;;369:20:::2;141:1:::0;614:7;:22;565:79;369:20:::2;11574:1:::1;;15316:1878:::0;;;;:::o;17202:1951::-;17412:4;17284:11;;11517:1;11511:3;:7;:29;;;;;11529:11;;11522:3;:18;11511:29;11503:60;;;;-1:-1:-1;;;11503:60:0;;;;;;;:::i;:::-;17321:11:::1;::::0;17334:36:::1;17321:11:::0;17360:9;17334:12:::1;:36::i;:::-;11663:12;::::0;;;:7:::1;:12;::::0;;;;;;;:19:::1;::::0;::::1;;:27;;:19:::0;:27:::1;11655:58;;;;-1:-1:-1::0;;;11655:58:0::1;;;;;;;:::i;:::-;11755:1;11746:6;:10;:86;;;;-1:-1:-1::0;11815:12:0::1;::::0;;;:7:::1;:12;::::0;;;;:17:::1;::::0;::::1;::::0;11787:25:::1;::::0;;::::1;::::0;:45:::1;::::0;11815:17;11787:45:::1;:::i;:::-;11777:6;:55;;11746:86;11724:155;;;;-1:-1:-1::0;;;11724:155:0::1;;;;;;;:::i;:::-;325:21:::2;:19;:21::i;:::-;17450:11:::3;::::0;17443:19:::3;::::0;;;:6:::3;:19;::::0;;;;;::::3;;17442:20;17434:47;;;;-1:-1:-1::0;;;17434:47:0::3;;;;;;;:::i;:::-;17522:11;::::0;17514:20:::3;::::0;;;:7:::3;:20;::::0;;;;;;;:27:::3;::::0;::::3;;:35;;:27:::0;:35:::3;17492:110;;;;-1:-1:-1::0;;;17492:110:0::3;;;;;;;:::i;:::-;17709:11;::::0;17701:20:::3;::::0;;;:7:::3;:20;::::0;;;;:31:::3;::::0;::::3;::::0;17635:33:::3;::::0;;::::3;::::0;:45:::3;::::0;17671:9;;17635:45:::3;:::i;:::-;:97;;17613:185;;;;-1:-1:-1::0;;;17613:185:0::3;;;;;;;:::i;:::-;17830:10;17818:23;::::0;;;:11:::3;:23;::::0;;;;;::::3;;17817:24;17809:59;;;;-1:-1:-1::0;;;17809:59:0::3;;;;;;;:::i;:::-;17892:10;17884:19;::::0;;;:7:::3;:19;::::0;;;;;::::3;;17879:108;;17928:10;17920:19;::::0;;;:7:::3;:19;::::0;;;;:26;;-1:-1:-1;;17920:26:0::3;17942:4;17920:26;::::0;;17961:12:::3;:14:::0;;;::::3;::::0;::::3;:::i;:::-;;;;;;17879:108;17997:14;18014:36;18027:11;;18040:9;18014:12;:36::i;:::-;17997:53;;18090:6;18061:7;:20;18069:11;;18061:20;;;;;;;;;;;:25;;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;18115:11:0::3;::::0;18107:20:::3;::::0;;;:7:::3;:20;::::0;;;;:33:::3;;:46:::0;;18144:9;;18107:20;:46:::3;::::0;18144:9;;18107:46:::3;:::i;:::-;;;;;;;;18182:9;18164:14;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;18220:13:0::3;::::0;18210:23;::::3;;18202:56;;;::::0;-1:-1:-1;;;18202:56:0;;19359:2:1;18202:56:0::3;::::0;::::3;19341:21:1::0;19398:2;19378:18;;;19371:30;-1:-1:-1;;;19417:18:1;;;19410:50;19477:18;;18202:56:0::3;19157:344:1::0;18202:56:0::3;764:10:::0;18342:1:::3;18283:27:::0;;;:13:::3;:27;::::0;;;;;;;18311:11:::3;::::0;18283:40;;;;;;;:56:::3;;::::0;:60;18279:565:::3;;764:10:::0;18360:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;18388:11:::3;::::0;18360:40;;;;;;;:56:::3;;:66:::0;;18420:6;;18360:27;:66:::3;::::0;18420:6;;18360:66:::3;:::i;:::-;::::0;;;-1:-1:-1;;764:10:0;18441:27:::3;::::0;;;:13:::3;:27;::::0;;;;;;;18469:11:::3;::::0;18441:40;;;;;;;:68;;18500:9;;18441:27;:68:::3;::::0;18500:9;;18441:68:::3;:::i;:::-;::::0;;;-1:-1:-1;18279:565:0::3;::::0;-1:-1:-1;18279:565:0::3;;18585:176;;;;;;;;18612:9;18585:176;;;;18640:1;18585:176;;;;18660:6;18585:176;;;;18685:1;18585:176;;;;18705:1;18585:176;;;;18725:1;18585:176;;;;18745:1;18585:176;;::::0;18542:13:::3;:27;18556:12;764:10:::0;;684:98;18556:12:::3;-1:-1:-1::0;;;;;18542:27:0::3;::::0;;::::3;::::0;;::::3;::::0;;;;;;;;-1:-1:-1;18542:27:0;;;18570:11:::3;::::0;18542:40;;;;;;;:219;;;;;;::::3;::::0;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;::::0;;::::3;::::0;;;;764:10;18784:21;;:7:::3;:21:::0;;;;;;::::3;;18776:56;;;;-1:-1:-1::0;;;18776:56:0::3;;;;;;;:::i;:::-;18856:13;::::0;18895:12:::3;::::0;18856:63:::3;::::0;-1:-1:-1;;;18856:63:0;;18883:10:::3;18856:63;::::0;::::3;19746:34:1::0;-1:-1:-1;;;;;18895:12:0;;::::3;19796:18:1::0;;;19789:43;19848:18;;;19841:34;;;18856:13:0;::::3;::::0;:26:::3;::::0;19681:18:1;;18856:63:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19023:13:0::3;::::0;18989:11:::3;::::0;-1:-1:-1;;;;;19023:13:0;;::::3;::::0;764:10;18962:12:::3;684:98:::0;7353:618;1195:13;:11;:13::i;:::-;7629:9:::1;7624:340;7648:3;:10;7644:1;:14;7624:340;;;7698:254;;;;;;;;7728:16;7745:1;7728:19;;;;;;;;:::i;:::-;;;;;;;7698:254;;;;7766:20;7787:1;7766:23;;;;;;;;:::i;:::-;;;;;;;7698:254;;;;7808:12;7821:1;7808:15;;;;;;;;:::i;:::-;;;;;;;7698:254;;;;7842:18;7861:1;7842:21;;;;;;;;:::i;:::-;;;;;;;7698:254;;;;7916:18;7935:1;7916:21;;;;;;;;:::i;:::-;;;;;;;7889:20;7910:1;7889:23;;;;;;;;:::i;:::-;;;;;;;7883:3;:29;;;;:::i;:::-;7882:55;;;;:::i;:::-;7698:254;;::::0;7680:7:::1;:15;7688:3;7692:1;7688:6;;;;;;;;:::i;:::-;;;;;;;7680:15;;;;;;;;;;;:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7660:3;;;;;:::i;:::-;;;;7624:340;;;;7353:618:::0;;;;;:::o;9251:227::-;1195:13;:11;:13::i;:::-;9393:12:::1;::::0;;;:7:::1;:12;::::0;;;;;:35;;;9439:20:::1;;:31:::0;9251:227::o;10989:244::-;11068:3;11517:1;11511:3;:7;:29;;;;;11529:11;;11522:3;:18;11511:29;11503:60;;;;-1:-1:-1;;;11503:60:0;;;;;;;:::i;:::-;1195:13:::1;:11;:13::i;:::-;11116:11:::2;::::0;;;:6:::2;:11;::::0;;;;;::::2;;11108:34;;;::::0;-1:-1:-1;;;11108:34:0;;20220:2:1;11108:34:0::2;::::0;::::2;20202:21:1::0;20259:2;20239:18;;;20232:30;-1:-1:-1;;;20278:18:1;;;20271:40;20328:18;;11108:34:0::2;20018:334:1::0;11108:34:0::2;11167:5;11153:11:::0;;;:6:::2;:11;::::0;;;;;;:19;;-1:-1:-1;;11153:19:0::2;::::0;;11188:37;11160:3;;11188:37:::2;::::0;::::2;::::0;11209:15:::2;1159:25:1::0;;1147:2;1132:18;;1013:177;6296:635:0;1195:13;:11;:13::i;:::-;6494:1:::1;6485:6;:10;6477:33;;;::::0;-1:-1:-1;;;6477:33:0;;18332:2:1;6477:33:0::1;::::0;::::1;18314:21:1::0;18371:2;18351:18;;;18344:30;-1:-1:-1;;;18390:18:1;;;18383:40;18440:18;;6477:33:0::1;18130:334:1::0;6477:33:0::1;6545:1;6529:13;:17;6521:49;;;::::0;-1:-1:-1;;;6521:49:0;;18671:2:1;6521:49:0::1;::::0;::::1;18653:21:1::0;18710:2;18690:18;;;18683:30;-1:-1:-1;;;18729:18:1;;;18722:49;18788:18;;6521:49:0::1;18469:343:1::0;6521:49:0::1;6583:9;:11:::0;;;:9:::1;:11;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;6628:231:0::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;6628:231:0;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:9:::1;::::0;;6607:18;;:7:::1;:18:::0;;;;;;;:252;;;;;;6628:231;6607:252;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;::::1;;::::0;;::::1;-1:-1:-1::0;;6607:252:0;::::1;;::::0;;;;-1:-1:-1;;6607:252:0;;;;;;;::::1;::::0;;6892:9;;6877:46;;::::1;::::0;::::1;::::0;6753:13;;-1:-1:-1;;;12309:25:1;;;12365:2;12350:18;;12343:34;;;;12408:2;12393:18;;12386:34;12297:2;12282:18;;12107:319;6877:46:0::1;;;;;;;;6296:635:::0;;;;:::o;12443:114::-;1195:13;:11;:13::i;:::-;-1:-1:-1;;;;;12522:18:0;;;::::1;;::::0;;;:11:::1;:18;::::0;;;;:27;;-1:-1:-1;;12522:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12443:114::o;9862:194::-;1195:13;:11;:13::i;:::-;-1:-1:-1;;;;;9946:25:0;::::1;9938:56;;;::::0;-1:-1:-1;;;9938:56:0;;17081:2:1;9938:56:0::1;::::0;::::1;17063:21:1::0;17120:2;17100:18;;;17093:30;-1:-1:-1;;;17139:18:1;;;17132:48;17197:18;;9938:56:0::1;16879:342:1::0;9938:56:0::1;10005:13;:43:::0;;-1:-1:-1;;;;;;10005:43:0::1;-1:-1:-1::0;;;;;10005:43:0;;;::::1;::::0;;;::::1;::::0;;9862:194::o;1582:238::-;1195:13;:11;:13::i;:::-;-1:-1:-1;;;;;1685:22:0;::::1;1663:110;;;::::0;-1:-1:-1;;;1663:110:0;;20899:2:1;1663:110:0::1;::::0;::::1;20881:21:1::0;20938:2;20918:18;;;20911:30;20977:34;20957:18;;;20950:62;-1:-1:-1;;;21028:18:1;;;21021:36;21074:19;;1663:110:0::1;20697:402:1::0;1663:110:0::1;1784:28;1803:8;1784:18;:28::i;19422:197::-:0;19596:15;;19521;19574:12;;;:7;:12;;;;;:18;;;19521:15;;19596;19565:27;;:6;:27;:::i;:::-;19564:47;;;;:::i;:::-;19554:57;19422:197;-1:-1:-1;;;19422:197:0:o;19161:253::-;19385:9;;19370:36;;;-1:-1:-1;;;19370:36:0;;;;19263:16;;-1:-1:-1;;;;;19385:9:0;;19370:34;;:36;;;;;;;;;;;;;;19385:9;19370:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19366:40;;:2;:40;:::i;:::-;19331:12;;;;:7;:12;;;;;:18;;;19322:27;;:6;:27;:::i;1331:132::-;1309:6;;-1:-1:-1;;;;;1309:6:0;764:10;1395:23;1387:68;;;;-1:-1:-1;;;1387:68:0;;21306:2:1;1387:68:0;;;21288:21:1;;;21325:18;;;21318:30;21384:34;21364:18;;;21357:62;21436:18;;1387:68:0;21104:356:1;405:152:0;185:1;463:7;;:19;455:63;;;;-1:-1:-1;;;455:63:0;;21667:2:1;455:63:0;;;21649:21:1;21706:2;21686:18;;;21679:30;21745:33;21725:18;;;21718:61;21796:18;;455:63:0;21465:355:1;455:63:0;185:1;531:7;:18;405:152::o;20384:3798::-;764:10;20445:4;20470:21;;;:7;:21;;;;;;;;20462:56;;;;-1:-1:-1;;;20462:56:0;;;;;;;:::i;:::-;20529:14;20546:27;20562:5;20569:3;20546:15;:27::i;:::-;20529:44;;20601:1;20592:6;:10;20584:42;;;;-1:-1:-1;;;20584:42:0;;22027:2:1;20584:42:0;;;22009:21:1;22066:2;22046:18;;;22039:30;-1:-1:-1;;;22085:18:1;;;22078:49;22144:18;;20584:42:0;21825:343:1;20584:42:0;-1:-1:-1;;;;;20646:18:0;;;;;;:11;:18;;;;;;;;20645:19;20637:54;;;;-1:-1:-1;;;20637:54:0;;;;;;;:::i;:::-;20710:9;;-1:-1:-1;;;;;20710:9:0;20702:65;;;;-1:-1:-1;;;20702:65:0;;22375:2:1;20702:65:0;;;22357:21:1;22414:2;22394:18;;;22387:30;22453:31;22433:18;;;22426:59;22502:18;;20702:65:0;22173:353:1;20702:65:0;20817:9;;20810:42;;-1:-1:-1;;;20810:42:0;;20846:4;20810:42;;;1363:51:1;-1:-1:-1;;;;;20817:9:0;;;;20810:27;;1336:18:1;;20810:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20800:6;:52;;20778:135;;;;-1:-1:-1;;;20778:135:0;;22922:2:1;20778:135:0;;;22904:21:1;22961:2;22941:18;;;22934:30;23000:34;22980:18;;;22973:62;-1:-1:-1;;;23051:18:1;;;23044:31;23092:19;;20778:135:0;22720:397:1;20778:135:0;20933:12;;;;:7;:12;;;;;;;;:26;;;;;;;;:34;;:26;:34;20924:68;;;;-1:-1:-1;;;20924:68:0;;23324:2:1;20924:68:0;;;23306:21:1;23363:2;23343:18;;;23336:30;-1:-1:-1;;;23382:18:1;;;23375:49;23441:18;;20924:68:0;23122:343:1;20924:68:0;21029:12;;;;:7;:12;;;;;:29;21011:15;:47;21003:90;;;;-1:-1:-1;;;21003:90:0;;23672:2:1;21003:90:0;;;23654:21:1;23711:2;23691:18;;;23684:30;23750:33;23730:18;;;23723:61;23801:18;;21003:90:0;23470:355:1;21003:90:0;-1:-1:-1;;;;;21141:20:0;;21104:22;21141:20;;;:13;:20;;;;;;;;:25;;;;;;;;:36;;;:41;;21137:2942;;21244:12;;;;:7;:12;;;;;:32;;;21298:4;;21234:43;;:6;:43;:::i;:::-;21233:69;;;;:::i;:::-;21392:12;;;;:7;:12;;;;;:30;;;21199:103;;-1:-1:-1;21443:4:0;;21383:39;;:6;:39;:::i;:::-;21382:65;;;;:::i;:::-;-1:-1:-1;;;;;21317:20:0;;;;;;;:13;:20;;;;;;;;:25;;;;;;;;;:45;;:130;;;;21483:9;;21476:98;;-1:-1:-1;;;21476:98:0;;;;;15308:51:1;;;;15375:18;;;15368:34;;;21317:20:0;21483:9;;;;21476:26;;15281:18:1;;21476:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21462:112;;21597:6;21589:40;;;;-1:-1:-1;;;21589:40:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21644:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:41;;:59;;21689:14;;21644:20;:59;;21689:14;;21644:59;:::i;:::-;;;;-1:-1:-1;;;;;;;21718:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:39;;:57;;21761:14;;21718:20;:57;;21761:14;;21718:57;:::i;:::-;;;;-1:-1:-1;;;;;;;21790:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;21184:656;21137:2942;;;-1:-1:-1;;;;;21921:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:45;;;;21864:41;;;;;:102;21846:2233;;;21993:16;22030:12;;;:7;:12;;;;;:29;22012:47;;:15;:47;:::i;:::-;22074:18;22106:12;;;:7;:12;;;;;:24;;;21993:66;;-1:-1:-1;22074:18:0;22095:35;;21993:66;22095:35;:::i;:::-;22162:12;;;;:7;:12;;;;;:29;;;22074:56;;-1:-1:-1;22149:42:0;;22145:125;;;-1:-1:-1;22225:12:0;;;;:7;:12;;;;;:29;;;22145:125;-1:-1:-1;;;;;22332:20:0;;22284:15;22332:20;;;:13;:20;;;;;;;;:25;;;;;;;;:45;;;22302:75;;:10;:75;:::i;:::-;-1:-1:-1;;;;;22453:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:46;;;22284:93;;-1:-1:-1;22426:73:0;;22284:93;22426:73;:::i;:::-;22392:107;;22539:1;22522:14;:18;22514:58;;;;-1:-1:-1;;;22514:58:0;;24382:2:1;22514:58:0;;;24364:21:1;24421:2;24401:18;;;24394:30;24460:29;24440:18;;;24433:57;24507:18;;22514:58:0;24180:351:1;22514:58:0;22608:9;;22601:98;;-1:-1:-1;;;22601:98:0;;-1:-1:-1;;;;;15326:32:1;;;22601:98:0;;;15308:51:1;15375:18;;;15368:34;;;22587:11:0;;22608:9;;22601:26;;15281:18:1;;22601:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22587:112;;22722:6;22714:40;;;;-1:-1:-1;;;22714:40:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22769:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:41;;:59;;22814:14;;22769:20;:59;;22814:14;;22769:59;:::i;:::-;;;;-1:-1:-1;;;;;;;22843:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:64;;:82;;22911:14;;22843:20;:82;;22911:14;;22843:82;:::i;:::-;;;;-1:-1:-1;;;;;;;22940:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:39;;:57;;22983:14;;22940:20;:57;;22983:14;;22940:57;:::i;:::-;;;;-1:-1:-1;;;;;;;23012:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;21978:1084;;;;21846:2233;;;23083:16;23120:12;;;:7;:12;;;;;:29;23102:47;;:15;:47;:::i;:::-;23164:18;23196:12;;;:7;:12;;;;;:24;;;23083:66;;-1:-1:-1;23164:18:0;23185:35;;23083:66;23185:35;:::i;:::-;23252:12;;;;:7;:12;;;;;:29;;;23164:56;;-1:-1:-1;23252:33:0;;23284:1;23252:33;:::i;:::-;23239:10;:46;23235:833;;;-1:-1:-1;;;;;23323:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:41;;;;-1:-1:-1;23391:18:0;23383:58;;;;-1:-1:-1;;;23383:58:0;;24382:2:1;23383:58:0;;;24364:21:1;24421:2;24401:18;;;24394:30;24460:29;24440:18;;;24433:57;24507:18;;23383:58:0;24180:351:1;23383:58:0;23481:9;;23474:110;;-1:-1:-1;;;23474:110:0;;-1:-1:-1;;;;;15326:32:1;;;23474:110:0;;;15308:51:1;15375:18;;;15368:34;;;23460:11:0;;23481:9;;23474:26;;15281:18:1;;23474:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23460:124;;23611:6;23603:40;;;;-1:-1:-1;;;23603:40:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23662:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:63;;:81;;23729:14;;23662:20;:81;;23729:14;;23662:81;:::i;:::-;;;;-1:-1:-1;;;;;;;23762:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:39;;:57;;23805:14;;23762:20;:57;;23805:14;;23762:57;:::i;:::-;;;;-1:-1:-1;;;;;;;23838:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:68;;:86;;23910:14;;23838:20;:86;;23910:14;;23838:86;:::i;:::-;;;;-1:-1:-1;;;;;;;23943:20:0;;;;;;:13;:20;;;;;;;;:25;;;;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;23287:710;23235:833;;;24022:30;;-1:-1:-1;;;24022:30:0;;24738:2:1;24022:30:0;;;24720:21:1;24777:2;24757:18;;;24750:30;-1:-1:-1;;;24796:18:1;;;24789:50;24856:18;;24022:30:0;24536:344:1;23235:833:0;23068:1011;;21846:2233;24094:58;;;25059:25:1;;;24136:15:0;25115:2:1;25100:18;;25093:34;24115:3:0;;-1:-1:-1;;;;;24094:58:0;;;;;25032:18:1;24094:58:0;;;;;;;-1:-1:-1;24170:4:0;;20384:3798;-1:-1:-1;;;;20384:3798:0:o;1828:191::-;1921:6;;;-1:-1:-1;;;;;1938:17:0;;;-1:-1:-1;;;;;;1938:17:0;;;;;;;1971:40;;1921:6;;;1938:17;1921:6;;1971:40;;1902:16;;1971:40;1891:128;1828:191;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:180::-;634:6;687:2;675:9;666:7;662:23;658:32;655:52;;;703:1;700;693:12;655:52;-1:-1:-1;726:23:1;;575:180;-1:-1:-1;575:180:1:o;760:248::-;828:6;836;889:2;877:9;868:7;864:23;860:32;857:52;;;905:1;902;895:12;857:52;-1:-1:-1;;928:23:1;;;998:2;983:18;;;970:32;;-1:-1:-1;760:248:1:o;1893:454::-;1988:6;1996;2004;2012;2020;2073:3;2061:9;2052:7;2048:23;2044:33;2041:53;;;2090:1;2087;2080:12;2041:53;-1:-1:-1;;2113:23:1;;;2183:2;2168:18;;2155:32;;-1:-1:-1;2234:2:1;2219:18;;2206:32;;2285:2;2270:18;;2257:32;;-1:-1:-1;2336:3:1;2321:19;2308:33;;-1:-1:-1;1893:454:1;-1:-1:-1;1893:454:1:o;2352:260::-;2420:6;2428;2481:2;2469:9;2460:7;2456:23;2452:32;2449:52;;;2497:1;2494;2487:12;2449:52;2520:29;2539:9;2520:29;:::i;:::-;2510:39;;2568:38;2602:2;2591:9;2587:18;2568:38;:::i;:::-;2558:48;;2352:260;;;;;:::o;2617:254::-;2685:6;2693;2746:2;2734:9;2725:7;2721:23;2717:32;2714:52;;;2762:1;2759;2752:12;2714:52;2785:29;2804:9;2785:29;:::i;:::-;2775:39;2861:2;2846:18;;;;2833:32;;-1:-1:-1;;;2617:254:1:o;2876:118::-;2962:5;2955:13;2948:21;2941:5;2938:32;2928:60;;2984:1;2981;2974:12;2999:309;3064:6;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3177:9;3164:23;3154:33;;3237:2;3226:9;3222:18;3209:32;3250:28;3272:5;3250:28;:::i;:::-;3297:5;3287:15;;;2999:309;;;;;:::o;4133:127::-;4194:10;4189:3;4185:20;4182:1;4175:31;4225:4;4222:1;4215:15;4249:4;4246:1;4239:15;4265:902;4319:5;4372:3;4365:4;4357:6;4353:17;4349:27;4339:55;;4390:1;4387;4380:12;4339:55;4426:6;4413:20;4452:4;4475:18;4512:2;4508;4505:10;4502:36;;;4518:18;;:::i;:::-;4564:2;4561:1;4557:10;4596:2;4590:9;4659:2;4655:7;4650:2;4646;4642:11;4638:25;4630:6;4626:38;4714:6;4702:10;4699:22;4694:2;4682:10;4679:18;4676:46;4673:72;;;4725:18;;:::i;:::-;4761:2;4754:22;4811:18;;;4887:15;;;4883:24;;;4845:15;;;;-1:-1:-1;4919:15:1;;;4916:35;;;4947:1;4944;4937:12;4916:35;4983:2;4975:6;4971:15;4960:26;;4995:142;5011:6;5006:3;5003:15;4995:142;;;5077:17;;5065:30;;5115:12;;;;5028;;;;4995:142;;;5155:6;4265:902;-1:-1:-1;;;;;;;4265:902:1:o;5172:1275::-;5392:6;5400;5408;5416;5424;5477:3;5465:9;5456:7;5452:23;5448:33;5445:53;;;5494:1;5491;5484:12;5445:53;5534:9;5521:23;5563:18;5604:2;5596:6;5593:14;5590:34;;;5620:1;5617;5610:12;5590:34;5643:61;5696:7;5687:6;5676:9;5672:22;5643:61;:::i;:::-;5633:71;;5757:2;5746:9;5742:18;5729:32;5713:48;;5786:2;5776:8;5773:16;5770:36;;;5802:1;5799;5792:12;5770:36;5825:63;5880:7;5869:8;5858:9;5854:24;5825:63;:::i;:::-;5815:73;;5941:2;5930:9;5926:18;5913:32;5897:48;;5970:2;5960:8;5957:16;5954:36;;;5986:1;5983;5976:12;5954:36;6009:63;6064:7;6053:8;6042:9;6038:24;6009:63;:::i;:::-;5999:73;;6125:2;6114:9;6110:18;6097:32;6081:48;;6154:2;6144:8;6141:16;6138:36;;;6170:1;6167;6160:12;6138:36;6193:63;6248:7;6237:8;6226:9;6222:24;6193:63;:::i;:::-;6183:73;;6309:3;6298:9;6294:19;6281:33;6265:49;;6339:2;6329:8;6326:16;6323:36;;;6355:1;6352;6345:12;6323:36;;6378:63;6433:7;6422:8;6411:9;6407:24;6378:63;:::i;:::-;6368:73;;;5172:1275;;;;;;;;:::o;6452:316::-;6529:6;6537;6545;6598:2;6586:9;6577:7;6573:23;6569:32;6566:52;;;6614:1;6611;6604:12;6566:52;-1:-1:-1;;6637:23:1;;;6707:2;6692:18;;6679:32;;-1:-1:-1;6758:2:1;6743:18;;;6730:32;;6452:316;-1:-1:-1;6452:316:1:o;6773:385::-;6859:6;6867;6875;6883;6936:3;6924:9;6915:7;6911:23;6907:33;6904:53;;;6953:1;6950;6943:12;6904:53;-1:-1:-1;;6976:23:1;;;7046:2;7031:18;;7018:32;;-1:-1:-1;7097:2:1;7082:18;;7069:32;;7148:2;7133:18;7120:32;;-1:-1:-1;6773:385:1;-1:-1:-1;6773:385:1:o;7163:315::-;7228:6;7236;7289:2;7277:9;7268:7;7264:23;7260:32;7257:52;;;7305:1;7302;7295:12;7257:52;7328:29;7347:9;7328:29;:::i;:::-;7318:39;;7407:2;7396:9;7392:18;7379:32;7420:28;7442:5;7420:28;:::i;8331:342::-;8533:2;8515:21;;;8572:2;8552:18;;;8545:30;-1:-1:-1;;;8606:2:1;8591:18;;8584:48;8664:2;8649:18;;8331:342::o;8678:::-;8880:2;8862:21;;;8919:2;8899:18;;;8892:30;-1:-1:-1;;;8953:2:1;8938:18;;8931:48;9011:2;8996:18;;8678:342::o;9025:127::-;9086:10;9081:3;9077:20;9074:1;9067:31;9117:4;9114:1;9107:15;9141:4;9138:1;9131:15;9157:128;9224:9;;;9245:11;;;9242:37;;;9259:18;;:::i;9290:343::-;9492:2;9474:21;;;9531:2;9511:18;;;9504:30;-1:-1:-1;;;9565:2:1;9550:18;;9543:49;9624:2;9609:18;;9290:343::o;9638:168::-;9711:9;;;9742;;9759:15;;;9753:22;;9739:37;9729:71;;9780:18;;:::i;9811:217::-;9851:1;9877;9867:132;;9921:10;9916:3;9912:20;9909:1;9902:31;9956:4;9953:1;9946:15;9984:4;9981:1;9974:15;9867:132;-1:-1:-1;10013:9:1;;9811:217::o;10033:125::-;10098:9;;;10119:10;;;10116:36;;;10132:18;;:::i;10163:402::-;10365:2;10347:21;;;10404:2;10384:18;;;10377:30;10443:34;10438:2;10423:18;;10416:62;-1:-1:-1;;;10509:2:1;10494:18;;10487:36;10555:3;10540:19;;10163:402::o;10570:346::-;10772:2;10754:21;;;10811:2;10791:18;;;10784:30;-1:-1:-1;;;10845:2:1;10830:18;;10823:52;10907:2;10892:18;;10570:346::o;10921:338::-;11123:2;11105:21;;;11162:2;11142:18;;;11135:30;-1:-1:-1;;;11196:2:1;11181:18;;11174:44;11250:2;11235:18;;10921:338::o;11264:349::-;11466:2;11448:21;;;11505:2;11485:18;;;11478:30;11544:27;11539:2;11524:18;;11517:55;11604:2;11589:18;;11264:349::o;11618:135::-;11657:3;11678:17;;;11675:43;;11698:18;;:::i;:::-;-1:-1:-1;11745:1:1;11734:13;;11618:135::o;12431:273::-;12499:6;12552:2;12540:9;12531:7;12527:23;12523:32;12520:52;;;12568:1;12565;12558:12;12520:52;12600:9;12594:16;12650:4;12643:5;12639:16;12632:5;12629:27;12619:55;;12670:1;12667;12660:12;12709:422;12798:1;12841:5;12798:1;12855:270;12876:7;12866:8;12863:21;12855:270;;;12935:4;12931:1;12927:6;12923:17;12917:4;12914:27;12911:53;;;12944:18;;:::i;:::-;12994:7;12984:8;12980:22;12977:55;;;13014:16;;;;12977:55;13093:22;;;;13053:15;;;;12855:270;;;12859:3;12709:422;;;;;:::o;13136:806::-;13185:5;13215:8;13205:80;;-1:-1:-1;13256:1:1;13270:5;;13205:80;13304:4;13294:76;;-1:-1:-1;13341:1:1;13355:5;;13294:76;13386:4;13404:1;13399:59;;;;13472:1;13467:130;;;;13379:218;;13399:59;13429:1;13420:10;;13443:5;;;13467:130;13504:3;13494:8;13491:17;13488:43;;;13511:18;;:::i;:::-;-1:-1:-1;;13567:1:1;13553:16;;13582:5;;13379:218;;13681:2;13671:8;13668:16;13662:3;13656:4;13653:13;13649:36;13643:2;13633:8;13630:16;13625:2;13619:4;13616:12;13612:35;13609:77;13606:159;;;-1:-1:-1;13718:19:1;;;13750:5;;13606:159;13797:34;13822:8;13816:4;13797:34;:::i;:::-;13867:6;13863:1;13859:6;13855:19;13846:7;13843:32;13840:58;;;13878:18;;:::i;:::-;13916:20;;13136:806;-1:-1:-1;;;13136:806:1:o;13947:140::-;14005:5;14034:47;14075:4;14065:8;14061:19;14055:4;14034:47;:::i;14783:346::-;14985:2;14967:21;;;15024:2;15004:18;;;14997:30;-1:-1:-1;;;15058:2:1;15043:18;;15036:52;15120:2;15105:18;;14783:346::o;15413:245::-;15480:6;15533:2;15521:9;15512:7;15508:23;15504:32;15501:52;;;15549:1;15546;15539:12;15501:52;15581:9;15575:16;15600:28;15622:5;15600:28;:::i;16010:175::-;16047:3;16091:4;16084:5;16080:16;16120:4;16111:7;16108:17;16105:43;;16128:18;;:::i;:::-;16177:1;16164:15;;16010:175;-1:-1:-1;;16010:175:1:o;17226:179::-;17304:13;;17357:22;17346:34;;17336:45;;17326:73;;17395:1;17392;17385:12;17410:473;17513:6;17521;17529;17537;17545;17598:3;17586:9;17577:7;17573:23;17569:33;17566:53;;;17615:1;17612;17605:12;17566:53;17638:39;17667:9;17638:39;:::i;:::-;17628:49;;17717:2;17706:9;17702:18;17696:25;17686:35;;17761:2;17750:9;17746:18;17740:25;17730:35;;17805:2;17794:9;17790:18;17784:25;17774:35;;17828:49;17872:3;17861:9;17857:19;17828:49;:::i;:::-;17818:59;;17410:473;;;;;;;;:::o;17888:237::-;17960:9;;;17927:7;17985:9;;-1:-1:-1;;;17996:18:1;;17981:34;17978:60;;;18018:18;;:::i;:::-;18091:1;18082:7;18077:16;18074:1;18071:23;18067:1;18060:9;18057:38;18047:72;;18099:18;;:::i;19886:127::-;19947:10;19942:3;19938:20;19935:1;19928:31;19978:4;19975:1;19968:15;20002:4;19999:1;19992:15;22531:184;22601:6;22654:2;22642:9;22633:7;22629:23;22625:32;22622:52;;;22670:1;22667;22660:12;22622:52;-1:-1:-1;22693:16:1;;22531:184;-1:-1:-1;22531:184:1:o;23830:345::-;24032:2;24014:21;;;24071:2;24051:18;;;24044:30;-1:-1:-1;;;24105:2:1;24090:18;;24083:51;24166:2;24151:18;;23830:345::o

Swarm Source

ipfs://fc7d2b63adf86d214922cbc8df3389cbef8f5f73e8efd3ac102ed9a97f704a17

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.