Contract

0xAEC02F6D0b722274b6916dB224c4bA3418284697

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

-

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...20641772024-12-31 7:43:1347 hrs ago1735630993IN
0xAEC02F6D...418284697
0 S0.000033851.1

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AuditKYCVerify

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1 runs

Other Settings:
london EvmVersion, MIT license
File 1 of 1 : AuditKYCContract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
pragma experimental ABIEncoderV2;

interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
    }

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

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(owner);
        owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        _transferOwnership(_newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param _newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address _newOwner) internal {
        require(_newOwner != address(0));
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}

contract variables {
    address public constant platformTokenETH =
        0xF063fE1aB7a291c5d06a86e14730b00BF24cB589; // Sale token address valid for mainnet ETH
    address public constant platformTokenBSC =
        0x04F73A09e2eb410205BE256054794fB452f0D245; // Sale token address valid for mainnet BSC
    address public team_acc = 0xC14fb72518E67B008f1BD8E195861472f8128090; //valid for mainnet
    uint256 public minPlatTokenReq = 1000000000000000000000; //1000 sale tokens
    address public dead = 0x000000000000000000000000000000000000dEaD;
    bool public burn = false;
    bool public feesEnabled = false;
    uint256 public verifyFees = 1000000000000000000;
}

contract AuditKYCVerify is variables, Ownable {
    mapping(address => bool) public KYC;
    mapping(address => bool) public KYCAdded;
    mapping(address => address) public KYCedBy;
    mapping(address => string) public KYCedByName;
    mapping(address => bool) public KYCVerfied;
    mapping(address => string) public KYCComment;
    mapping(address => string) public KYCComment1;
    mapping(address => string) public KYCComment2;
    mapping(address => string) public KYCScore;
    mapping(address => string) public KYCName;
    mapping(address => bool) public verifiedKYCAlready;
    mapping(address => uint256) public KYCNumbers;
    mapping(address => mapping(uint256 => address)) public KYCTotalList;
    mapping(uint256 => address) public AllKYCWallets;
    mapping(uint256 => string) public dynamicBadge;
    mapping(address => bool) public badgeAccess;
    mapping(address => string) public badge;
    uint256 public KYCsverifiedNumber;
    uint256 public dynamicBadgeNumber;

    // DYNAMIC BADGE CODE START

    function addDynamicBadgeToken(address _token, uint256 _badgeNum) public {
        require(badgeAccess[msg.sender], "no badge add access");
        badge[_token] = dynamicBadge[_badgeNum];
    }

    function addDynamicBadgeKYC(address _wallet, uint256 _badgeNum) public {
        require(badgeAccess[msg.sender], "no badge add access");
        badge[_wallet] = dynamicBadge[_badgeNum];
    }

    // DYNAMIC BADGE CODE END

    function verifyKYC(
        address _wallet,
        string memory _score,
        string memory _comment,
        string memory _comment1,
        string memory _comment2
    ) public payable {
        require(KYC[msg.sender], "NO KYC Authorization");
        require(!verifiedKYCAlready[_wallet], "already verified!");

        if (feesEnabled) {
            if (burn) {
                require(
                    IERC20(platformTokenBSC).transferFrom(
                        msg.sender,
                        dead,
                        minPlatTokenReq
                    ),
                    "sale token transfer fail"
                );
            } else {
                require(
                    msg.value >= verifyFees,
                    "msg.value must be >= drop fees"
                );
                payable(team_acc).transfer(verifyFees);
            }
        }

        KYCVerfied[_wallet] = true;
        KYCComment[_wallet] = _comment;
        KYCComment1[_wallet] = _comment1;
        KYCComment2[_wallet] = _comment2;
        KYCScore[_wallet] = _score;
        KYCedBy[_wallet] = msg.sender;
        KYCedByName[_wallet] = KYCName[msg.sender];
        verifiedKYCAlready[_wallet] = true;
        AllKYCWallets[KYCsverifiedNumber] = _wallet;
        KYCsverifiedNumber++;

        KYCTotalList[msg.sender][KYCNumbers[msg.sender]] = _wallet;
        KYCNumbers[msg.sender]++;
    }

    function enableKYCbyProvider(address _walletAddress) public {
        require(KYC[msg.sender], "NOT KYC provider");
        require(
            KYCedBy[_walletAddress] == msg.sender,
            "Incorrect KYC provider"
        );
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCVerfied[_walletAddress] = true;
    }

    function disableKYCbyProvider(address _walletAddress) public {
        require(KYC[msg.sender], "NOT KYC provider");
        require(
            KYCedBy[_walletAddress] == msg.sender,
            "Incorrect KYC provider"
        );
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCVerfied[_walletAddress] = false;
    }

    function updateCommentKYC(address _walletAddress, string memory _newComment)
        public
    {
        require(KYC[msg.sender], "NOT KYC provider");
        require(
            KYCedBy[_walletAddress] == msg.sender,
            "Incorrect KYC provider"
        );
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCComment[_walletAddress] = _newComment;
    }

    function updateComment1KYC(
        address _walletAddress,
        string memory _newComment1
    ) public {
        require(KYC[msg.sender], "NOT KYC");
        require(KYCedBy[_walletAddress] == msg.sender, "Incorrect KYC");
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCComment1[_walletAddress] = _newComment1;
    }

    function updateComment2KYC(
        address _walletAddress,
        string memory _newComment2
    ) public {
        require(KYC[msg.sender], "NOT KYC");
        require(KYCedBy[_walletAddress] == msg.sender, "Incorrect KYC");
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCComment2[_walletAddress] = _newComment2;
    }

    function updateScoreKYC(address _walletAddress, string memory _newScore)
        public
    {
        require(KYC[msg.sender], "NOT KYC");
        require(KYCedBy[_walletAddress] == msg.sender, "Incorrect KYC");
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCScore[_walletAddress] = _newScore;
    }

    function addToKYC(address _KYCAddress, string memory _name)
        public
        onlyOwner
    {
        require(!KYC[_KYCAddress], "KYC already exist");
        KYC[_KYCAddress] = true;
        KYCAdded[_KYCAddress] = true;
        KYCName[_KYCAddress] = _name;
    }

    function addToKYCInternal(address _KYCAddress, string memory _name)
        internal
    {
        require(!KYC[_KYCAddress], "KYC already exist");
        KYC[_KYCAddress] = true;
        KYCAdded[_KYCAddress] = true;
        KYCName[_KYCAddress] = _name;
    }

    function updateKYCName(address _KYCAddress, string memory _newName)
        public
        onlyOwner
    {
        require(KYCAdded[_KYCAddress], "KYC doesn't exist");
        KYCName[_KYCAddress] = _newName;
    }

    function enableKYC(address _KYCAddress) public onlyOwner {
        require(KYCAdded[_KYCAddress], "KYC doesnot exist!");
        require(!KYC[_KYCAddress], "KYC already enabled");
        KYC[_KYCAddress] = true;
    }

    function disableKYC(address _KYCAddress) public onlyOwner {
        require(KYCAdded[_KYCAddress], "KYC doesnot exist!");
        require(KYC[_KYCAddress], "KYC already disabled");
        KYC[_KYCAddress] = false;
    }

    function disableKYCInternal(address _KYCAddress) internal {
        require(KYCAdded[_KYCAddress], "KYC doesnot exist!");
        require(KYC[_KYCAddress], "KYC already disabled");
        KYC[_KYCAddress] = false;
    }

    mapping(address => bool) public Auditors;
    mapping(address => bool) public AuditorsAdded;
    mapping(address => address) public auditedBy;
    mapping(address => string) public auditedByName;
    mapping(address => bool) public AuditVerfied;
    mapping(address => string) public auditorComment;
    mapping(address => string) public auditorComment1;
    mapping(address => string) public auditorComment2;
    mapping(address => string) public auditorScore;
    mapping(address => string) public AuditorName;
    mapping(address => bool) public verifiedAuditAlready;
    mapping(address => uint256) public AuditorNumbers;
    mapping(address => mapping(uint256 => address)) public AuditorTotalList;
    mapping(uint256 => address) public AllAuditTokens;
    uint256 public auditsverifiedNumber;

    function verifyAudit(
        address _token,
        string memory _score,
        string memory _comment,
        string memory _comment1,
        string memory _comment2
    ) public payable {
        require(Auditors[msg.sender], "NOT auditor");
        require(!verifiedAuditAlready[_token], "already audit verified!");

        if (feesEnabled) {
            if (burn) {
                require(
                    IERC20(platformTokenBSC).transferFrom(
                        msg.sender,
                        dead,
                        minPlatTokenReq
                    ),
                    "sale token transfer fail"
                );
            } else {
                require(
                    msg.value >= verifyFees,
                    "msg.value must be >= drop fees"
                );
                payable(team_acc).transfer(verifyFees);
            }
        }

        AuditVerfied[_token] = true;
        auditorComment[_token] = _comment;
        auditorComment1[_token] = _comment1;
        auditorComment2[_token] = _comment2;
        auditorScore[_token] = _score;
        auditedBy[_token] = msg.sender;
        auditedByName[_token] = AuditorName[msg.sender];
        verifiedAuditAlready[_token] = true;
        AllAuditTokens[auditsverifiedNumber] = _token;
        auditsverifiedNumber++;

        AuditorTotalList[msg.sender][AuditorNumbers[msg.sender]] = _token;
        AuditorNumbers[msg.sender]++;
    }

    function enableAuditbyProvider(address _tokenAddress) public {
        require(Auditors[msg.sender], "NOT Audit provider");
        require(
            auditedBy[_tokenAddress] == msg.sender,
            "Incorrect Audit provider"
        );
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not Audit verified yet"
        );
        AuditVerfied[_tokenAddress] = true;
    }

    function disableAuditbyProvider(address _tokenAddress) public {
        require(Auditors[msg.sender], "NOT Audit provider");
        require(
            auditedBy[_tokenAddress] == msg.sender,
            "Incorrect Audit provider"
        );
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not Audit verified yet"
        );
        AuditVerfied[_tokenAddress] = false;
    }

    function updateCommentAudit(
        address _tokenAddress,
        string memory _newComment
    ) public {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        auditorComment[_tokenAddress] = _newComment;
    }

    function updateComment1Audit(
        address _tokenAddress,
        string memory _newComment1
    ) public {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        auditorComment1[_tokenAddress] = _newComment1;
    }

    function updateComment2Audit(
        address _tokenAddress,
        string memory _newComment2
    ) public {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        auditorComment2[_tokenAddress] = _newComment2;
    }

    function updateScoreAudit(address _tokenAddress, string memory _newScore)
        public
    {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        auditorScore[_tokenAddress] = _newScore;
    }

    function addToAuditors(address _auditorAddress, string memory _name)
        public
        onlyOwner
    {
        require(!Auditors[_auditorAddress], "auditor already exist");
        Auditors[_auditorAddress] = true;
        AuditorsAdded[_auditorAddress] = true;
        AuditorName[_auditorAddress] = _name;
    }

    function addToAuditorsInternal(address _auditorAddress, string memory _name)
        internal
    {
        require(!Auditors[_auditorAddress], "auditor already exist");
        Auditors[_auditorAddress] = true;
        AuditorsAdded[_auditorAddress] = true;
        AuditorName[_auditorAddress] = _name;
    }

    function changeAuditorName(address _auditorAddress, string memory _newName)
        public
        onlyOwner
    {
        require(AuditorsAdded[_auditorAddress], "auditor doesn't exist");
        AuditorName[_auditorAddress] = _newName;
    }

    function enableAuditor(address _auditorAddress) public onlyOwner {
        require(AuditorsAdded[_auditorAddress], "auditor doesnot exist!");
        require(!Auditors[_auditorAddress], "Auditor already enabled");
        Auditors[_auditorAddress] = true;
    }

    function disableAuditor(address _auditorAddress) public onlyOwner {
        require(AuditorsAdded[_auditorAddress], "auditor doesnot exist!");
        require(Auditors[_auditorAddress], "Auditor already disabled");
        Auditors[_auditorAddress] = false;
    }

    function disableAuditorInternal(address _auditorAddress) internal {
        require(AuditorsAdded[_auditorAddress], "auditor doesnot exist!");
        require(Auditors[_auditorAddress], "Auditor already disabled");
        Auditors[_auditorAddress] = false;
    }

    function updateAuditorName(address _auditorAddress, string memory _newName)
        public
        onlyOwner
    {
        AuditorName[_auditorAddress] = _newName;
    }

    function updateDeadAddress(address _newDeadAddress) public onlyOwner {
        dead = _newDeadAddress;
    }

    function AddToKYCInMass(
        address[] memory _KYCAddresses,
        string[] memory _KYCNames
    ) public onlyOwner {
        for (uint256 i = 0; i < _KYCAddresses.length; i++) {
            addToKYCInternal(_KYCAddresses[i], _KYCNames[i]);
        }
    }

    function RemoveFromKYCInMass(address[] memory _KYCAddresses)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _KYCAddresses.length; i++) {
            disableKYCInternal(_KYCAddresses[i]);
        }
    }

    function AddToAuditorsInMass(
        address[] memory _auditorAddresses,
        string[] memory _auditorNames
    ) public onlyOwner {
        for (uint256 i = 0; i < _auditorAddresses.length; i++) {
            addToAuditorsInternal(_auditorAddresses[i], _auditorNames[i]);
        }
    }

    function RemoveFromAuditorsInMass(address[] memory _auditorAddresses)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _auditorAddresses.length; i++) {
            disableAuditorInternal(_auditorAddresses[i]);
        }
    }

    function changeSaleRequired(uint256 _newFeeAmount) public onlyOwner {
        require(_newFeeAmount >= 0, "invalid amount");
        minPlatTokenReq = _newFeeAmount;
    }

    function changeFees(uint256 _newFeeAmount) public onlyOwner {
        require(_newFeeAmount >= 0, "invalid amount");
        verifyFees = _newFeeAmount;
    }

    function removeKYCVerifiedByProvider(address _walletAddress) public {
        require(KYC[msg.sender], "NOT KYC provider");
        require(
            KYCedBy[_walletAddress] == msg.sender,
            "Incorrect KYC provider"
        );
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCVerfied[_walletAddress] = false;
    }

    function removeAuditVerifiedByProvider(address _tokenAddress) public {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        AuditVerfied[_tokenAddress] = false;
    }

    function reinstateKYCVerifiedByProvider(address _walletAddress) public {
        require(KYC[msg.sender], "NOT KYC provider");
        require(
            KYCedBy[_walletAddress] == msg.sender,
            "Incorrect KYC provider"
        );
        require(
            verifiedKYCAlready[_walletAddress],
            "token not KYC verified yet"
        );
        KYCVerfied[_walletAddress] = true;
    }

    function reinstateAuditVerifiedByProvider(address _tokenAddress) public {
        require(Auditors[msg.sender], "NOT auditor");
        require(auditedBy[_tokenAddress] == msg.sender, "Incorrect Auditor");
        require(
            verifiedAuditAlready[_tokenAddress],
            "token not audit verified yet"
        );
        AuditVerfied[_tokenAddress] = true;
    }

    function removeKYCVerified(address _walletAddress) public onlyOwner {
        KYCVerfied[_walletAddress] = false;
    }

    function removeAuditVerified(address _tokenAddress) public onlyOwner {
        AuditVerfied[_tokenAddress] = false;
    }

    function reinstateKYCVerified(address _walletAddress) public onlyOwner {
        KYCVerfied[_walletAddress] = true;
    }

    function reinstateAuditVerified(address _tokenAddress) public onlyOwner {
        AuditVerfied[_tokenAddress] = true;
    }

    function enableFees() public onlyOwner {
        feesEnabled = true;
    }

    function disableFees() public onlyOwner {
        feesEnabled = false;
    }

    function enableBurn() public onlyOwner {
        burn = true;
    }

    function disableBurn() public onlyOwner {
        burn = false;
    }

    function addBadge(string memory _badge) public onlyOwner {
        dynamicBadge[dynamicBadgeNumber] = _badge;
        dynamicBadgeNumber++;
    }

    function removeBadge(uint256 _badgeNumToRemove) public onlyOwner {
        dynamicBadge[_badgeNumToRemove] = " ";
    }

    function updateDynamicBadge(address _tokenOrWallet, uint256 _badgeNum)
        public
        onlyOwner
    {
        require(badgeAccess[msg.sender], "no badge add access");
        badge[_tokenOrWallet] = dynamicBadge[_badgeNum];
    }

    function changeBadge(uint256 _badgeNumToChange, string memory _newBadgeName)
        public
        onlyOwner
    {
        dynamicBadge[_badgeNumToChange] = _newBadgeName;
    }

    function addBadgeAccess(address _wallet) public onlyOwner {
        require(!badgeAccess[_wallet], "already added access");
        badgeAccess[_wallet] = true;
    }

    function removeBadgeAccess(address _wallet) public onlyOwner {
        require(badgeAccess[_wallet], "not in access list");
        badgeAccess[_wallet] = false;
    }

    function getAuditKycBool(address _auditInput, address _kycInput)
        public
        view
        returns (bool[2] memory)
    {
        return ([AuditVerfied[_auditInput], KYCVerfied[_kycInput]]);
    }

    function getTotalWalletsByKYC(address _KYC)
        public
        view
        returns (address[] memory)
    {
        address[] memory KYCedTokenList = new address[](KYCNumbers[_KYC]);
        for (uint256 i = 0; i < KYCNumbers[_KYC]; i++) {
            KYCedTokenList[i] = KYCTotalList[_KYC][i];
        }

        return KYCedTokenList;
    }

    function getTotalTokensByAuditor(address _Auditor)
        public
        view
        returns (address[] memory)
    {
        address[] memory auditedTokenList = new address[](
            AuditorNumbers[_Auditor]
        );
        for (uint256 i = 0; i < AuditorNumbers[_Auditor]; i++) {
            auditedTokenList[i] = AuditorTotalList[_Auditor][i];
        }

        return auditedTokenList;
    }

    function getDataKYC(address _wallet)
        public
        view
        returns (
            bool,
            address,
            string memory,
            string memory,
            string memory,
            string memory,
            string memory
        )
    {
        return (
            KYCVerfied[_wallet],
            KYCedBy[_wallet],
            KYCedByName[_wallet],
            KYCComment[_wallet],
            KYCComment1[_wallet],
            KYCComment2[_wallet],
            KYCScore[_wallet]
        );
    }

    function getDataArrKYCAudit(address _wallet, address _token)
        public
        view
        returns (
            bool,
            address,
            string[5] memory,
            bool,
            address,
            string[5] memory
        )
    {
        string[5] memory KYCInfo;
        string[5] memory AuditInfo;
        KYCInfo = [
            KYCedByName[_wallet],
            KYCComment[_wallet],
            KYCComment1[_wallet],
            KYCComment2[_wallet],
            KYCScore[_wallet]
        ];
        AuditInfo = [
            auditedByName[_token],
            auditorComment[_token],
            auditorComment1[_token],
            auditorComment2[_token],
            auditorScore[_token]
        ];
        return (
            KYCVerfied[_wallet],
            KYCedBy[_wallet],
            KYCInfo,
            AuditVerfied[_token],
            auditedBy[_token],
            AuditInfo
        );
    }

    function getAllKYCWallets() public view returns (address[] memory) {
        address[] memory WalletList = new address[](KYCsverifiedNumber);
        for (uint256 i = 0; i < KYCsverifiedNumber; i++) {
            WalletList[i] = AllKYCWallets[i];
        }

        return WalletList;
    }

    function getDataAudit(address _token)
        public
        view
        returns (
            bool,
            address,
            string memory,
            string memory,
            string memory,
            string memory,
            string memory
        )
    {
        return (
            AuditVerfied[_token],
            auditedBy[_token],
            auditedByName[_token],
            auditorComment[_token],
            auditorComment1[_token],
            auditorComment2[_token],
            auditorScore[_token]
        );
    }

    function getAllAuditTokens() public view returns (address[] memory) {
        address[] memory TokenList = new address[](auditsverifiedNumber);
        for (uint256 i = 0; i < auditsverifiedNumber; i++) {
            TokenList[i] = AllAuditTokens[i];
        }

        return TokenList;
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 1
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address[]","name":"_auditorAddresses","type":"address[]"},{"internalType":"string[]","name":"_auditorNames","type":"string[]"}],"name":"AddToAuditorsInMass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_KYCAddresses","type":"address[]"},{"internalType":"string[]","name":"_KYCNames","type":"string[]"}],"name":"AddToKYCInMass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"AllAuditTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"AllKYCWallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AuditVerfied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AuditorName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AuditorNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"AuditorTotalList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Auditors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AuditorsAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCComment","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCComment1","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCComment2","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCScore","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"KYCTotalList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCVerfied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCedBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"KYCedByName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KYCsverifiedNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_auditorAddresses","type":"address[]"}],"name":"RemoveFromAuditorsInMass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_KYCAddresses","type":"address[]"}],"name":"RemoveFromKYCInMass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_badge","type":"string"}],"name":"addBadge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"addBadgeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_badgeNum","type":"uint256"}],"name":"addDynamicBadgeKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_badgeNum","type":"uint256"}],"name":"addDynamicBadgeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auditorAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"addToAuditors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_KYCAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"addToKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditedBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditedByName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditorComment","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditorComment1","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditorComment2","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auditorScore","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditsverifiedNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"badge","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"badgeAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_auditorAddress","type":"address"},{"internalType":"string","name":"_newName","type":"string"}],"name":"changeAuditorName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_badgeNumToChange","type":"uint256"},{"internalType":"string","name":"_newBadgeName","type":"string"}],"name":"changeBadge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFeeAmount","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFeeAmount","type":"uint256"}],"name":"changeSaleRequired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"disableAuditbyProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auditorAddress","type":"address"}],"name":"disableAuditor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_KYCAddress","type":"address"}],"name":"disableKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"disableKYCbyProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dynamicBadge","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicBadgeNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"enableAuditbyProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auditorAddress","type":"address"}],"name":"enableAuditor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_KYCAddress","type":"address"}],"name":"enableKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"enableKYCbyProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAuditTokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllKYCWallets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_auditInput","type":"address"},{"internalType":"address","name":"_kycInput","type":"address"}],"name":"getAuditKycBool","outputs":[{"internalType":"bool[2]","name":"","type":"bool[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"getDataArrKYCAudit","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"},{"internalType":"string[5]","name":"","type":"string[5]"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"},{"internalType":"string[5]","name":"","type":"string[5]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getDataAudit","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getDataKYC","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_Auditor","type":"address"}],"name":"getTotalTokensByAuditor","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_KYC","type":"address"}],"name":"getTotalWalletsByKYC","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPlatTokenReq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformTokenBSC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformTokenETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"reinstateAuditVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"reinstateAuditVerifiedByProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"reinstateKYCVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"reinstateKYCVerifiedByProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"removeAuditVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"removeAuditVerifiedByProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_badgeNumToRemove","type":"uint256"}],"name":"removeBadge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeBadgeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"removeKYCVerified","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"removeKYCVerifiedByProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"team_acc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auditorAddress","type":"address"},{"internalType":"string","name":"_newName","type":"string"}],"name":"updateAuditorName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_newComment1","type":"string"}],"name":"updateComment1Audit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"string","name":"_newComment1","type":"string"}],"name":"updateComment1KYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_newComment2","type":"string"}],"name":"updateComment2Audit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"string","name":"_newComment2","type":"string"}],"name":"updateComment2KYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_newComment","type":"string"}],"name":"updateCommentAudit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"string","name":"_newComment","type":"string"}],"name":"updateCommentKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDeadAddress","type":"address"}],"name":"updateDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOrWallet","type":"address"},{"internalType":"uint256","name":"_badgeNum","type":"uint256"}],"name":"updateDynamicBadge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_KYCAddress","type":"address"},{"internalType":"string","name":"_newName","type":"string"}],"name":"updateKYCName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"string","name":"_newScore","type":"string"}],"name":"updateScoreAudit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"},{"internalType":"string","name":"_newScore","type":"string"}],"name":"updateScoreKYC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"verifiedAuditAlready","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"verifiedKYCAlready","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_score","type":"string"},{"internalType":"string","name":"_comment","type":"string"},{"internalType":"string","name":"_comment1","type":"string"},{"internalType":"string","name":"_comment2","type":"string"}],"name":"verifyAudit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"verifyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_score","type":"string"},{"internalType":"string","name":"_comment","type":"string"},{"internalType":"string","name":"_comment1","type":"string"},{"internalType":"string","name":"_comment2","type":"string"}],"name":"verifyKYC","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052600080546001600160a01b03191673c14fb72518e67b008f1bd8e195861472f8128090179055683635c9adc5dea00000600155600280546001600160b01b03191661dead179055670de0b6b3a764000060035534801561006357600080fd5b50600480546001600160a01b03191633179055614d16806100856000396000f3fe6080604052600436106104805760003560e01c80630482074b14610485578063048838f0146104a75780630fa3f0f7146104c75780630fcd8c321461050c57806310855c571461052c57806311e409eb1461054c5780631645dfa31461056c5780632215b8a0146105c5578063227748a6146105e557806323d4d3051461061b5780632403c08e1461063f5780632594498014610654578063262d452b146106545780632abe2e94146106745780632e861ad4146106945780632f514359146106c4578063326aa6971461070557806332f7798714610732578063368f5bd51461075257806336cf7c87146107675780633902dae7146107875780633b37d1d6146107a75780633bcdf80c146107bc5780633f66398c146107ef57806343a6fc151461080f57806344df8e701461082f5780634628944614610850578063463a7974146108705780634728f3e914610890578063498cb4b5146108bd5780634a91353b146108d35780634a9f480e146108f357806350cee5fb146109135780635f607c2a1461093357806364041b64146109535780636459cad814610983578063678db83c1461099957806367f1c0f0146109c657806368d169cb146109e65780636b00ced614610a1c5780636b8734fe14610a3c5780636cda375b14610a515780636e499d1c14610a715780636f750cdd14610a91578063704501d014610ab1578063715018a614610ad1578063728cdb6314610ae657806373e0070114610b0657806373f56c8314610b265780637abf2a4e14610b465780638294cbd214610b7657806384f1202214610b9657806385c5d2de14610bb657806388e179c714610be65780638a64d65e14610c065780638cda4b0b14610c265780638da5cb5b14610c4657806395a4373214610c66578063a1bb675f14610c86578063a3c2b39114610ca6578063a55d2da514610cc6578063a64e4f8a14610cf6578063a71e7b4c14610d17578063a7db0c5614610d2d578063ac2d709314610d5a578063ac361e7414610d8a578063ae359ec714610daa578063aef4856714610de0578063af51f6d614610e00578063b376831914610e20578063b7f5db9c14610e33578063b9f1e8c114610e53578063bbc74f5514610e73578063bd3b104614610ea0578063bfe3f74514610ed0578063c241ae0814610f02578063c252ca6a14610f2a578063c34b8b9714610f3d578063c38ecd7114610f73578063c3ef6d0914610f93578063c761a80914610fb3578063c7a247a814610fe3578063ca3487fe14611003578063cb83413614611019578063cbd18f7114611039578063cbef0d0a14611059578063ce404b2314611079578063d01b32091461108e578063d407ecc1146110ae578063d43d665514610485578063d503022c146110ce578063d978d90f14610a1c578063e1004d3e146110f6578063e4bd43db14611116578063e5bd76ad14611136578063ec7463ab14611156578063efbae0f614611176578063f2fde38b14611196578063f42cec56146111b6578063f5d02784146111d6578063f9ab0672146111f6578063fb76a3ae14611216578063fdab601614611236575b600080fd5b34801561049157600080fd5b506104a56104a0366004614132565b61124b565b005b3480156104b357600080fd5b506104a56104c2366004614132565b611315565b3480156104d357600080fd5b506104f76104e2366004614132565b60196020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561051857600080fd5b506104a5610527366004614209565b6113eb565b34801561053857600080fd5b506104a5610547366004614209565b6114b2565b34801561055857600080fd5b506104a5610567366004614132565b611574565b34801561057857600080fd5b506105ad610587366004614256565b60116020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b039091168152602001610503565b3480156105d157600080fd5b506104a56105e0366004614132565b611638565b3480156105f157600080fd5b506105ad610600366004614280565b6012602052600090815260409020546001600160a01b031681565b34801561062757600080fd5b5061063160175481565b604051908152602001610503565b34801561064b57600080fd5b506104a56116d8565b34801561066057600080fd5b506104a561066f366004614256565b6116fe565b34801561068057600080fd5b506104a561068f366004614280565b611783565b3480156106a057600080fd5b506104f76106af366004614132565b60226020526000908152604090205460ff1681565b3480156106d057600080fd5b506105ad6106df366004614256565b60246020908152600092835260408084209091529082529020546001600160a01b031681565b34801561071157600080fd5b50610725610720366004614132565b61179f565b60405161050391906142df565b34801561073e57600080fd5b506104a561074d366004614132565b611839565b34801561075e57600080fd5b506104a56118fa565b34801561077357600080fd5b506002546105ad906001600160a01b031681565b34801561079357600080fd5b506104a56107a2366004614209565b611926565b3480156107b357600080fd5b506104a56119bf565b3480156107c857600080fd5b506107dc6107d7366004614132565b6119eb565b60405161050397969594939291906142f2565b3480156107fb57600080fd5b506104a561080a366004614209565b611d26565b34801561081b57600080fd5b5061072561082a366004614132565b611de8565b34801561083b57600080fd5b506002546104f790600160a01b900460ff1681565b34801561085c57600080fd5b5061072561086b366004614132565b611e01565b34801561087c57600080fd5b5061072561088b366004614132565b611e1a565b34801561089c57600080fd5b506108b06108ab366004614132565b611e33565b604051610503919061437a565b3480156108c957600080fd5b5061063160015481565b3480156108df57600080fd5b506104a56108ee366004614132565b611f23565b3480156108ff57600080fd5b506104a561090e366004614132565b611f3a565b34801561091f57600080fd5b506104a561092e36600461445c565b612009565b34801561093f57600080fd5b5061072561094e366004614132565b612064565b34801561095f57600080fd5b506104f761096e366004614132565b601c6020526000908152604090205460ff1681565b34801561098f57600080fd5b5061063160035481565b3480156109a557600080fd5b506109b96109b4366004614498565b61207d565b60405161050391906144cb565b3480156109d257600080fd5b506104a56109e1366004614132565b6120d0565b3480156109f257600080fd5b506105ad610a01366004614132565b601a602052600090815260409020546001600160a01b031681565b348015610a2857600080fd5b506104a5610a37366004614132565b61210b565b348015610a4857600080fd5b506108b06121ab565b348015610a5d57600080fd5b506104a5610a6c366004614280565b612261565b348015610a7d57600080fd5b50610725610a8c366004614132565b61227d565b348015610a9d57600080fd5b506104a5610aac3660046144fe565b612296565b348015610abd57600080fd5b506104a5610acc366004614209565b612307565b348015610add57600080fd5b506104a56123c9565b348015610af257600080fd5b506104a5610b013660046144fe565b61242a565b348015610b1257600080fd5b50610725610b21366004614132565b61249b565b348015610b3257600080fd5b506104a5610b41366004614209565b6124b4565b348015610b5257600080fd5b506104f7610b61366004614132565b600f6020526000908152604090205460ff1681565b348015610b8257600080fd5b506104a5610b91366004614132565b612576565b348015610ba257600080fd5b50610725610bb1366004614132565b61260b565b348015610bc257600080fd5b506104f7610bd1366004614132565b60066020526000908152604090205460ff1681565b348015610bf257600080fd5b50610725610c01366004614132565b612624565b348015610c1257600080fd5b506000546105ad906001600160a01b031681565b348015610c3257600080fd5b506104a5610c41366004614209565b61263d565b348015610c5257600080fd5b506004546105ad906001600160a01b031681565b348015610c7257600080fd5b506104a5610c81366004614209565b6126fe565b348015610c9257600080fd5b506104a5610ca1366004614256565b6127c2565b348015610cb257600080fd5b50610725610cc1366004614132565b6127d9565b348015610cd257600080fd5b506104f7610ce1366004614132565b60146020526000908152604090205460ff1681565b348015610d0257600080fd5b506002546104f790600160a81b900460ff1681565b348015610d2357600080fd5b5061063160265481565b348015610d3957600080fd5b50610631610d48366004614132565b60236020526000908152604090205481565b348015610d6657600080fd5b506104f7610d75366004614132565b60186020526000908152604090205460ff1681565b348015610d9657600080fd5b506104a5610da5366004614209565b6127f2565b348015610db657600080fd5b506105ad610dc5366004614280565b6025602052600090815260409020546001600160a01b031681565b348015610dec57600080fd5b506104a5610dfb366004614132565b612887565b348015610e0c57600080fd5b506104a5610e1b366004614132565b612922565b6104a5610e2e3660046145d2565b61295b565b348015610e3f57600080fd5b506104a5610e4e366004614209565b612cdd565b348015610e5f57600080fd5b506104a5610e6e36600461468f565b612d9f565b348015610e7f57600080fd5b50610631610e8e366004614132565b60106020526000908152604090205481565b348015610eac57600080fd5b506104f7610ebb366004614132565b60056020526000908152604090205460ff1681565b348015610edc57600080fd5b50610ef0610eeb366004614498565b612dce565b60405161050396959493929190614704565b348015610f0e57600080fd5b506105ad73f063fe1ab7a291c5d06a86e14730b00bf24cb58981565b6104a5610f383660046145d2565b613557565b348015610f4957600080fd5b506105ad610f58366004614132565b6007602052600090815260409020546001600160a01b031681565b348015610f7f57600080fd5b506104a5610f8e36600461445c565b6138ab565b348015610f9f57600080fd5b506104a5610fae366004614209565b613902565b348015610fbf57600080fd5b506104f7610fce366004614132565b60096020526000908152604090205460ff1681565b348015610fef57600080fd5b50610725610ffe366004614132565b6139c4565b34801561100f57600080fd5b5061063160165481565b34801561102557600080fd5b50610725611034366004614132565b6139dc565b34801561104557600080fd5b506104a5611054366004614132565b6139f5565b34801561106557600080fd5b506104a5611074366004614132565b613a95565b34801561108557600080fd5b506104a5613aac565b34801561109a57600080fd5b506107256110a9366004614280565b613ad2565b3480156110ba57600080fd5b506104a56110c9366004614209565b613aeb565b3480156110da57600080fd5b506105ad7304f73a09e2eb410205be256054794fb452f0d24581565b34801561110257600080fd5b506104a5611111366004614750565b613b02565b34801561112257600080fd5b506104a5611131366004614132565b613b4d565b34801561114257600080fd5b506107dc611151366004614132565b613c1f565b34801561116257600080fd5b506104a5611171366004614132565b613c93565b34801561118257600080fd5b50610725611191366004614132565b613caa565b3480156111a257600080fd5b506104a56111b1366004614132565b613cc3565b3480156111c257600080fd5b506104a56111d1366004614209565b613ce6565b3480156111e257600080fd5b506104a56111f1366004614132565b613da6565b34801561120257600080fd5b506104a5611211366004614280565b613e79565b34801561122257600080fd5b506108b0611231366004614132565b613ec9565b34801561124257600080fd5b506108b0613fb2565b3360009081526005602052604090205460ff166112835760405162461bcd60e51b815260040161127a90614784565b60405180910390fd5b6001600160a01b038181166000908152600760205260409020541633146112bc5760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0381166000908152600f602052604090205460ff166112f45760405162461bcd60e51b815260040161127a906147de565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6004546001600160a01b0316331461132c57600080fd5b6001600160a01b03811660009081526019602052604090205460ff166113645760405162461bcd60e51b815260040161127a90614812565b6001600160a01b03811660009081526018602052604090205460ff16156113c75760405162461bcd60e51b8152602060048201526017602482015276105d591a5d1bdc88185b1c9958591e48195b98589b1959604a1b604482015260640161127a565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b3360009081526005602052604090205460ff1661141a5760405162461bcd60e51b815260040161127a90614842565b6001600160a01b038281166000908152600760205260409020541633146114535760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff1661148b5760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600c602052604090206114ad8282614921565b505050565b3360009081526005602052604090205460ff166114e15760405162461bcd60e51b815260040161127a90614784565b6001600160a01b0382811660009081526007602052604090205416331461151a5760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0382166000908152600f602052604090205460ff166115525760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600a602052604090206114ad8282614921565b3360009081526018602052604090205460ff166115a35760405162461bcd60e51b815260040161127a906149da565b6001600160a01b038181166000908152601a60205260409020541633146115dc5760405162461bcd60e51b815260040161127a90614a06565b6001600160a01b03811660009081526022602052604090205460ff166116145760405162461bcd60e51b815260040161127a90614a38565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b3360009081526018602052604090205460ff166116675760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038181166000908152601a60205260409020541633146116a05760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03811660009081526022602052604090205460ff166116145760405162461bcd60e51b815260040161127a90614abe565b6004546001600160a01b031633146116ef57600080fd5b6002805460ff60a01b19169055565b3360009081526014602052604090205460ff166117535760405162461bcd60e51b81526020600482015260136024820152726e6f206261646765206164642061636365737360681b604482015260640161127a565b60008181526013602090815260408083206001600160a01b03861684526015909252909120906114ad9082614af4565b6004546001600160a01b0316331461179a57600080fd5b600155565b600e60205260009081526040902080546117b89061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e49061488a565b80156118315780601f1061180657610100808354040283529160200191611831565b820191906000526020600020905b81548152906001019060200180831161181457829003601f168201915b505050505081565b3360009081526018602052604090205460ff166118685760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038181166000908152601a60205260409020541633146118a15760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03811660009081526022602052604090205460ff166118d95760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6004546001600160a01b0316331461191157600080fd5b6002805460ff60a81b1916600160a81b179055565b6004546001600160a01b0316331461193d57600080fd5b6001600160a01b03821660009081526019602052604090205460ff1661199d5760405162461bcd60e51b8152602060048201526015602482015274185d591a5d1bdc88191bd95cdb89dd08195e1a5cdd605a1b604482015260640161127a565b6001600160a01b03821660009081526021602052604090206114ad8282614921565b6004546001600160a01b031633146119d657600080fd5b6002805460ff60a01b1916600160a01b179055565b6001600160a01b038082166000908152601c6020908152604080832054601a835281842054601b8452828520601d8552838620601e8652848720601f8752858820968052948720825497988998606098899889988998899860ff909216979516959094939192918590611a5d9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a899061488a565b8015611ad65780601f10611aab57610100808354040283529160200191611ad6565b820191906000526020600020905b815481529060010190602001808311611ab957829003601f168201915b50505050509450838054611ae99061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b159061488a565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b50505050509350828054611b759061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba19061488a565b8015611bee5780601f10611bc357610100808354040283529160200191611bee565b820191906000526020600020905b815481529060010190602001808311611bd157829003601f168201915b50505050509250818054611c019061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2d9061488a565b8015611c7a5780601f10611c4f57610100808354040283529160200191611c7a565b820191906000526020600020905b815481529060010190602001808311611c5d57829003601f168201915b50505050509150808054611c8d9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb99061488a565b8015611d065780601f10611cdb57610100808354040283529160200191611d06565b820191906000526020600020905b815481529060010190602001808311611ce957829003601f168201915b505050505090509650965096509650965096509650919395979092949650565b3360009081526018602052604090205460ff16611d555760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a6020526040902054163314611d8e5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff16611dc65760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601d602052604090206114ad8282614921565b601f60205260009081526040902080546117b89061488a565b600c60205260009081526040902080546117b89061488a565b600a60205260009081526040902080546117b89061488a565b6001600160a01b038116600090815260106020526040812054606091906001600160401b03811115611e6757611e67614154565b604051908082528060200260200182016040528015611e90578160200160208202803683370190505b50905060005b6001600160a01b038416600090815260106020526040902054811015611f1c576001600160a01b0380851660009081526011602090815260408083208584529091529020548351911690839083908110611ef257611ef2614bc8565b6001600160a01b039092166020928302919091019091015280611f1481614bde565b915050611e96565b5092915050565b6004546001600160a01b031633146112f457600080fd5b6004546001600160a01b03163314611f5157600080fd5b6001600160a01b03811660009081526006602052604090205460ff16611f895760405162461bcd60e51b815260040161127a90614c05565b6001600160a01b03811660009081526005602052604090205460ff16611fe85760405162461bcd60e51b815260206004820152601460248201527312d650c8185b1c9958591e48191a5cd8589b195960621b604482015260640161127a565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6004546001600160a01b0316331461202057600080fd5b60005b81518110156120605761204e82828151811061204157612041614bc8565b6020026020010151613dbd565b8061205881614bde565b915050612023565b5050565b601b60205260009081526040902080546117b89061488a565b6120856140d1565b506040805180820182526001600160a01b038085166000908152601c60209081528482205460ff90811615158552928616825260098152939020541615159181019190915292915050565b6004546001600160a01b031633146120e757600080fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b3360009081526005602052604090205460ff1661213a5760405162461bcd60e51b815260040161127a90614784565b6001600160a01b038181166000908152600760205260409020541633146121735760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0381166000908152600f602052604090205460ff166120e75760405162461bcd60e51b815260040161127a906147de565b606060006026546001600160401b038111156121c9576121c9614154565b6040519080825280602002602001820160405280156121f2578160200160208202803683370190505b50905060005b60265481101561225b5760008181526025602052604090205482516001600160a01b039091169083908390811061223157612231614bc8565b6001600160a01b03909216602092830291909101909101528061225381614bde565b9150506121f8565b50919050565b6004546001600160a01b0316331461227857600080fd5b600355565b601e60205260009081526040902080546117b89061488a565b6004546001600160a01b031633146122ad57600080fd5b60005b82518110156114ad576122f58382815181106122ce576122ce614bc8565b60200260200101518383815181106122e8576122e8614bc8565b6020026020010151612715565b806122ff81614bde565b9150506122b0565b3360009081526005602052604090205460ff166123365760405162461bcd60e51b815260040161127a90614842565b6001600160a01b0382811660009081526007602052604090205416331461236f5760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff166123a75760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600d602052604090206114ad8282614921565b6004546001600160a01b031633146123e057600080fd5b6004546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600480546001600160a01b0319169055565b6004546001600160a01b0316331461244157600080fd5b60005b82518110156114ad5761248983828151811061246257612462614bc8565b602002602001015183838151811061247c5761247c614bc8565b6020026020010151613cfd565b8061249381614bde565b915050612444565b601d60205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff166124e35760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a602052604090205416331461251c5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166125545760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601f602052604090206114ad8282614921565b6004546001600160a01b0316331461258d57600080fd5b6001600160a01b03811660009081526014602052604090205460ff166125ea5760405162461bcd60e51b81526020600482015260126024820152711b9bdd081a5b881858d8d95cdcc81b1a5cdd60721b604482015260640161127a565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600d60205260009081526040902080546117b89061488a565b601560205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff1661266c5760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a60205260409020541633146126a55760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166126dd5760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b038216600090815260208052604090206114ad8282614921565b6004546001600160a01b0316331461271557600080fd5b6001600160a01b03821660009081526018602052604090205460ff16156127765760405162461bcd60e51b8152602060048201526015602482015274185d591a5d1bdc88185b1c9958591e48195e1a5cdd605a1b604482015260640161127a565b6001600160a01b03821660009081526018602090815260408083208054600160ff1991821681179092556019845282852080549091169091179055602190915290206114ad8282614921565b6004546001600160a01b031633146116fe57600080fd5b602160205260009081526040902080546117b89061488a565b6004546001600160a01b0316331461280957600080fd5b6001600160a01b03821660009081526006602052604090205460ff166128655760405162461bcd60e51b815260206004820152601160248201527012d650c8191bd95cdb89dd08195e1a5cdd607a1b604482015260640161127a565b6001600160a01b0382166000908152600e602052604090206114ad8282614921565b6004546001600160a01b0316331461289e57600080fd5b6001600160a01b03811660009081526014602052604090205460ff16156128fe5760405162461bcd60e51b8152602060048201526014602482015273616c72656164792061646465642061636365737360601b604482015260640161127a565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6004546001600160a01b0316331461293957600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526005602052604090205460ff166129b15760405162461bcd60e51b815260206004820152601460248201527327279025aca19020baba3437b934bd30ba34b7b760611b604482015260640161127a565b6001600160a01b0385166000908152600f602052604090205460ff1615612a0e5760405162461bcd60e51b8152602060048201526011602482015270616c72656164792076657269666965642160781b604482015260640161127a565b600254600160a81b900460ff1615612b3d57600254600160a01b900460ff1615612ade576002546001546040516323b872dd60e01b81527304f73a09e2eb410205be256054794fb452f0d245926323b872dd92612a7a9233926001600160a01b03169190600401614c31565b6020604051808303816000875af1158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190614c55565b612ad95760405162461bcd60e51b815260040161127a90614c77565b612b3d565b600354341015612b005760405162461bcd60e51b815260040161127a90614ca9565b600080546003546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015612b3b573d6000803e3d6000fd5b505b6001600160a01b0385166000908152600960209081526040808320805460ff19166001179055600a9091529020612b748482614921565b506001600160a01b0385166000908152600b60205260409020612b978382614921565b506001600160a01b0385166000908152600c60205260409020612bba8282614921565b506001600160a01b0385166000908152600d60205260409020612bdd8582614921565b506001600160a01b038516600081815260076020908152604080832080546001600160a01b031916339081179091558352600e82528083209383526008909152902090612c2a9082614af4565b506001600160a01b0385166000818152600f60209081526040808320805460ff191660011790556016805484526012909252822080546001600160a01b03191690931790925581549190612c7d83614bde565b909155505033600081815260116020908152604080832060108084528285208054865291845291842080546001600160a01b0319166001600160a01b038c16179055938352905281549190612cd183614bde565b91905055505050505050565b3360009081526005602052604090205460ff16612d0c5760405162461bcd60e51b815260040161127a90614842565b6001600160a01b03828116600090815260076020526040902054163314612d455760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff16612d7d5760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600b602052604090206114ad8282614921565b6004546001600160a01b03163314612db657600080fd5b60008281526013602052604090206114ad8282614921565b600080612dd96140ef565b600080612de46140ef565b612dec6140ef565b612df46140ef565b6040805160a0810182526001600160a01b038c1660009081526008602052919091208054829190612e249061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612e509061488a565b8015612e9d5780601f10612e7257610100808354040283529160200191612e9d565b820191906000526020600020905b815481529060010190602001808311612e8057829003601f168201915b50505050508152602001600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000208054612ed79061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612f039061488a565b8015612f505780601f10612f2557610100808354040283529160200191612f50565b820191906000526020600020905b815481529060010190602001808311612f3357829003601f168201915b50505050508152602001600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000208054612f8a9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612fb69061488a565b80156130035780601f10612fd857610100808354040283529160200191613003565b820191906000526020600020905b815481529060010190602001808311612fe657829003601f168201915b50505050508152602001600c60008d6001600160a01b03166001600160a01b03168152602001908152602001600020805461303d9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546130699061488a565b80156130b65780601f1061308b576101008083540402835291602001916130b6565b820191906000526020600020905b81548152906001019060200180831161309957829003601f168201915b50505050508152602001600d60008d6001600160a01b03166001600160a01b0316815260200190815260200160002080546130f09061488a565b80601f016020809104026020016040519081016040528092919081815260200182805461311c9061488a565b80156131695780601f1061313e57610100808354040283529160200191613169565b820191906000526020600020905b81548152906001019060200180831161314c57829003601f168201915b505050505081525091506040518060a00160405280601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546131ae9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546131da9061488a565b80156132275780601f106131fc57610100808354040283529160200191613227565b820191906000526020600020905b81548152906001019060200180831161320a57829003601f168201915b50505050508152602001601d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546132619061488a565b80601f016020809104026020016040519081016040528092919081815260200182805461328d9061488a565b80156132da5780601f106132af576101008083540402835291602001916132da565b820191906000526020600020905b8154815290600101906020018083116132bd57829003601f168201915b50505050508152602001601e60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546133149061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546133409061488a565b801561338d5780601f106133625761010080835404028352916020019161338d565b820191906000526020600020905b81548152906001019060200180831161337057829003601f168201915b50505050508152602001601f60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546133c79061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546133f39061488a565b80156134405780601f1061341557610100808354040283529160200191613440565b820191906000526020600020905b81548152906001019060200180831161342357829003601f168201915b50505050508152602001602060008c6001600160a01b03166001600160a01b03168152602001908152602001600020805461347a9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546134a69061488a565b80156134f35780601f106134c8576101008083540402835291602001916134f3565b820191906000526020600020905b8154815290600101906020018083116134d657829003601f168201915b5050509190925250506001600160a01b039a8b1660009081526009602090815260408083205460078352818420549d8f168452601c835281842054601a90935292205460ff9283169e9c8e169d959c929091169a5090931697509550909350505050565b3360009081526018602052604090205460ff166135865760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b03851660009081526022602052604090205460ff16156135e95760405162461bcd60e51b8152602060048201526017602482015276616c72656164792061756469742076657269666965642160481b604482015260640161127a565b600254600160a81b900460ff161561371857600254600160a01b900460ff16156136b9576002546001546040516323b872dd60e01b81527304f73a09e2eb410205be256054794fb452f0d245926323b872dd926136559233926001600160a01b03169190600401614c31565b6020604051808303816000875af1158015613674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136989190614c55565b6136b45760405162461bcd60e51b815260040161127a90614c77565b613718565b6003543410156136db5760405162461bcd60e51b815260040161127a90614ca9565b600080546003546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015613716573d6000803e3d6000fd5b505b6001600160a01b0385166000908152601c60209081526040808320805460ff19166001179055601d909152902061374f8482614921565b506001600160a01b0385166000908152601e602052604090206137728382614921565b506001600160a01b0385166000908152601f602052604090206137958282614921565b506001600160a01b038516600090815260208052604090206137b78582614921565b506001600160a01b0385166000818152601a6020908152604080832080546001600160a01b03191633908117909155835260218252808320938352601b9091529020906138049082614af4565b506001600160a01b0385166000818152602260209081526040808320805460ff191660011790556026805484526025909252822080546001600160a01b0319169093179092558154919061385783614bde565b909155505033600081815260246020908152604080832060238084528285208054865291845291842080546001600160a01b0319166001600160a01b038c16179055938352905281549190612cd183614bde565b6004546001600160a01b031633146138c257600080fd5b60005b8151811015612060576138f08282815181106138e3576138e3614bc8565b6020026020010151611f51565b806138fa81614bde565b9150506138c5565b3360009081526018602052604090205460ff166139315760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a602052604090205416331461396a5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166139a25760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601e602052604090206114ad8282614921565b6020805260009081526040902080546117b89061488a565b600b60205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff16613a245760405162461bcd60e51b815260040161127a906149da565b6001600160a01b038181166000908152601a6020526040902054163314613a5d5760405162461bcd60e51b815260040161127a90614a06565b6001600160a01b03811660009081526022602052604090205460ff166118d95760405162461bcd60e51b815260040161127a90614a38565b6004546001600160a01b031633146118d957600080fd5b6004546001600160a01b03163314613ac357600080fd5b6002805460ff60a81b19169055565b601360205260009081526040902080546117b89061488a565b6004546001600160a01b0316331461199d57600080fd5b6004546001600160a01b03163314613b1957600080fd5b6017546000908152601360205260409020613b348282614921565b5060178054906000613b4583614bde565b919050555050565b6004546001600160a01b03163314613b6457600080fd5b6001600160a01b03811660009081526006602052604090205460ff16613b9c5760405162461bcd60e51b815260040161127a90614c05565b6001600160a01b03811660009081526005602052604090205460ff1615613bfb5760405162461bcd60e51b815260206004820152601360248201527212d650c8185b1c9958591e48195b98589b1959606a1b604482015260640161127a565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6001600160a01b03808216600090815260096020908152604080832054600783528184205460088452828520600a8552838620600b8652848720600c8752858820600d909752948720825497988998606098899889988998899860ff909216979516959094939192918590611a5d9061488a565b6004546001600160a01b0316331461161457600080fd5b600860205260009081526040902080546117b89061488a565b6004546001600160a01b03163314613cda57600080fd5b613ce381614062565b50565b6004546001600160a01b03163314613cfd57600080fd5b6001600160a01b03821660009081526005602052604090205460ff1615613d5a5760405162461bcd60e51b815260206004820152601160248201527012d650c8185b1c9958591e48195e1a5cdd607a1b604482015260640161127a565b6001600160a01b03821660009081526005602090815260408083208054600160ff1991821681179092556006845282852080549091169091179055600e90915290206114ad8282614921565b6004546001600160a01b03163314613dbd57600080fd5b6001600160a01b03811660009081526019602052604090205460ff16613df55760405162461bcd60e51b815260040161127a90614812565b6001600160a01b03811660009081526018602052604090205460ff16613e585760405162461bcd60e51b8152602060048201526018602482015277105d591a5d1bdc88185b1c9958591e48191a5cd8589b195960421b604482015260640161127a565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6004546001600160a01b03163314613e9057600080fd5b604051806040016040528060018152602001600160fd1b8152506013600083815260200190815260200160002090816120609190614921565b6001600160a01b038116600090815260236020526040812054606091906001600160401b03811115613efd57613efd614154565b604051908082528060200260200182016040528015613f26578160200160208202803683370190505b50905060005b6001600160a01b038416600090815260236020526040902054811015611f1c576001600160a01b0380851660009081526024602090815260408083208584529091529020548351911690839083908110613f8857613f88614bc8565b6001600160a01b039092166020928302919091019091015280613faa81614bde565b915050613f2c565b606060006016546001600160401b03811115613fd057613fd0614154565b604051908082528060200260200182016040528015613ff9578160200160208202803683370190505b50905060005b60165481101561225b5760008181526012602052604090205482516001600160a01b039091169083908390811061403857614038614bc8565b6001600160a01b03909216602092830291909101909101528061405a81614bde565b915050613fff565b6001600160a01b03811661407557600080fd5b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b60405180604001604052806002906020820280368337509192915050565b6040518060a001604052806005905b60608152602001906001900390816140fe5790505090565b80356001600160a01b038116811461412d57600080fd5b919050565b60006020828403121561414457600080fd5b61414d82614116565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561419257614192614154565b604052919050565b600082601f8301126141ab57600080fd5b81356001600160401b038111156141c4576141c4614154565b6141d7601f8201601f191660200161416a565b8181528460208386010111156141ec57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561421c57600080fd5b61422583614116565b915060208301356001600160401b0381111561424057600080fd5b61424c8582860161419a565b9150509250929050565b6000806040838503121561426957600080fd5b61427283614116565b946020939093013593505050565b60006020828403121561429257600080fd5b5035919050565b6000815180845260005b818110156142bf576020818501810151868301820152016142a3565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061414d6020830184614299565b87151581526001600160a01b038716602082015260e06040820181905260009061431e90830188614299565b82810360608401526143308188614299565b905082810360808401526143448187614299565b905082810360a08401526143588186614299565b905082810360c084015261436c8185614299565b9a9950505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156143bb5783516001600160a01b031683529284019291840191600101614396565b50909695505050505050565b60006001600160401b038211156143e0576143e0614154565b5060051b60200190565b600082601f8301126143fb57600080fd5b8135602061441061440b836143c7565b61416a565b82815260059290921b8401810191818101908684111561442f57600080fd5b8286015b848110156144515761444481614116565b8352918301918301614433565b509695505050505050565b60006020828403121561446e57600080fd5b81356001600160401b0381111561448457600080fd5b614490848285016143ea565b949350505050565b600080604083850312156144ab57600080fd5b6144b483614116565b91506144c260208401614116565b90509250929050565b60408101818360005b60028110156144f557815115158352602092830192909101906001016144d4565b50505092915050565b6000806040838503121561451157600080fd5b82356001600160401b038082111561452857600080fd5b614534868387016143ea565b935060209150818501358181111561454b57600080fd5b8501601f8101871361455c57600080fd5b803561456a61440b826143c7565b81815260059190911b8201840190848101908983111561458957600080fd5b8584015b838110156145c1578035868111156145a55760008081fd5b6145b38c898389010161419a565b84525091860191860161458d565b508096505050505050509250929050565b600080600080600060a086880312156145ea57600080fd5b6145f386614116565b945060208601356001600160401b038082111561460f57600080fd5b61461b89838a0161419a565b9550604088013591508082111561463157600080fd5b61463d89838a0161419a565b9450606088013591508082111561465357600080fd5b61465f89838a0161419a565b9350608088013591508082111561467557600080fd5b506146828882890161419a565b9150509295509295909350565b600080604083850312156146a257600080fd5b8235915060208301356001600160401b0381111561424057600080fd5b60008260a081018360005b60058110156146f95783830387526146e3838351614299565b60209788019790935091909101906001016146ca565b509095945050505050565b8615158152600060018060a01b03808816602084015260c0604084015261472e60c08401886146bf565b8615156060850152818616608085015283810360a085015261436c81866146bf565b60006020828403121561476257600080fd5b81356001600160401b0381111561477857600080fd5b6144908482850161419a565b60208082526010908201526f2727aa1025aca190383937bb34b232b960811b604082015260600190565b60208082526016908201527524b731b7b93932b1ba1025aca190383937bb34b232b960511b604082015260600190565b6020808252601a90820152791d1bdad95b881b9bdd0812d650c81d995c9a599a5959081e595d60321b604082015260600190565b60208082526016908201527561756469746f7220646f65736e6f742065786973742160501b604082015260600190565b6020808252600790820152664e4f54204b594360c81b604082015260600190565b6020808252600d908201526c496e636f7272656374204b594360981b604082015260600190565b600181811c9082168061489e57607f821691505b60208210810361225b57634e487b7160e01b600052602260045260246000fd5b601f8211156114ad57600081815260208120601f850160051c810160208610156148e55750805b601f850160051c820191505b81811015614904578281556001016148f1565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b0381111561493a5761493a614154565b61494e81614948845461488a565b846148be565b602080601f83116001811461497d576000841561496b5750858301515b614975858261490c565b865550614904565b600085815260208120601f198616915b828110156149ac5788860151825594840194600190910190840161498d565b50858210156149ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252601290820152712727aa1020bab234ba10383937bb34b232b960711b604082015260600190565b60208082526018908201527724b731b7b93932b1ba1020bab234ba10383937bb34b232b960411b604082015260600190565b6020808252601c908201527b1d1bdad95b881b9bdd08105d591a5d081d995c9a599a5959081e595d60221b604082015260600190565b6020808252600b908201526a2727aa1030bab234ba37b960a91b604082015260600190565b60208082526011908201527024b731b7b93932b1ba1020bab234ba37b960791b604082015260600190565b6020808252601c908201527b1d1bdad95b881b9bdd08185d591a5d081d995c9a599a5959081e595d60221b604082015260600190565b818103614aff575050565b614b09825461488a565b6001600160401b03811115614b2057614b20614154565b614b2e81614948845461488a565b6000601f821160018114614b5c5760008315614b4a5750848201545b614b54848261490c565b855550614bc1565b600085815260209020601f19841690600086815260209020845b83811015614b965782860154825560019586019590910190602001614b76565b5085831015614bb45781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201614bfe57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252601290820152714b594320646f65736e6f742065786973742160701b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215614c6757600080fd5b8151801515811461414d57600080fd5b6020808252601890820152771cd85b19481d1bdad95b881d1c985b9cd9995c8819985a5b60421b604082015260600190565b6020808252601e908201527f6d73672e76616c7565206d757374206265203e3d2064726f702066656573000060408201526060019056fea2646970667358221220946eb466d8470103f35781440daac1ebb6648bb11efc55729894639f67fea10664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106104805760003560e01c80630482074b14610485578063048838f0146104a75780630fa3f0f7146104c75780630fcd8c321461050c57806310855c571461052c57806311e409eb1461054c5780631645dfa31461056c5780632215b8a0146105c5578063227748a6146105e557806323d4d3051461061b5780632403c08e1461063f5780632594498014610654578063262d452b146106545780632abe2e94146106745780632e861ad4146106945780632f514359146106c4578063326aa6971461070557806332f7798714610732578063368f5bd51461075257806336cf7c87146107675780633902dae7146107875780633b37d1d6146107a75780633bcdf80c146107bc5780633f66398c146107ef57806343a6fc151461080f57806344df8e701461082f5780634628944614610850578063463a7974146108705780634728f3e914610890578063498cb4b5146108bd5780634a91353b146108d35780634a9f480e146108f357806350cee5fb146109135780635f607c2a1461093357806364041b64146109535780636459cad814610983578063678db83c1461099957806367f1c0f0146109c657806368d169cb146109e65780636b00ced614610a1c5780636b8734fe14610a3c5780636cda375b14610a515780636e499d1c14610a715780636f750cdd14610a91578063704501d014610ab1578063715018a614610ad1578063728cdb6314610ae657806373e0070114610b0657806373f56c8314610b265780637abf2a4e14610b465780638294cbd214610b7657806384f1202214610b9657806385c5d2de14610bb657806388e179c714610be65780638a64d65e14610c065780638cda4b0b14610c265780638da5cb5b14610c4657806395a4373214610c66578063a1bb675f14610c86578063a3c2b39114610ca6578063a55d2da514610cc6578063a64e4f8a14610cf6578063a71e7b4c14610d17578063a7db0c5614610d2d578063ac2d709314610d5a578063ac361e7414610d8a578063ae359ec714610daa578063aef4856714610de0578063af51f6d614610e00578063b376831914610e20578063b7f5db9c14610e33578063b9f1e8c114610e53578063bbc74f5514610e73578063bd3b104614610ea0578063bfe3f74514610ed0578063c241ae0814610f02578063c252ca6a14610f2a578063c34b8b9714610f3d578063c38ecd7114610f73578063c3ef6d0914610f93578063c761a80914610fb3578063c7a247a814610fe3578063ca3487fe14611003578063cb83413614611019578063cbd18f7114611039578063cbef0d0a14611059578063ce404b2314611079578063d01b32091461108e578063d407ecc1146110ae578063d43d665514610485578063d503022c146110ce578063d978d90f14610a1c578063e1004d3e146110f6578063e4bd43db14611116578063e5bd76ad14611136578063ec7463ab14611156578063efbae0f614611176578063f2fde38b14611196578063f42cec56146111b6578063f5d02784146111d6578063f9ab0672146111f6578063fb76a3ae14611216578063fdab601614611236575b600080fd5b34801561049157600080fd5b506104a56104a0366004614132565b61124b565b005b3480156104b357600080fd5b506104a56104c2366004614132565b611315565b3480156104d357600080fd5b506104f76104e2366004614132565b60196020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561051857600080fd5b506104a5610527366004614209565b6113eb565b34801561053857600080fd5b506104a5610547366004614209565b6114b2565b34801561055857600080fd5b506104a5610567366004614132565b611574565b34801561057857600080fd5b506105ad610587366004614256565b60116020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b039091168152602001610503565b3480156105d157600080fd5b506104a56105e0366004614132565b611638565b3480156105f157600080fd5b506105ad610600366004614280565b6012602052600090815260409020546001600160a01b031681565b34801561062757600080fd5b5061063160175481565b604051908152602001610503565b34801561064b57600080fd5b506104a56116d8565b34801561066057600080fd5b506104a561066f366004614256565b6116fe565b34801561068057600080fd5b506104a561068f366004614280565b611783565b3480156106a057600080fd5b506104f76106af366004614132565b60226020526000908152604090205460ff1681565b3480156106d057600080fd5b506105ad6106df366004614256565b60246020908152600092835260408084209091529082529020546001600160a01b031681565b34801561071157600080fd5b50610725610720366004614132565b61179f565b60405161050391906142df565b34801561073e57600080fd5b506104a561074d366004614132565b611839565b34801561075e57600080fd5b506104a56118fa565b34801561077357600080fd5b506002546105ad906001600160a01b031681565b34801561079357600080fd5b506104a56107a2366004614209565b611926565b3480156107b357600080fd5b506104a56119bf565b3480156107c857600080fd5b506107dc6107d7366004614132565b6119eb565b60405161050397969594939291906142f2565b3480156107fb57600080fd5b506104a561080a366004614209565b611d26565b34801561081b57600080fd5b5061072561082a366004614132565b611de8565b34801561083b57600080fd5b506002546104f790600160a01b900460ff1681565b34801561085c57600080fd5b5061072561086b366004614132565b611e01565b34801561087c57600080fd5b5061072561088b366004614132565b611e1a565b34801561089c57600080fd5b506108b06108ab366004614132565b611e33565b604051610503919061437a565b3480156108c957600080fd5b5061063160015481565b3480156108df57600080fd5b506104a56108ee366004614132565b611f23565b3480156108ff57600080fd5b506104a561090e366004614132565b611f3a565b34801561091f57600080fd5b506104a561092e36600461445c565b612009565b34801561093f57600080fd5b5061072561094e366004614132565b612064565b34801561095f57600080fd5b506104f761096e366004614132565b601c6020526000908152604090205460ff1681565b34801561098f57600080fd5b5061063160035481565b3480156109a557600080fd5b506109b96109b4366004614498565b61207d565b60405161050391906144cb565b3480156109d257600080fd5b506104a56109e1366004614132565b6120d0565b3480156109f257600080fd5b506105ad610a01366004614132565b601a602052600090815260409020546001600160a01b031681565b348015610a2857600080fd5b506104a5610a37366004614132565b61210b565b348015610a4857600080fd5b506108b06121ab565b348015610a5d57600080fd5b506104a5610a6c366004614280565b612261565b348015610a7d57600080fd5b50610725610a8c366004614132565b61227d565b348015610a9d57600080fd5b506104a5610aac3660046144fe565b612296565b348015610abd57600080fd5b506104a5610acc366004614209565b612307565b348015610add57600080fd5b506104a56123c9565b348015610af257600080fd5b506104a5610b013660046144fe565b61242a565b348015610b1257600080fd5b50610725610b21366004614132565b61249b565b348015610b3257600080fd5b506104a5610b41366004614209565b6124b4565b348015610b5257600080fd5b506104f7610b61366004614132565b600f6020526000908152604090205460ff1681565b348015610b8257600080fd5b506104a5610b91366004614132565b612576565b348015610ba257600080fd5b50610725610bb1366004614132565b61260b565b348015610bc257600080fd5b506104f7610bd1366004614132565b60066020526000908152604090205460ff1681565b348015610bf257600080fd5b50610725610c01366004614132565b612624565b348015610c1257600080fd5b506000546105ad906001600160a01b031681565b348015610c3257600080fd5b506104a5610c41366004614209565b61263d565b348015610c5257600080fd5b506004546105ad906001600160a01b031681565b348015610c7257600080fd5b506104a5610c81366004614209565b6126fe565b348015610c9257600080fd5b506104a5610ca1366004614256565b6127c2565b348015610cb257600080fd5b50610725610cc1366004614132565b6127d9565b348015610cd257600080fd5b506104f7610ce1366004614132565b60146020526000908152604090205460ff1681565b348015610d0257600080fd5b506002546104f790600160a81b900460ff1681565b348015610d2357600080fd5b5061063160265481565b348015610d3957600080fd5b50610631610d48366004614132565b60236020526000908152604090205481565b348015610d6657600080fd5b506104f7610d75366004614132565b60186020526000908152604090205460ff1681565b348015610d9657600080fd5b506104a5610da5366004614209565b6127f2565b348015610db657600080fd5b506105ad610dc5366004614280565b6025602052600090815260409020546001600160a01b031681565b348015610dec57600080fd5b506104a5610dfb366004614132565b612887565b348015610e0c57600080fd5b506104a5610e1b366004614132565b612922565b6104a5610e2e3660046145d2565b61295b565b348015610e3f57600080fd5b506104a5610e4e366004614209565b612cdd565b348015610e5f57600080fd5b506104a5610e6e36600461468f565b612d9f565b348015610e7f57600080fd5b50610631610e8e366004614132565b60106020526000908152604090205481565b348015610eac57600080fd5b506104f7610ebb366004614132565b60056020526000908152604090205460ff1681565b348015610edc57600080fd5b50610ef0610eeb366004614498565b612dce565b60405161050396959493929190614704565b348015610f0e57600080fd5b506105ad73f063fe1ab7a291c5d06a86e14730b00bf24cb58981565b6104a5610f383660046145d2565b613557565b348015610f4957600080fd5b506105ad610f58366004614132565b6007602052600090815260409020546001600160a01b031681565b348015610f7f57600080fd5b506104a5610f8e36600461445c565b6138ab565b348015610f9f57600080fd5b506104a5610fae366004614209565b613902565b348015610fbf57600080fd5b506104f7610fce366004614132565b60096020526000908152604090205460ff1681565b348015610fef57600080fd5b50610725610ffe366004614132565b6139c4565b34801561100f57600080fd5b5061063160165481565b34801561102557600080fd5b50610725611034366004614132565b6139dc565b34801561104557600080fd5b506104a5611054366004614132565b6139f5565b34801561106557600080fd5b506104a5611074366004614132565b613a95565b34801561108557600080fd5b506104a5613aac565b34801561109a57600080fd5b506107256110a9366004614280565b613ad2565b3480156110ba57600080fd5b506104a56110c9366004614209565b613aeb565b3480156110da57600080fd5b506105ad7304f73a09e2eb410205be256054794fb452f0d24581565b34801561110257600080fd5b506104a5611111366004614750565b613b02565b34801561112257600080fd5b506104a5611131366004614132565b613b4d565b34801561114257600080fd5b506107dc611151366004614132565b613c1f565b34801561116257600080fd5b506104a5611171366004614132565b613c93565b34801561118257600080fd5b50610725611191366004614132565b613caa565b3480156111a257600080fd5b506104a56111b1366004614132565b613cc3565b3480156111c257600080fd5b506104a56111d1366004614209565b613ce6565b3480156111e257600080fd5b506104a56111f1366004614132565b613da6565b34801561120257600080fd5b506104a5611211366004614280565b613e79565b34801561122257600080fd5b506108b0611231366004614132565b613ec9565b34801561124257600080fd5b506108b0613fb2565b3360009081526005602052604090205460ff166112835760405162461bcd60e51b815260040161127a90614784565b60405180910390fd5b6001600160a01b038181166000908152600760205260409020541633146112bc5760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0381166000908152600f602052604090205460ff166112f45760405162461bcd60e51b815260040161127a906147de565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6004546001600160a01b0316331461132c57600080fd5b6001600160a01b03811660009081526019602052604090205460ff166113645760405162461bcd60e51b815260040161127a90614812565b6001600160a01b03811660009081526018602052604090205460ff16156113c75760405162461bcd60e51b8152602060048201526017602482015276105d591a5d1bdc88185b1c9958591e48195b98589b1959604a1b604482015260640161127a565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b3360009081526005602052604090205460ff1661141a5760405162461bcd60e51b815260040161127a90614842565b6001600160a01b038281166000908152600760205260409020541633146114535760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff1661148b5760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600c602052604090206114ad8282614921565b505050565b3360009081526005602052604090205460ff166114e15760405162461bcd60e51b815260040161127a90614784565b6001600160a01b0382811660009081526007602052604090205416331461151a5760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0382166000908152600f602052604090205460ff166115525760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600a602052604090206114ad8282614921565b3360009081526018602052604090205460ff166115a35760405162461bcd60e51b815260040161127a906149da565b6001600160a01b038181166000908152601a60205260409020541633146115dc5760405162461bcd60e51b815260040161127a90614a06565b6001600160a01b03811660009081526022602052604090205460ff166116145760405162461bcd60e51b815260040161127a90614a38565b6001600160a01b03166000908152601c60205260409020805460ff19166001179055565b3360009081526018602052604090205460ff166116675760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038181166000908152601a60205260409020541633146116a05760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03811660009081526022602052604090205460ff166116145760405162461bcd60e51b815260040161127a90614abe565b6004546001600160a01b031633146116ef57600080fd5b6002805460ff60a01b19169055565b3360009081526014602052604090205460ff166117535760405162461bcd60e51b81526020600482015260136024820152726e6f206261646765206164642061636365737360681b604482015260640161127a565b60008181526013602090815260408083206001600160a01b03861684526015909252909120906114ad9082614af4565b6004546001600160a01b0316331461179a57600080fd5b600155565b600e60205260009081526040902080546117b89061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e49061488a565b80156118315780601f1061180657610100808354040283529160200191611831565b820191906000526020600020905b81548152906001019060200180831161181457829003601f168201915b505050505081565b3360009081526018602052604090205460ff166118685760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038181166000908152601a60205260409020541633146118a15760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03811660009081526022602052604090205460ff166118d95760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b03166000908152601c60205260409020805460ff19169055565b6004546001600160a01b0316331461191157600080fd5b6002805460ff60a81b1916600160a81b179055565b6004546001600160a01b0316331461193d57600080fd5b6001600160a01b03821660009081526019602052604090205460ff1661199d5760405162461bcd60e51b8152602060048201526015602482015274185d591a5d1bdc88191bd95cdb89dd08195e1a5cdd605a1b604482015260640161127a565b6001600160a01b03821660009081526021602052604090206114ad8282614921565b6004546001600160a01b031633146119d657600080fd5b6002805460ff60a01b1916600160a01b179055565b6001600160a01b038082166000908152601c6020908152604080832054601a835281842054601b8452828520601d8552838620601e8652848720601f8752858820968052948720825497988998606098899889988998899860ff909216979516959094939192918590611a5d9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a899061488a565b8015611ad65780601f10611aab57610100808354040283529160200191611ad6565b820191906000526020600020905b815481529060010190602001808311611ab957829003601f168201915b50505050509450838054611ae99061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b159061488a565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b50505050509350828054611b759061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba19061488a565b8015611bee5780601f10611bc357610100808354040283529160200191611bee565b820191906000526020600020905b815481529060010190602001808311611bd157829003601f168201915b50505050509250818054611c019061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2d9061488a565b8015611c7a5780601f10611c4f57610100808354040283529160200191611c7a565b820191906000526020600020905b815481529060010190602001808311611c5d57829003601f168201915b50505050509150808054611c8d9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb99061488a565b8015611d065780601f10611cdb57610100808354040283529160200191611d06565b820191906000526020600020905b815481529060010190602001808311611ce957829003601f168201915b505050505090509650965096509650965096509650919395979092949650565b3360009081526018602052604090205460ff16611d555760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a6020526040902054163314611d8e5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff16611dc65760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601d602052604090206114ad8282614921565b601f60205260009081526040902080546117b89061488a565b600c60205260009081526040902080546117b89061488a565b600a60205260009081526040902080546117b89061488a565b6001600160a01b038116600090815260106020526040812054606091906001600160401b03811115611e6757611e67614154565b604051908082528060200260200182016040528015611e90578160200160208202803683370190505b50905060005b6001600160a01b038416600090815260106020526040902054811015611f1c576001600160a01b0380851660009081526011602090815260408083208584529091529020548351911690839083908110611ef257611ef2614bc8565b6001600160a01b039092166020928302919091019091015280611f1481614bde565b915050611e96565b5092915050565b6004546001600160a01b031633146112f457600080fd5b6004546001600160a01b03163314611f5157600080fd5b6001600160a01b03811660009081526006602052604090205460ff16611f895760405162461bcd60e51b815260040161127a90614c05565b6001600160a01b03811660009081526005602052604090205460ff16611fe85760405162461bcd60e51b815260206004820152601460248201527312d650c8185b1c9958591e48191a5cd8589b195960621b604482015260640161127a565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6004546001600160a01b0316331461202057600080fd5b60005b81518110156120605761204e82828151811061204157612041614bc8565b6020026020010151613dbd565b8061205881614bde565b915050612023565b5050565b601b60205260009081526040902080546117b89061488a565b6120856140d1565b506040805180820182526001600160a01b038085166000908152601c60209081528482205460ff90811615158552928616825260098152939020541615159181019190915292915050565b6004546001600160a01b031633146120e757600080fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b3360009081526005602052604090205460ff1661213a5760405162461bcd60e51b815260040161127a90614784565b6001600160a01b038181166000908152600760205260409020541633146121735760405162461bcd60e51b815260040161127a906147ae565b6001600160a01b0381166000908152600f602052604090205460ff166120e75760405162461bcd60e51b815260040161127a906147de565b606060006026546001600160401b038111156121c9576121c9614154565b6040519080825280602002602001820160405280156121f2578160200160208202803683370190505b50905060005b60265481101561225b5760008181526025602052604090205482516001600160a01b039091169083908390811061223157612231614bc8565b6001600160a01b03909216602092830291909101909101528061225381614bde565b9150506121f8565b50919050565b6004546001600160a01b0316331461227857600080fd5b600355565b601e60205260009081526040902080546117b89061488a565b6004546001600160a01b031633146122ad57600080fd5b60005b82518110156114ad576122f58382815181106122ce576122ce614bc8565b60200260200101518383815181106122e8576122e8614bc8565b6020026020010151612715565b806122ff81614bde565b9150506122b0565b3360009081526005602052604090205460ff166123365760405162461bcd60e51b815260040161127a90614842565b6001600160a01b0382811660009081526007602052604090205416331461236f5760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff166123a75760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600d602052604090206114ad8282614921565b6004546001600160a01b031633146123e057600080fd5b6004546040516001600160a01b03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a2600480546001600160a01b0319169055565b6004546001600160a01b0316331461244157600080fd5b60005b82518110156114ad5761248983828151811061246257612462614bc8565b602002602001015183838151811061247c5761247c614bc8565b6020026020010151613cfd565b8061249381614bde565b915050612444565b601d60205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff166124e35760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a602052604090205416331461251c5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166125545760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601f602052604090206114ad8282614921565b6004546001600160a01b0316331461258d57600080fd5b6001600160a01b03811660009081526014602052604090205460ff166125ea5760405162461bcd60e51b81526020600482015260126024820152711b9bdd081a5b881858d8d95cdcc81b1a5cdd60721b604482015260640161127a565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600d60205260009081526040902080546117b89061488a565b601560205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff1661266c5760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a60205260409020541633146126a55760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166126dd5760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b038216600090815260208052604090206114ad8282614921565b6004546001600160a01b0316331461271557600080fd5b6001600160a01b03821660009081526018602052604090205460ff16156127765760405162461bcd60e51b8152602060048201526015602482015274185d591a5d1bdc88185b1c9958591e48195e1a5cdd605a1b604482015260640161127a565b6001600160a01b03821660009081526018602090815260408083208054600160ff1991821681179092556019845282852080549091169091179055602190915290206114ad8282614921565b6004546001600160a01b031633146116fe57600080fd5b602160205260009081526040902080546117b89061488a565b6004546001600160a01b0316331461280957600080fd5b6001600160a01b03821660009081526006602052604090205460ff166128655760405162461bcd60e51b815260206004820152601160248201527012d650c8191bd95cdb89dd08195e1a5cdd607a1b604482015260640161127a565b6001600160a01b0382166000908152600e602052604090206114ad8282614921565b6004546001600160a01b0316331461289e57600080fd5b6001600160a01b03811660009081526014602052604090205460ff16156128fe5760405162461bcd60e51b8152602060048201526014602482015273616c72656164792061646465642061636365737360601b604482015260640161127a565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6004546001600160a01b0316331461293957600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526005602052604090205460ff166129b15760405162461bcd60e51b815260206004820152601460248201527327279025aca19020baba3437b934bd30ba34b7b760611b604482015260640161127a565b6001600160a01b0385166000908152600f602052604090205460ff1615612a0e5760405162461bcd60e51b8152602060048201526011602482015270616c72656164792076657269666965642160781b604482015260640161127a565b600254600160a81b900460ff1615612b3d57600254600160a01b900460ff1615612ade576002546001546040516323b872dd60e01b81527304f73a09e2eb410205be256054794fb452f0d245926323b872dd92612a7a9233926001600160a01b03169190600401614c31565b6020604051808303816000875af1158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190614c55565b612ad95760405162461bcd60e51b815260040161127a90614c77565b612b3d565b600354341015612b005760405162461bcd60e51b815260040161127a90614ca9565b600080546003546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015612b3b573d6000803e3d6000fd5b505b6001600160a01b0385166000908152600960209081526040808320805460ff19166001179055600a9091529020612b748482614921565b506001600160a01b0385166000908152600b60205260409020612b978382614921565b506001600160a01b0385166000908152600c60205260409020612bba8282614921565b506001600160a01b0385166000908152600d60205260409020612bdd8582614921565b506001600160a01b038516600081815260076020908152604080832080546001600160a01b031916339081179091558352600e82528083209383526008909152902090612c2a9082614af4565b506001600160a01b0385166000818152600f60209081526040808320805460ff191660011790556016805484526012909252822080546001600160a01b03191690931790925581549190612c7d83614bde565b909155505033600081815260116020908152604080832060108084528285208054865291845291842080546001600160a01b0319166001600160a01b038c16179055938352905281549190612cd183614bde565b91905055505050505050565b3360009081526005602052604090205460ff16612d0c5760405162461bcd60e51b815260040161127a90614842565b6001600160a01b03828116600090815260076020526040902054163314612d455760405162461bcd60e51b815260040161127a90614863565b6001600160a01b0382166000908152600f602052604090205460ff16612d7d5760405162461bcd60e51b815260040161127a906147de565b6001600160a01b0382166000908152600b602052604090206114ad8282614921565b6004546001600160a01b03163314612db657600080fd5b60008281526013602052604090206114ad8282614921565b600080612dd96140ef565b600080612de46140ef565b612dec6140ef565b612df46140ef565b6040805160a0810182526001600160a01b038c1660009081526008602052919091208054829190612e249061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612e509061488a565b8015612e9d5780601f10612e7257610100808354040283529160200191612e9d565b820191906000526020600020905b815481529060010190602001808311612e8057829003601f168201915b50505050508152602001600a60008d6001600160a01b03166001600160a01b031681526020019081526020016000208054612ed79061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612f039061488a565b8015612f505780601f10612f2557610100808354040283529160200191612f50565b820191906000526020600020905b815481529060010190602001808311612f3357829003601f168201915b50505050508152602001600b60008d6001600160a01b03166001600160a01b031681526020019081526020016000208054612f8a9061488a565b80601f0160208091040260200160405190810160405280929190818152602001828054612fb69061488a565b80156130035780601f10612fd857610100808354040283529160200191613003565b820191906000526020600020905b815481529060010190602001808311612fe657829003601f168201915b50505050508152602001600c60008d6001600160a01b03166001600160a01b03168152602001908152602001600020805461303d9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546130699061488a565b80156130b65780601f1061308b576101008083540402835291602001916130b6565b820191906000526020600020905b81548152906001019060200180831161309957829003601f168201915b50505050508152602001600d60008d6001600160a01b03166001600160a01b0316815260200190815260200160002080546130f09061488a565b80601f016020809104026020016040519081016040528092919081815260200182805461311c9061488a565b80156131695780601f1061313e57610100808354040283529160200191613169565b820191906000526020600020905b81548152906001019060200180831161314c57829003601f168201915b505050505081525091506040518060a00160405280601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546131ae9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546131da9061488a565b80156132275780601f106131fc57610100808354040283529160200191613227565b820191906000526020600020905b81548152906001019060200180831161320a57829003601f168201915b50505050508152602001601d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546132619061488a565b80601f016020809104026020016040519081016040528092919081815260200182805461328d9061488a565b80156132da5780601f106132af576101008083540402835291602001916132da565b820191906000526020600020905b8154815290600101906020018083116132bd57829003601f168201915b50505050508152602001601e60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546133149061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546133409061488a565b801561338d5780601f106133625761010080835404028352916020019161338d565b820191906000526020600020905b81548152906001019060200180831161337057829003601f168201915b50505050508152602001601f60008c6001600160a01b03166001600160a01b0316815260200190815260200160002080546133c79061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546133f39061488a565b80156134405780601f1061341557610100808354040283529160200191613440565b820191906000526020600020905b81548152906001019060200180831161342357829003601f168201915b50505050508152602001602060008c6001600160a01b03166001600160a01b03168152602001908152602001600020805461347a9061488a565b80601f01602080910402602001604051908101604052809291908181526020018280546134a69061488a565b80156134f35780601f106134c8576101008083540402835291602001916134f3565b820191906000526020600020905b8154815290600101906020018083116134d657829003601f168201915b5050509190925250506001600160a01b039a8b1660009081526009602090815260408083205460078352818420549d8f168452601c835281842054601a90935292205460ff9283169e9c8e169d959c929091169a5090931697509550909350505050565b3360009081526018602052604090205460ff166135865760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b03851660009081526022602052604090205460ff16156135e95760405162461bcd60e51b8152602060048201526017602482015276616c72656164792061756469742076657269666965642160481b604482015260640161127a565b600254600160a81b900460ff161561371857600254600160a01b900460ff16156136b9576002546001546040516323b872dd60e01b81527304f73a09e2eb410205be256054794fb452f0d245926323b872dd926136559233926001600160a01b03169190600401614c31565b6020604051808303816000875af1158015613674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136989190614c55565b6136b45760405162461bcd60e51b815260040161127a90614c77565b613718565b6003543410156136db5760405162461bcd60e51b815260040161127a90614ca9565b600080546003546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015613716573d6000803e3d6000fd5b505b6001600160a01b0385166000908152601c60209081526040808320805460ff19166001179055601d909152902061374f8482614921565b506001600160a01b0385166000908152601e602052604090206137728382614921565b506001600160a01b0385166000908152601f602052604090206137958282614921565b506001600160a01b038516600090815260208052604090206137b78582614921565b506001600160a01b0385166000818152601a6020908152604080832080546001600160a01b03191633908117909155835260218252808320938352601b9091529020906138049082614af4565b506001600160a01b0385166000818152602260209081526040808320805460ff191660011790556026805484526025909252822080546001600160a01b0319169093179092558154919061385783614bde565b909155505033600081815260246020908152604080832060238084528285208054865291845291842080546001600160a01b0319166001600160a01b038c16179055938352905281549190612cd183614bde565b6004546001600160a01b031633146138c257600080fd5b60005b8151811015612060576138f08282815181106138e3576138e3614bc8565b6020026020010151611f51565b806138fa81614bde565b9150506138c5565b3360009081526018602052604090205460ff166139315760405162461bcd60e51b815260040161127a90614a6e565b6001600160a01b038281166000908152601a602052604090205416331461396a5760405162461bcd60e51b815260040161127a90614a93565b6001600160a01b03821660009081526022602052604090205460ff166139a25760405162461bcd60e51b815260040161127a90614abe565b6001600160a01b0382166000908152601e602052604090206114ad8282614921565b6020805260009081526040902080546117b89061488a565b600b60205260009081526040902080546117b89061488a565b3360009081526018602052604090205460ff16613a245760405162461bcd60e51b815260040161127a906149da565b6001600160a01b038181166000908152601a6020526040902054163314613a5d5760405162461bcd60e51b815260040161127a90614a06565b6001600160a01b03811660009081526022602052604090205460ff166118d95760405162461bcd60e51b815260040161127a90614a38565b6004546001600160a01b031633146118d957600080fd5b6004546001600160a01b03163314613ac357600080fd5b6002805460ff60a81b19169055565b601360205260009081526040902080546117b89061488a565b6004546001600160a01b0316331461199d57600080fd5b6004546001600160a01b03163314613b1957600080fd5b6017546000908152601360205260409020613b348282614921565b5060178054906000613b4583614bde565b919050555050565b6004546001600160a01b03163314613b6457600080fd5b6001600160a01b03811660009081526006602052604090205460ff16613b9c5760405162461bcd60e51b815260040161127a90614c05565b6001600160a01b03811660009081526005602052604090205460ff1615613bfb5760405162461bcd60e51b815260206004820152601360248201527212d650c8185b1c9958591e48195b98589b1959606a1b604482015260640161127a565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6001600160a01b03808216600090815260096020908152604080832054600783528184205460088452828520600a8552838620600b8652848720600c8752858820600d909752948720825497988998606098899889988998899860ff909216979516959094939192918590611a5d9061488a565b6004546001600160a01b0316331461161457600080fd5b600860205260009081526040902080546117b89061488a565b6004546001600160a01b03163314613cda57600080fd5b613ce381614062565b50565b6004546001600160a01b03163314613cfd57600080fd5b6001600160a01b03821660009081526005602052604090205460ff1615613d5a5760405162461bcd60e51b815260206004820152601160248201527012d650c8185b1c9958591e48195e1a5cdd607a1b604482015260640161127a565b6001600160a01b03821660009081526005602090815260408083208054600160ff1991821681179092556006845282852080549091169091179055600e90915290206114ad8282614921565b6004546001600160a01b03163314613dbd57600080fd5b6001600160a01b03811660009081526019602052604090205460ff16613df55760405162461bcd60e51b815260040161127a90614812565b6001600160a01b03811660009081526018602052604090205460ff16613e585760405162461bcd60e51b8152602060048201526018602482015277105d591a5d1bdc88185b1c9958591e48191a5cd8589b195960421b604482015260640161127a565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6004546001600160a01b03163314613e9057600080fd5b604051806040016040528060018152602001600160fd1b8152506013600083815260200190815260200160002090816120609190614921565b6001600160a01b038116600090815260236020526040812054606091906001600160401b03811115613efd57613efd614154565b604051908082528060200260200182016040528015613f26578160200160208202803683370190505b50905060005b6001600160a01b038416600090815260236020526040902054811015611f1c576001600160a01b0380851660009081526024602090815260408083208584529091529020548351911690839083908110613f8857613f88614bc8565b6001600160a01b039092166020928302919091019091015280613faa81614bde565b915050613f2c565b606060006016546001600160401b03811115613fd057613fd0614154565b604051908082528060200260200182016040528015613ff9578160200160208202803683370190505b50905060005b60165481101561225b5760008181526012602052604090205482516001600160a01b039091169083908390811061403857614038614bc8565b6001600160a01b03909216602092830291909101909101528061405a81614bde565b915050613fff565b6001600160a01b03811661407557600080fd5b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b60405180604001604052806002906020820280368337509192915050565b6040518060a001604052806005905b60608152602001906001900390816140fe5790505090565b80356001600160a01b038116811461412d57600080fd5b919050565b60006020828403121561414457600080fd5b61414d82614116565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561419257614192614154565b604052919050565b600082601f8301126141ab57600080fd5b81356001600160401b038111156141c4576141c4614154565b6141d7601f8201601f191660200161416a565b8181528460208386010111156141ec57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561421c57600080fd5b61422583614116565b915060208301356001600160401b0381111561424057600080fd5b61424c8582860161419a565b9150509250929050565b6000806040838503121561426957600080fd5b61427283614116565b946020939093013593505050565b60006020828403121561429257600080fd5b5035919050565b6000815180845260005b818110156142bf576020818501810151868301820152016142a3565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061414d6020830184614299565b87151581526001600160a01b038716602082015260e06040820181905260009061431e90830188614299565b82810360608401526143308188614299565b905082810360808401526143448187614299565b905082810360a08401526143588186614299565b905082810360c084015261436c8185614299565b9a9950505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156143bb5783516001600160a01b031683529284019291840191600101614396565b50909695505050505050565b60006001600160401b038211156143e0576143e0614154565b5060051b60200190565b600082601f8301126143fb57600080fd5b8135602061441061440b836143c7565b61416a565b82815260059290921b8401810191818101908684111561442f57600080fd5b8286015b848110156144515761444481614116565b8352918301918301614433565b509695505050505050565b60006020828403121561446e57600080fd5b81356001600160401b0381111561448457600080fd5b614490848285016143ea565b949350505050565b600080604083850312156144ab57600080fd5b6144b483614116565b91506144c260208401614116565b90509250929050565b60408101818360005b60028110156144f557815115158352602092830192909101906001016144d4565b50505092915050565b6000806040838503121561451157600080fd5b82356001600160401b038082111561452857600080fd5b614534868387016143ea565b935060209150818501358181111561454b57600080fd5b8501601f8101871361455c57600080fd5b803561456a61440b826143c7565b81815260059190911b8201840190848101908983111561458957600080fd5b8584015b838110156145c1578035868111156145a55760008081fd5b6145b38c898389010161419a565b84525091860191860161458d565b508096505050505050509250929050565b600080600080600060a086880312156145ea57600080fd5b6145f386614116565b945060208601356001600160401b038082111561460f57600080fd5b61461b89838a0161419a565b9550604088013591508082111561463157600080fd5b61463d89838a0161419a565b9450606088013591508082111561465357600080fd5b61465f89838a0161419a565b9350608088013591508082111561467557600080fd5b506146828882890161419a565b9150509295509295909350565b600080604083850312156146a257600080fd5b8235915060208301356001600160401b0381111561424057600080fd5b60008260a081018360005b60058110156146f95783830387526146e3838351614299565b60209788019790935091909101906001016146ca565b509095945050505050565b8615158152600060018060a01b03808816602084015260c0604084015261472e60c08401886146bf565b8615156060850152818616608085015283810360a085015261436c81866146bf565b60006020828403121561476257600080fd5b81356001600160401b0381111561477857600080fd5b6144908482850161419a565b60208082526010908201526f2727aa1025aca190383937bb34b232b960811b604082015260600190565b60208082526016908201527524b731b7b93932b1ba1025aca190383937bb34b232b960511b604082015260600190565b6020808252601a90820152791d1bdad95b881b9bdd0812d650c81d995c9a599a5959081e595d60321b604082015260600190565b60208082526016908201527561756469746f7220646f65736e6f742065786973742160501b604082015260600190565b6020808252600790820152664e4f54204b594360c81b604082015260600190565b6020808252600d908201526c496e636f7272656374204b594360981b604082015260600190565b600181811c9082168061489e57607f821691505b60208210810361225b57634e487b7160e01b600052602260045260246000fd5b601f8211156114ad57600081815260208120601f850160051c810160208610156148e55750805b601f850160051c820191505b81811015614904578281556001016148f1565b505050505050565b600019600383901b1c191660019190911b1790565b81516001600160401b0381111561493a5761493a614154565b61494e81614948845461488a565b846148be565b602080601f83116001811461497d576000841561496b5750858301515b614975858261490c565b865550614904565b600085815260208120601f198616915b828110156149ac5788860151825594840194600190910190840161498d565b50858210156149ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252601290820152712727aa1020bab234ba10383937bb34b232b960711b604082015260600190565b60208082526018908201527724b731b7b93932b1ba1020bab234ba10383937bb34b232b960411b604082015260600190565b6020808252601c908201527b1d1bdad95b881b9bdd08105d591a5d081d995c9a599a5959081e595d60221b604082015260600190565b6020808252600b908201526a2727aa1030bab234ba37b960a91b604082015260600190565b60208082526011908201527024b731b7b93932b1ba1020bab234ba37b960791b604082015260600190565b6020808252601c908201527b1d1bdad95b881b9bdd08185d591a5d081d995c9a599a5959081e595d60221b604082015260600190565b818103614aff575050565b614b09825461488a565b6001600160401b03811115614b2057614b20614154565b614b2e81614948845461488a565b6000601f821160018114614b5c5760008315614b4a5750848201545b614b54848261490c565b855550614bc1565b600085815260209020601f19841690600086815260209020845b83811015614b965782860154825560019586019590910190602001614b76565b5085831015614bb45781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201614bfe57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252601290820152714b594320646f65736e6f742065786973742160701b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215614c6757600080fd5b8151801515811461414d57600080fd5b6020808252601890820152771cd85b19481d1bdad95b881d1c985b9cd9995c8819985a5b60421b604082015260600190565b6020808252601e908201527f6d73672e76616c7565206d757374206265203e3d2064726f702066656573000060408201526060019056fea2646970667358221220946eb466d8470103f35781440daac1ebb6648bb11efc55729894639f67fea10664736f6c63430008110033

Block Transaction 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
[ 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.