Contract 0x4edb3e357931c84c718d201842e62fb3270be2c1 1

Contract Overview

Balance:
0 AVAX
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9a31ad8106a42e942a8bae3fd84156f8741b99504a970ecf79d25a66c84c2a52Add Whitelisted ...141074782022-09-29 12:16:158 hrs 5 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0083186460
0x287cd1b1c979efd31929b547fa5a62461c2efc1fc10c719c8779623fdb7f817eAdd Property Own...141068752022-09-29 11:55:428 hrs 25 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0018798930
0xc849255f1b6773f9ebbd2b089e02609e7aa8803e905dfc5c29e7f75b9fd38723Add Whitelisted ...141038062022-09-29 10:04:1210 hrs 17 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0083186460
0x62dbd6981e3e8eabe9f2995a03646567abe6197b94573769b7fa71da9cdd79a9Add Admin141030162022-09-29 9:29:3110 hrs 51 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0xd5860b28c7b825c332a6545f237b7a1869a3944be34f3ed284a4a4e664f44c7dAdd Admin141027612022-09-29 9:18:0111 hrs 3 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0x323a718633b3935c56ddd1d8c7e834ab114224f248b063e4c46df36a5958ec11Add Whitelisted ...141027082022-09-29 9:15:5411 hrs 5 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0083186460
0x490e71e05fe9c295f7144e3c206e9e33ecb15b124e77770115a2c0dab715e8fbAdd Admin141025482022-09-29 9:07:5011 hrs 13 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0x8c14f3bbdf451a48d8db396255b7cba985d63e406111e0d3d04e7f1cfec5a76eAdd Admin141022902022-09-29 8:57:0411 hrs 24 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0xdfa9809a27ac1fb9ce1a20e3d740b02bfb2ecb25b36dc942595bcfd3a2027265Add Whitelisted ...141022522022-09-29 8:55:0011 hrs 26 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0083186460
0x637bda792b0b7ec93a4c1c48d2f63e27b7c93b39c39e52ad12a69b15d376273dUpdate Accredati...141004842022-09-29 7:36:5612 hrs 44 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017706330
0x9f7488c88f236ebe7ff92e1eb72cfb8b2a7aacff066eff6ee562661d7497a95fUpdate Kyc White...141004812022-09-29 7:36:5012 hrs 44 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0012615330
0xbc946e6f0b17d5b01a26a4b0898ec4d064037507fd55de59f55aa30c12953910Add Whitelisted ...141003392022-09-29 7:31:5612 hrs 49 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0083186460
0x26310fc2ba59d4d5feb869c5e8a47b140a7c4b8433a81b5b427f00e2632b7919Add Admin140999202022-09-29 7:17:5713 hrs 3 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0xf4046b227dc5658dfa781eda0078cf785daaeb3b1aa2c2d3599ed4ad0ce60bf1Add Admin140994862022-09-29 7:02:5013 hrs 18 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0x1ee7083c2f4b5c8ad9d4edc3662da6c3f203d4af18d8a1e160f2904167c7b8b2Add Admin140994842022-09-29 7:02:4613 hrs 18 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017077530
0x312d5c46dd60717c6e47afafe1ec6f5ffd734f9ce2e3946b848e84fb649fd855Add Whitelisted ...140994822022-09-29 7:02:4213 hrs 18 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.004759230
0x8b0ffaf127b728f38b7fea7eb59b6b77fedbbff5cb4475c721090efe994300c2Add Whitelisted ...140994802022-09-29 7:02:3813 hrs 18 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.004759230
0xe50ef77e4bc1a3474a15e3749e1f9b3dc6ec67bcebe63ae3387749a35ccfddafAdd Property Own...140988562022-09-29 6:40:5813 hrs 40 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0018798930
0x5bbf941bf8ff6f92ed7fe0b2881771bc4de8adf861e09cbd629f207d0b3ac611Add Property Own...140982362022-09-29 6:19:1814 hrs 2 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0018798930
0x6248a5803d55cb0a96799597990db23a57b261cdb0657c4f9ea1a612ff25db35Add Property Own...140977992022-09-29 6:03:2714 hrs 17 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0018798930
0x7cc29b8f2740956b719946c6dafed4226deea8f04fcf798c203b7abcb5de5c22Add Admin140975562022-09-29 5:54:4014 hrs 26 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0x2b5c22d37bbff3edb87e6265a5b84f48bb221d74b41111b87f6d787efeee8e3cAdd Admin140975542022-09-29 5:54:3614 hrs 26 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0017081130
0x40cd7e160581c6bbfbf8276fec56d980112d8f20a7e8f34ea8604d266f667600Add Whitelisted ...140975532022-09-29 5:54:3414 hrs 26 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.004759230
0x51bb14c2c5febd5a81515b0ed91cb618d935a4589502622b72aed2a11fe44eb6Add Whitelisted ...140975512022-09-29 5:54:3014 hrs 26 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.004759230
0xd4c4b30216eb722979b6a023f6e950e458abb26297d90d832f8c258552187fb6Add Property Own...140971832022-09-29 5:41:3614 hrs 39 mins ago0x6a393b6e432c068664bc5c2341309d1feff244d1 IN 0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX0.0018798930
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc9858011370d9ac9f078276f841f9a65715524c9d2410b6aa8f37058441e1600141033452022-09-29 9:46:1110 hrs 35 mins ago 0xe8d292e61e853661a261e895c5ae1d26a30077550x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xfb24d0201b04d6551ca96f3a4a4a18f030334202291b7e5de5a22827ee7900e9141032562022-09-29 9:42:3610 hrs 38 mins ago 0xe8d292e61e853661a261e895c5ae1d26a30077550x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x0134f171ae6646423b34217f2e469390515216d90c213fecf80aa27d07d043f6141030312022-09-29 9:30:0410 hrs 51 mins ago 0x975ad00f690ce4e18e74449c2aca9f61c24e6b590x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x3f553d35da41c1facdede10d4aa61fd81d5c25850x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x3f553d35da41c1facdede10d4aa61fd81d5c25850x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x19b8b99296f1a2ee259cf8d2357ddd165bc7fdfc0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x19b8b99296f1a2ee259cf8d2357ddd165bc7fdfc0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x19b8b99296f1a2ee259cf8d2357ddd165bc7fdfc0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x74fa3b8740dc9f2df65ba69927c777fb48edd37d0x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x3f553d35da41c1facdede10d4aa61fd81d5c25850x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0x079d56e69854672137963146b13b2b16432b64b5433611a7bcb99455ba01e70b141029272022-09-29 9:25:0010 hrs 56 mins ago 0x3f553d35da41c1facdede10d4aa61fd81d5c25850x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
0xb0b4382a972f88211ccaed2f68fc5b9a19a4f4aa8f5503074d3b47cb971e70a1141027742022-09-29 9:18:3011 hrs 2 mins ago 0xef769d9d577c6889c671b4ac3f22f3e8000df2660x4edb3e357931c84c718d201842e62fb3270be2c10 AVAX
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xd808a2976Bf7cebA1b0C604A43874ff829984671

Contract Name:
TokenismWhitelist

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : TokenismWhitelist.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;



import "@openzeppelin/contracts/utils/Context.sol";
import "./TokenismAdminWhitelist.sol";

contract TokenismWhitelist is Context, TokenismAdminWhitelist {
    
    using Roles for Roles.Role;
    Roles.Role private _userWhitelisteds;
    mapping(string => bool) symbolsDef;

    struct whitelistInfo {
        bool valid;
        address wallet;
        bool kycVerified;
        bool accredationVerified;
        uint256 accredationExpiry;
        uint256 taxWithholding;
        string userType;
        bool suspend;
    }
    mapping(address => whitelistInfo) public whitelistUsers;
    address[] public userList;

    // userTypes = Basic || Premium
    function addWhitelistedUser(
        address _wallet,
        bool _kycVerified,
        bool _accredationVerified,
        uint256 _accredationExpiry
    ) public onlyManager {
        if (_accredationVerified)
            require(
                _accredationExpiry >= block.timestamp,
                "accredationExpiry: Accredation Expiry time is before current time"
            );

        _userWhitelisteds.add(_wallet);
        whitelistInfo storage newUser = whitelistUsers[_wallet];

        newUser.valid = true;
        newUser.suspend = false;
        newUser.taxWithholding = 0;

        newUser.wallet = _wallet;
        newUser.kycVerified = _kycVerified;
        newUser.accredationExpiry = _accredationExpiry;
        newUser.accredationVerified = _accredationVerified;
        newUser.userType = "Basic";
        // maintain whitelist user list
        userList.push(_wallet);
    }

    function getWhitelistedUser(address _wallet)
        public
        view
        returns (
            address,
            bool,
            bool,
            uint256,
            uint256
        )
    {
        whitelistInfo memory u = whitelistUsers[_wallet];
        return (
            u.wallet,
            u.kycVerified,
            u.accredationExpiry >= block.timestamp,
            u.accredationExpiry,
            u.taxWithholding
        );
    }

    function updateKycWhitelistedUser(address _wallet, bool _kycVerified)
        public
        onlyManager
    {
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.kycVerified = _kycVerified;
    }

    function updateAccredationWhitelistedUser(
        address _wallet,
        uint256 _accredationExpiry
    ) public onlyManager {
        require(
            _accredationExpiry >= block.timestamp,
            "accredationExpiry: Accredation Expiry time is before current time"
        );

        whitelistInfo storage u = whitelistUsers[_wallet];
        u.accredationExpiry = _accredationExpiry;
    }

    function updateTaxWhitelistedUser(address _wallet, uint256 _taxWithholding)
        public
        onlyManager
    {
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.taxWithholding = _taxWithholding;
    }

    function suspendUser(address _wallet) public onlyManager {
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.suspend = true;
    }

    function activeUser(address _wallet) public onlyManager {
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.suspend = false;
    }

    function updateUserType(address _wallet, string memory _userType)
        public
        onlyManager
    {
        require(
            StringUtils.equal(_userType, "Basic") ||
                StringUtils.equal(_userType, "Premium"),
            "Please Enter Valid User Type"
        );
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.userType = _userType;
    }

    // Check user status
    function isWhitelistedUser(address wallet) public view returns (uint256) {
        whitelistInfo storage u = whitelistUsers[wallet];
        whitelistInfoManager memory m = whitelistManagers[wallet];
        whitelistInfoMediaRoles memory mediaRole = whitelistMediaRoles[wallet];

        /* Wallet is Super Admin */
        if (StringUtils.equal(admins[wallet], "superAdmin")) return 100;
        
        /* Wallet is subSuper Admin */
        if (StringUtils.equal(admins[wallet], "subSuperAdmin")) return 101;

        /* Wallet is Fee Admin */
        if (StringUtils.equal(admins[wallet], "fee")) return 110;

        /* Wallet is Dev Admin */
        if (StringUtils.equal(admins[wallet], "dev")) return 111;

        /* Wallet is Simple Admin */
        if (StringUtils.equal(admins[wallet], "admin")) return 112;

        /* Wallet is Manager Finance */
        if (StringUtils.equal(m.role, "finance")) return 120;

        /* Wallet is Manager asset */
        if (StringUtils.equal(m.role, "assets")) return 121;

        /* Wallet is Manager asset */
        if (StringUtils.equal(m.role, "signer")) return 122;

        /* Wallet is HR Media Role */
        if (StringUtils.equal(mediaRole.role, "HR")) return 123;

         /* Wallet is digitalMedia Role */
        if (StringUtils.equal(mediaRole.role, "digitalMedia")) return 124;

         /* Wallet is marketing Media Role */
        if (StringUtils.equal(mediaRole.role, "marketing")) return 125;

        /* Wallet is Bank  */
        if (StringUtils.equal(banks[wallet], "bank")) return 130;

        /* Wallet is Owner  */
        if (StringUtils.equal(owners[wallet], "owner")) return 140;

        // /* Any type of Manager */
        // if(isWhitelistedManager(wallet)) return 200;
        /* Wallet is not Added */
        else if (!u.valid) return 404;
        /* If User is Suspendid */
        else if (u.suspend) return 401;
        /* Wallet KYC Expired */
        else if (!u.kycVerified) return 400;
        /* If Accredation check is false then Send 200 */
        else if (!accreditationCheck) return 200;
        /* Wallet AML Expired */
        else if (u.accredationExpiry <= block.timestamp) return 201;
        /* Wallet is Whitelisted */
        else return 200;
    }

    function removeWhitelistedUser(address _wallet) public onlyManager {
        _userWhitelisteds.remove(_wallet);
        whitelistInfo storage u = whitelistUsers[_wallet];
        u.valid = false;
    }

    /* Symbols Deployed Add to Contract */
    function addSymbols(string calldata _symbols)
        external
        returns (
            // onlyManager
            bool
        )
    {
        if (symbolsDef[_symbols] == true) return false;
        else {
            symbolsDef[_symbols] = true;
            return true;
        }
    }

    // On destroy Symbol Removed
    function removeSymbols(string calldata _symbols)
        external
        onlyManager
        returns (bool)
    {
        if (symbolsDef[_symbols] == true) symbolsDef[_symbols] = false;
        return true;
    }

    function closeTokenismWhitelist() public {
        require(
            StringUtils.equal(admins[_msgSender()], "superAdmin"),
            "only superAdmin can destroy Contract"
        );
        selfdestruct(payable(msg.sender));
    }

    function storedAllData()
        public
        view
        onlyAdmin
        returns (
            address[] memory _userList,
            bool[] memory _validity,
            bool[] memory _kycVery,
            bool[] memory _accredationVery,
            uint256[] memory _accredationExpir,
            uint256[] memory _taxWithHold,
            uint256[] memory _userTypes
        )
    {
        uint256 size = userList.length;

        bool[] memory validity = new bool[](size);
        bool[] memory kycVery = new bool[](size);
        bool[] memory accredationVery = new bool[](size);
        uint256[] memory accredationExpir = new uint256[](size);
        uint256[] memory taxWithHold = new uint256[](size);
        uint256[] memory userTypes = new uint256[](size);
        uint256 i;
        for (i = 0; i < userList.length; i++) {
            if (whitelistUsers[userList[i]].valid) {
                validity[i] = true;
            } else {
                validity[i] = false;
            }
            if (whitelistUsers[userList[i]].kycVerified) {
                kycVery[i] = true;
            } else {
                kycVery[i] = false;
            }
            if (whitelistUsers[userList[i]].accredationVerified) {
                accredationVery[i] = true;
            } else {
                accredationVery[i] = false;
            }
            accredationExpir[i] = (
                whitelistUsers[userList[i]].accredationExpiry
            );
            taxWithHold[i] = (whitelistUsers[userList[i]].taxWithholding);
            if (
                StringUtils.equal(whitelistUsers[userList[i]].userType, "Basic")
            ) {
                userTypes[i] = 20;
            } else userTypes[i] = 100;
        }
        return (
            userList,
            validity,
            kycVery,
            accredationVery,
            accredationExpir,
            taxWithHold,
            userTypes
        );
    }

    function userType(address _caller) public view returns (bool) {
        if (StringUtils.equal(whitelistUsers[_caller].userType, "Premium"))
            return true;
        return false;
    }
}

File 2 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 5 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 5 : TokenismAdminWhitelist.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Context.sol";
import "../utils/stringUtils.sol";

import "@openzeppelin/contracts/utils/Address.sol";
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

contract TokenismAdminWhitelist is Context {
    using Roles for Roles.Role;
    Roles.Role private _managerWhitelisteds;
    Roles.Role private _mediaRolesWhitelisteds;


    //  Add multiple admins option
    mapping(address => string) public admins;
    // add Multiple Banks aption
    mapping(address => string) public banks;
    // add Multiple Owners Options
    mapping(address => string) public owners;
     //  Add multiple media roles option

    address superAdmin;
    address feeAddress;
    address subSuperAdmin;
    //  Setting FeeStatus and fee Percent by Tokenism
    //  uint8 feeStatus;
    //  uint8 feePercent;
    bool public accreditationCheck = true;

    struct whitelistInfoManager {
        address wallet;
        string role;
        bool valid;
    }

    mapping(address => whitelistInfoManager) whitelistManagers;

    struct whitelistInfoMediaRoles {   
        address wallet;
        string role;
        bool valid;
    }
    mapping(address => whitelistInfoMediaRoles) whitelistMediaRoles;

    constructor() public{
        // admin = _msgSender();
        require(!Address.isContract(_msgSender()),"Super admin cant be Contract address");
        admins[_msgSender()] = "superAdmin";
        superAdmin = msg.sender;
    }

    function addSuperAdmin(address _superAdmin) public {
        require(!Address.isContract(_superAdmin),"Super admin cant be Contract address");
        require(msg.sender == superAdmin, "Only super admin can add admin");
        admins[_superAdmin] = "superAdmin";
        admins[superAdmin] = "dev";
        superAdmin = _superAdmin;
    }

     function addSubSuperAdmin(address _subSuperAdmin) public {
         require(!Address.isContract(_subSuperAdmin),"Super admin cant be Contract address");
        require(msg.sender == superAdmin, "Only super admin can add sub super admin");
        admins[_subSuperAdmin] = "subSuperAdmin";
        subSuperAdmin = _subSuperAdmin;
    }

    modifier onlyAdmin() {
        require(
            StringUtils.equal(admins[_msgSender()], "superAdmin") ||
                StringUtils.equal(admins[_msgSender()], "dev") ||
                StringUtils.equal(admins[_msgSender()], "fee") ||
                StringUtils.equal(admins[_msgSender()], "admin"),
            "Only admin is allowed"
        );
        _;
    }

    modifier onlyManager() {
        require(
            isWhitelistedManager(_msgSender()) ||
                StringUtils.equal(admins[_msgSender()], "superAdmin") ||
                StringUtils.equal(admins[_msgSender()], "dev") ||
                StringUtils.equal(admins[_msgSender()], "fee") ||
                StringUtils.equal(admins[_msgSender()], "admin"),
            "AKRU_Whitelist: caller does not have the Manager role"
        );
        _;
    }
     modifier onlyMedia() {
        require(
            isWhitelistedMediaRole(_msgSender()) ||
                StringUtils.equal(admins[_msgSender()], "superAdmin") ||
                StringUtils.equal(admins[_msgSender()], "dev") ||
                StringUtils.equal(admins[_msgSender()], "fee") ||
                StringUtils.equal(admins[_msgSender()], "admin"),
            "AKRU_AdminWhitelist: caller does not have the Media role"
        );
        _;
    }

    // Update Accredential Status
    function updateAccreditationCheck(bool status) public onlyManager {
        accreditationCheck = status;
    }

    // Roles
   
    function addWhitelistedMediaRoles(address _wallet, string memory _role)
        public
        onlyAdmin
    {
        require(
            StringUtils.equal(_role, "HR") ||
                StringUtils.equal(_role, "digitalMedia") ||
                StringUtils.equal(_role, "marketing"),
            "AKRU_AdminWhitelist: caller does not have the media role"
        );

        whitelistInfoMediaRoles storage newMediaRole = whitelistMediaRoles[_wallet];

        _mediaRolesWhitelisteds.add(_wallet);
        newMediaRole.wallet = _wallet;
        newMediaRole.role = _role;
        newMediaRole.valid = true;
        
    }
    function getMediaRole(address _wallet)
        public
        view
        returns (string memory)
    {
        whitelistInfoMediaRoles storage m = whitelistMediaRoles[_wallet];
        return m.role;
    }

    function updateMediaRole(address _wallet, string memory _role)
        public
        onlyAdmin
    {
        require(
           StringUtils.equal(_role, "HR") ||
                StringUtils.equal(_role, "digitalMedia") ||
                StringUtils.equal(_role, "marketing"),
            "AKRU_AdminWhitelist: Invalid  Media role"
        );
        whitelistInfoMediaRoles storage m = whitelistMediaRoles[_wallet];
        m.role = _role;
    }

    function isWhitelistedMediaRole(address _wallet) public view returns (bool) {
        whitelistInfoMediaRoles memory m = whitelistMediaRoles[_wallet];

        if (
            StringUtils.equal(admins[_wallet], "superAdmin") ||
            StringUtils.equal(admins[_wallet], "dev") ||
            StringUtils.equal(admins[_wallet], "fee") ||
            StringUtils.equal(admins[_wallet], "admin")
        ) return true;
        else if (!m.valid) return false;
        else return true;
    }

    function removeWhitelistedMediaRole(address _wallet) public onlyAdmin {
        _mediaRolesWhitelisteds.remove(_wallet);
        whitelistInfoMediaRoles storage m = whitelistMediaRoles[_wallet];
        m.valid = false;
    }

     function addWhitelistedManager(address _wallet, string memory _role)
        public
        onlyAdmin
    {
        require(
            StringUtils.equal(_role, "finance") ||
                StringUtils.equal(_role, "signer") ||
                StringUtils.equal(_role, "assets"),
            "AKRU_AdminWhitelist: caller does not have the Manager role"
        );
        whitelistInfoManager storage newManager = whitelistManagers[_wallet];

        _managerWhitelisteds.add(_wallet);
        newManager.wallet = _wallet;
        newManager.role = _role;
        newManager.valid = true;
       
    }

    function getManagerRole(address _wallet)
        public
        view
        returns (string memory)
    {
        whitelistInfoManager storage m = whitelistManagers[_wallet];
        return m.role;
    }

    function updateRoleManager(address _wallet, string memory _role)
        public
        onlyAdmin
    {
        require(
            StringUtils.equal(_role, "finance") ||
                StringUtils.equal(_role, "signer") ||
                StringUtils.equal(_role, "assets"),
            "AKRU_AdminWhitelist: Invalid  Manager role"
        );
        whitelistInfoManager storage m = whitelistManagers[_wallet];
        m.role = _role;
    }

    function isWhitelistedManager(address _wallet) public view returns (bool) {
        whitelistInfoManager memory m = whitelistManagers[_wallet];

        if (
            StringUtils.equal(admins[_wallet], "superAdmin") ||
            StringUtils.equal(admins[_wallet], "dev") ||
            StringUtils.equal(admins[_wallet], "fee") ||
            StringUtils.equal(admins[_wallet], "admin")
        ) return true;
        else if (!m.valid) return false;
        else return true;
    }

    // Only Super Admin
    function removeWhitelistedManager(address _wallet) public onlyAdmin {
        _managerWhitelisteds.remove(_wallet);
        whitelistInfoManager storage m = whitelistManagers[_wallet];
        m.valid = false;
    }

    function transferOwnership(address _newAdmin) public returns (bool) {
        // admin = _newAdmin;
        require(_msgSender() == superAdmin || _msgSender() == subSuperAdmin, "Only super admin can add admin");
        admins[_newAdmin] = "superAdmin";
        admins[superAdmin] = "";
        superAdmin = _newAdmin;

        return true;
    }

    function addAdmin(address _newAdmin, string memory _role)
        public
        onlyAdmin
        returns (bool)
    {
        require(
            _msgSender() == superAdmin || Address.isContract(_newAdmin) || _msgSender() == subSuperAdmin,
            "Only super admin can add admin"
        );
        require(
            StringUtils.equal(_role, "dev") ||
                StringUtils.equal(_role, "fee") ||
                StringUtils.equal(_role, "admin"),
            "undefind admin role"
        );
        admins[_newAdmin] = _role;
        return true;
    }
    function removeAdmin(address _adminAddress) 
        public 
        returns (bool)
    {
         require(
            _msgSender() == superAdmin || _msgSender() == subSuperAdmin,
            "Only super admin can remove admin"
        );
        delete admins[_adminAddress];
        return true;
    }
    function addBank(address _newBank, string memory _role)
        public
        onlyAdmin
        returns (bool)
    {
        require(
            _msgSender() == superAdmin || Address.isContract(_newBank) || _msgSender() == subSuperAdmin,
            "Only super admin can add admin"
        );
        require(StringUtils.equal(_role, "bank"), "undefind bank role");
        banks[_newBank] = _role;
        return true;
    }
    function removeBank(address _bank)
        public
        returns (bool)
    {
        require(
            _msgSender() == superAdmin || _msgSender() == subSuperAdmin,
            "Only super admin can remove admin"
        );
        delete banks[_bank];
        return true;
    }
    //* Property Owner
     function addPropertyOwner(address _newOwner, string memory _role)
        public
        onlyManager
        returns (bool)
    {
        require(StringUtils.equal(_role, "owner"), "undefind owner role");
        owners[_newOwner] = _role;
        return true;
    }
    function removePropertyOwner(address _newOwner)
        public
        returns (bool)
    {
        require(
            _msgSender() == superAdmin || _msgSender() == subSuperAdmin,
            "Only super admin can remove admin"
        );
        delete owners[_newOwner];
        return true;
    }

    // Function Add Fee Address
    function addFeeAddress(address _feeAddress) public {
        require(
            _msgSender() == superAdmin || _msgSender() == subSuperAdmin,
            "Only super admin can add Fee Address"
        );
        feeAddress = _feeAddress;
    }

    function getFeeAddress() public view returns (address) {
        return feeAddress;
    }

    // // Fee On off functionality
    // function setFeeStatus(uint8 option) public returns(bool){ // Fee option must be 0, 1
    //     require(msg.sender == superAdmin, "Only SuperAdmin on off fee");
    //     require(option == 1 || option == 0, "Wrong option call only 1 for on and 0 for off");
    //     require(feePercent > 0, "addPlatformFee! You must have set platform fee to on fee");
    //     feeStatus = option;
    //     return true;
    // }
    // // Get Fee Status
    //     return feeStatus;
    // }
    // // Add Fee Percent or change Fee Percentage on Tokenism Platform
    // function addPlatformFee(uint8 _fee)public returns(bool){
    //     require(msg.sender == superAdmin, "Only SuperAmin change Platform Fee");
    //     require(_fee > 0 && _fee < 100, "Wrong Percentage!  Fee must be greater 0 and less than 100");
    //     feePercent = _fee;
    //     return true;

    // }
    //  return feePercent;
    // }
    function isAdmin(address _calle) public view returns (bool) {
        if (
            StringUtils.equal(admins[_calle], "superAdmin") ||
            StringUtils.equal(admins[_calle], "dev") ||
            StringUtils.equal(admins[_calle], "fee") ||
            StringUtils.equal(admins[_calle], "admin")
        ) {
            return true;
        }
        return false;
        //  return admins[_calle];
    }

    function isSuperAdmin(address _calle) public view returns (bool) {
        if (StringUtils.equal(admins[_calle], "superAdmin")) {
            return true;
        }
        return false;
    }
    function isSubSuperAdmin(address _calle) public view returns (bool) {
        if (StringUtils.equal(admins[_calle], "subSuperAdmin")) {
            return true;
        }
        return false;
    }

    function isBank(address _calle) public view returns (bool) {
        if (StringUtils.equal(banks[_calle], "bank")) {
            return true;
        }
        return false;
    }
function isOwner(address _calle) public view returns (bool) {
        if (StringUtils.equal(owners[_calle], "owner")) {
            return true;
        }
        return false;
    }
    function isManager(address _calle) public view returns (bool) {
        whitelistInfoManager memory m = whitelistManagers[_calle];
        return m.valid;
    }
}

File 5 of 5 : stringUtils.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;


library StringUtils {
    /// @dev Does a byte-by-byte lexicographical comparison of two strings.
    /// @return a negative number if `_a` is smaller, zero if they are equal
    /// and a positive numbe if `_b` is smaller.
    function compare(string memory _a, string memory _b)
        internal
        pure
        returns (int256)
    {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint256 minLength = a.length;
        if (b.length < minLength) minLength = b.length;
        //@todo unroll the loop into increments of 32 and do full 32 byte comparisons
        for (uint256 i = 0; i < minLength; i++)
            if (a[i] < b[i]) return -1;
            else if (a[i] > b[i]) return 1;
        if (a.length < b.length) return -1;
        else if (a.length > b.length) return 1;
        else return 0;
    }

    /// @dev Compares two strings and returns true iff they are equal.
    function equal(string memory _a, string memory _b)
        internal
        pure
        returns (bool)
    {
        return compare(_a, _b) == 0;
    }

    /// @dev Finds the index of the first occurrence of _needle in _haystack
    function indexOf(string memory _haystack, string memory _needle)
        internal
        pure
        returns (int256)
    {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if (h.length < 1 || n.length < 1 || (n.length > h.length)) return -1;
        else if (h.length > (2**128 - 1))
            // since we have to be able to return -1 (if the char isn't found or input error), this function must return an "int" type with a max length of (2^128 - 1)
            return -1;
        else {
            uint256 subindex = 0;
            for (uint256 i = 0; i < h.length; i++) {
                if (h[i] == n[0]) // found the first char of b
                {
                    subindex = 1;
                    while (
                        subindex < n.length &&
                        (i + subindex) < h.length &&
                        h[i + subindex] == n[subindex] // search until the chars don't match or until we reach the end of a or b
                    ) {
                        subindex++;
                    }
                    if (subindex == n.length) return int256(i);
                }
            }
            return -1;
        }
    }

    // function toBytes(address a) 
    //    internal
    //     pure
    //     returns (bytes memory) {
    // return abi.encodePacked(a);
    // }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[],"name":"accreditationCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"activeUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"addAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newBank","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"addBank","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"addFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"addPropertyOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subSuperAdmin","type":"address"}],"name":"addSubSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_superAdmin","type":"address"}],"name":"addSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_symbols","type":"string"}],"name":"addSymbols","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"addWhitelistedManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"addWhitelistedMediaRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_kycVerified","type":"bool"},{"internalType":"bool","name":"_accredationVerified","type":"bool"},{"internalType":"uint256","name":"_accredationExpiry","type":"uint256"}],"name":"addWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"banks","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeTokenismWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getManagerRole","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getMediaRole","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWhitelistedUser","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isBank","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isSubSuperAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_calle","type":"address"}],"name":"isSuperAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isWhitelistedManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isWhitelistedMediaRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isWhitelistedUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adminAddress","type":"address"}],"name":"removeAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bank","type":"address"}],"name":"removeBank","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"removePropertyOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_symbols","type":"string"}],"name":"removeSymbols","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeWhitelistedManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeWhitelistedMediaRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"removeWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storedAllData","outputs":[{"internalType":"address[]","name":"_userList","type":"address[]"},{"internalType":"bool[]","name":"_validity","type":"bool[]"},{"internalType":"bool[]","name":"_kycVery","type":"bool[]"},{"internalType":"bool[]","name":"_accredationVery","type":"bool[]"},{"internalType":"uint256[]","name":"_accredationExpir","type":"uint256[]"},{"internalType":"uint256[]","name":"_taxWithHold","type":"uint256[]"},{"internalType":"uint256[]","name":"_userTypes","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"suspendUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_accredationExpiry","type":"uint256"}],"name":"updateAccredationWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateAccreditationCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_kycVerified","type":"bool"}],"name":"updateKycWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"updateMediaRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_role","type":"string"}],"name":"updateRoleManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_taxWithholding","type":"uint256"}],"name":"updateTaxWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"string","name":"_userType","type":"string"}],"name":"updateUserType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"}],"name":"userType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistUsers","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"kycVerified","type":"bool"},{"internalType":"bool","name":"accredationVerified","type":"bool"},{"internalType":"uint256","name":"accredationExpiry","type":"uint256"},{"internalType":"uint256","name":"taxWithholding","type":"uint256"},{"internalType":"string","name":"userType","type":"string"},{"internalType":"bool","name":"suspend","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526007805460ff60a01b1916600160a01b1790553480156200002457600080fd5b506200004462000033620000ea565b620000ee60201b620039ed1760201c565b156200006d5760405162461bcd60e51b815260040162000064906200019a565b60405180910390fd5b60408051808201909152600a81526939bab832b920b236b4b760b11b6020820152600260006200009c620000ea565b6001600160a01b03166001600160a01b031681526020019081526020016000209080519060200190620000d1929190620000f4565b50600580546001600160a01b031916331790556200021b565b3390565b3b151590565b8280546200010290620001de565b90600052602060002090601f01602090048101928262000126576000855562000171565b82601f106200014157805160ff191683800117855562000171565b8280016001018555821562000171579182015b828111156200017157825182559160200191906001019062000154565b506200017f92915062000183565b5090565b5b808211156200017f576000815560010162000184565b60208082526024908201527f53757065722061646d696e2063616e7420626520436f6e7472616374206164646040820152637265737360e01b606082015260800190565b600281046001821680620001f357607f821691505b602082108114156200021557634e487b7160e01b600052602260045260246000fd5b50919050565b6146c8806200022b6000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c806380c3b8c211610182578063b7b1b8e9116100e9578063df7f453b116100a2578063f1147fa41161007c578063f1147fa414610662578063f2fde38b14610675578063f3ae241514610688578063fc17f6651461069b576102bb565b8063df7f453b14610629578063e851e0c41461063c578063ec676a491461064f576102bb565b8063b7b1b8e9146105aa578063b83458b0146105bd578063c5900a8e146105d0578063c687dfb0146105e3578063d16856ca146105f6578063d88c271e14610609576102bb565b80639f4216e81161013b5780639f4216e814610538578063a4442db61461054b578063a7cafaa81461055e578063a8eb9cba14610571578063aaa2d64714610584578063b3292ff014610597576102bb565b806380c3b8c2146104d15780638c438908146104e45780638d3d4f08146104f75780638e30f756146104ff57806394a4bc72146105125780639649650c14610525576102bb565b8063368e926b116102265780635d43968c116101df5780635d43968c1461044b5780636b629c511461045e5780636ec55dbc1461047157806374ffc19b146104985780637f394e19146104ab5780637f3efdb5146104be576102bb565b8063368e926b146103be5780633736fd12146103d9578063429b62e5146103ec5780634378c8cc146103ff5780634e7ceacb1461041257806352c638e114610427576102bb565b80631e153acb116102785780631e153acb1461034c5780631fade77e1461035f57806324d7806c1461037257806327d37960146103855780632f54bf6e146103985780633128b18d146103ab576102bb565b8063022914a7146102c05780630a908988146102e95780630d501792146102fe5780631566b89d146103115780631785f53c1461031957806318ab9ef914610339575b600080fd5b6102d36102ce366004613d30565b6106ae565b6040516102e09190614184565b60405180910390f35b6102fc6102f7366004613d30565b610748565b005b6102d361030c366004613d30565b610b21565b6102fc610bd4565b61032c610327366004613d30565b610c02565b6040516102e0919061411b565b6102d3610347366004613d30565b610c8d565b6102fc61035a366004613d30565b610cb9565b6102fc61036d366004613d30565b610d5b565b61032c610380366004613d30565b610df4565b6102fc610393366004613d30565b610ebb565b61032c6103a6366004613d30565b610f78565b6102fc6103b9366004613eaa565b611041565b6103c66110da565b6040516102e09796959493929190614051565b61032c6103e7366004613dcd565b61188e565b6102d36103fa366004613d30565b611983565b61032c61040d366004613ec4565b61199c565b61041a611a11565b6040516102e0919061400f565b61043a610435366004613d30565b611a20565b6040516102e0959493929190614023565b6102fc610459366004613e81565b611b74565b6102fc61046c366004613e81565b611c2e565b61048461047f366004613d30565b611cc8565b6040516102e0989796959493929190614126565b6102fc6104a6366004613d83565b611daf565b61032c6104b9366004613d30565b611f5b565b6102fc6104cc366004613dcd565b61202c565b6102d36104df366004613d30565b61214f565b61032c6104f2366004613dcd565b612168565b61032c6122ad565b61032c61050d366004613d30565b6122bd565b61032c610520366004613ec4565b612340565b61032c610533366004613d30565b61242a565b61041a610546366004613f31565b6124ad565b6102fc610559366004613dcd565b6124d7565b6102fc61056c366004613d30565b61264a565b6102fc61057f366004613d51565b6126cb565b6102fc610592366004613d30565b61277b565b6102fc6105a5366004613d30565b612814565b6102fc6105b8366004613d30565b612911565b61032c6105cb366004613d30565b6129b8565b61032c6105de366004613d30565b612a86565b61032c6105f1366004613d30565b612c44565b61032c610604366004613dcd565b612c8c565b61061c610617366004613d30565b612e28565b6040516102e09190614617565b61032c610637366004613d30565b61340c565b6102fc61064a366004613dcd565b613434565b61032c61065d366004613d30565b61356f565b6102fc610670366004613dcd565b613597565b61032c610683366004613d30565b6136d6565b61032c610696366004613d30565b6137d9565b6102fc6106a9366004613dcd565b6138bf565b600460205260009081526040902080546106c790614620565b80601f01602080910402602001604051908101604052809291908181526020018280546106f390614620565b80156107405780601f1061071557610100808354040283529160200191610740565b820191906000526020600020905b81548152906001019060200180831161072357829003601f168201915b505050505081565b6107536105f16139f3565b806108395750610839600260006107686139f3565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461079390614620565b80601f01602080910402602001604051908101604052809291908181526020018280546107bf90614620565b801561080c5780601f106107e15761010080835404028352916020019161080c565b820191906000526020600020905b8154815290600101906020018083116107ef57829003601f168201915b50505050506040518060400160405280600a81526020016939bab832b920b236b4b760b11b8152506139f7565b8061091857506109186002600061084e6139f3565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461087990614620565b80601f01602080910402602001604051908101604052809291908181526020018280546108a590614620565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050604051806040016040528060038152602001623232bb60e91b8152506139f7565b806109f757506109f76002600061092d6139f3565b6001600160a01b03166001600160a01b03168152602001908152602001600020805461095890614620565b80601f016020809104026020016040519081016040528092919081815260200182805461098490614620565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b50505050506040518060400160405280600381526020016266656560e81b8152506139f7565b80610ad85750610ad860026000610a0c6139f3565b6001600160a01b03166001600160a01b031681526020019081526020016000208054610a3790614620565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6390614620565b8015610ab05780601f10610a8557610100808354040283529160200191610ab0565b820191906000526020600020905b815481529060010190602001808311610a9357829003601f168201915b50505050506040518060400160405280600581526020016430b236b4b760d91b8152506139f7565b610afd5760405162461bcd60e51b8152600401610af4906141db565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020600401805460ff19169055565b6001600160a01b03811660009081526009602052604090206001810180546060929190610b4d90614620565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7990614620565b8015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b50505050509150505b919050565b610be3600260006107686139f3565b610bff5760405162461bcd60e51b8152600401610af490614230565b33ff5b6005546000906001600160a01b0316610c196139f3565b6001600160a01b03161480610c4857506007546001600160a01b0316610c3d6139f3565b6001600160a01b0316145b610c645760405162461bcd60e51b8152600401610af49061448a565b6001600160a01b0382166000908152600260205260408120610c8591613c31565b506001919050565b6001600160a01b03811660009081526008602052604090206001810180546060929190610b4d90614620565b610cc46105f16139f3565b80610cd95750610cd9600260006107686139f3565b80610cee5750610cee6002600061084e6139f3565b80610d035750610d036002600061092d6139f3565b80610d185750610d1860026000610a0c6139f3565b610d345760405162461bcd60e51b8152600401610af4906141db565b6001600160a01b03166000908152600c60205260409020600401805460ff19166001179055565b610d6a600260006107686139f3565b80610d7f5750610d7f6002600061084e6139f3565b80610d945750610d946002600061092d6139f3565b80610da95750610da960026000610a0c6139f3565b610dc55760405162461bcd60e51b8152600401610af4906144cb565b610dd0600182613a0b565b6001600160a01b03166000908152600960205260409020600201805460ff19169055565b6001600160a01b03811660009081526002602052604081208054610e1c919061079390614620565b80610e4a57506001600160a01b03821660009081526002602052604090208054610e4a919061087990614620565b80610e7857506001600160a01b03821660009081526002602052604090208054610e78919061095890614620565b80610ea657506001600160a01b03821660009081526002602052604090208054610ea69190610a3790614620565b15610eb357506001610bcf565b506000919050565b610ec4816139ed565b15610ee15760405162461bcd60e51b8152600401610af4906142ab565b6005546001600160a01b03163314610f0b5760405162461bcd60e51b8152600401610af4906142ef565b604080518082018252600d81526c39bab129bab832b920b236b4b760991b60208083019182526001600160a01b03851660009081526002909152929092209051610f559290613c70565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526004602052604081208054610ea69190610fa090614620565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90614620565b80156110195780601f10610fee57610100808354040283529160200191611019565b820191906000526020600020905b815481529060010190602001808311610ffc57829003601f168201915b50505050506040518060400160405280600581526020016437bbb732b960d91b8152506139f7565b61104c6105f16139f3565b806110615750611061600260006107686139f3565b8061107657506110766002600061084e6139f3565b8061108b575061108b6002600061092d6139f3565b806110a057506110a060026000610a0c6139f3565b6110bc5760405162461bcd60e51b8152600401610af4906141db565b60078054911515600160a01b0260ff60a01b19909216919091179055565b60608060608060608060606110f4600260006107686139f3565b8061110957506111096002600061084e6139f3565b8061111e575061111e6002600061092d6139f3565b80611133575061113360026000610a0c6139f3565b61114f5760405162461bcd60e51b8152600401610af4906144cb565b600d5460008167ffffffffffffffff81111561117b57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111a4578160200160208202803683370190505b50905060008267ffffffffffffffff8111156111d057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111f9578160200160208202803683370190505b50905060008367ffffffffffffffff81111561122557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561124e578160200160208202803683370190505b50905060008467ffffffffffffffff81111561127a57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112a3578160200160208202803683370190505b50905060008567ffffffffffffffff8111156112cf57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112f8578160200160208202803683370190505b50905060008667ffffffffffffffff81111561132457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b50905060005b600d5481101561180b57600c6000600d838154811061138257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156113e65760018782815181106113d157634e487b7160e01b600052603260045260246000fd5b91151560209283029190910190910152611419565b600087828151811061140857634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101525b600c6000600d838154811061143e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff600160a81b90910416156114aa57600186828151811061149557634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526114dd565b60008682815181106114cc57634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101525b600c6000600d838154811061150257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff600160b01b909104161561156e57600185828151811061155957634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526115a1565b600085828151811061159057634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101525b600c6000600d83815481106115c657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154845185908390811061161057634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600c6000600d838154811061164157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902060020154835184908390811061168b57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050611792600c6000600d84815481106116bf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902060030180546116f190614620565b80601f016020809104026020016040519081016040528092919081815260200182805461171d90614620565b801561176a5780601f1061173f5761010080835404028352916020019161176a565b820191906000526020600020905b81548152906001019060200180831161174d57829003601f168201915b505050505060405180604001604052806005815260200164426173696360d81b8152506139f7565b156117ca5760148282815181106117b957634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506117f9565b60648282815181106117ec57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b8061180381614655565b915050611353565b600d8787878787878680548060200260200160405190810160405280929190818152602001828054801561186857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161184a575b505050505096509e509e509e509e509e509e509e50505050505050505090919293949596565b600061189b6105f16139f3565b806118b057506118b0600260006107686139f3565b806118c557506118c56002600061084e6139f3565b806118da57506118da6002600061092d6139f3565b806118ef57506118ef60026000610a0c6139f3565b61190b5760405162461bcd60e51b8152600401610af4906141db565b611932826040518060400160405280600581526020016437bbb732b960d91b8152506139f7565b61194e5760405162461bcd60e51b8152600401610af49061445d565b6001600160a01b0383166000908152600460209081526040909120835161197792850190613c70565b50600190505b92915050565b600260205260009081526040902080546106c790614620565b6000600b83836040516119b0929190613fff565b9081526040519081900360200190205460ff161515600114156119d55750600061197d565b6001600b84846040516119e9929190613fff565b908152604051908190036020019020805491151560ff1990921691909117905550600161197d565b6006546001600160a01b031690565b6001600160a01b038082166000908152600c6020908152604080832081516101008082018452825460ff8082161515845291810490971694820194909452600160a81b86048416151592810192909252600160b01b9094049091161515606082015260018301546080820152600283015460a0820152600383018054929384938493849384938493909160c0840191611ab890614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae490614620565b8015611b315780601f10611b0657610100808354040283529160200191611b31565b820191906000526020600020905b815481529060010190602001808311611b1457829003601f168201915b50505091835250506004919091015460ff1615156020918201528101516040820151608083015160a090930151919a909950428310159850919650945092505050565b611b7f6105f16139f3565b80611b945750611b94600260006107686139f3565b80611ba95750611ba96002600061084e6139f3565b80611bbe5750611bbe6002600061092d6139f3565b80611bd35750611bd360026000610a0c6139f3565b611bef5760405162461bcd60e51b8152600401610af4906141db565b42811015611c0f5760405162461bcd60e51b8152600401610af490614583565b6001600160a01b039091166000908152600c6020526040902060010155565b611c396105f16139f3565b80611c4e5750611c4e600260006107686139f3565b80611c635750611c636002600061084e6139f3565b80611c785750611c786002600061092d6139f3565b80611c8d5750611c8d60026000610a0c6139f3565b611ca95760405162461bcd60e51b8152600401610af4906141db565b6001600160a01b039091166000908152600c6020526040902060020155565b600c60205260009081526040902080546001820154600283015460038401805460ff808616966001600160a01b0361010088041696600160a81b8104831696600160b01b9091049092169491939192909190611d2390614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4f90614620565b8015611d9c5780601f10611d7157610100808354040283529160200191611d9c565b820191906000526020600020905b815481529060010190602001808311611d7f57829003601f168201915b5050506004909301549192505060ff1688565b611dba6105f16139f3565b80611dcf5750611dcf600260006107686139f3565b80611de45750611de46002600061084e6139f3565b80611df95750611df96002600061092d6139f3565b80611e0e5750611e0e60026000610a0c6139f3565b611e2a5760405162461bcd60e51b8152600401610af4906141db565b8115611e505742811015611e505760405162461bcd60e51b8152600401610af490614583565b611e5b600a85613a53565b6001600160a01b0384166000818152600c60209081526040808320805460048201805460ff19908116909155600283019590955560018083018890559416909317610100600160a81b0319166101009094029390931760ff60a81b1916600160a81b871515021760ff60b01b1916600160b01b861515021782558251808401909352600580845264426173696360d81b939091019283529091611f0391600384019190613c70565b5050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b039590951694909417909355505050565b6001600160a01b03811660009081526002602052604081208054610ea69190611f8390614620565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf90614620565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b50505050506040518060400160405280600d81526020016c39bab129bab832b920b236b4b760991b8152506139f7565b6120376105f16139f3565b8061204c575061204c600260006107686139f3565b8061206157506120616002600061084e6139f3565b8061207657506120766002600061092d6139f3565b8061208b575061208b60026000610a0c6139f3565b6120a75760405162461bcd60e51b8152600401610af4906141db565b6120ce8160405180604001604052806005815260200164426173696360d81b8152506139f7565b806120fd57506120fd81604051806040016040528060078152602001665072656d69756d60c81b8152506139f7565b6121195760405162461bcd60e51b8152600401610af490614426565b6001600160a01b0382166000908152600c6020908152604090912082519091612149916003840191850190613c70565b50505050565b600360205260009081526040902080546106c790614620565b6000612179600260006107686139f3565b8061218e575061218e6002600061084e6139f3565b806121a357506121a36002600061092d6139f3565b806121b857506121b860026000610a0c6139f3565b6121d45760405162461bcd60e51b8152600401610af4906144cb565b6005546001600160a01b03166121e86139f3565b6001600160a01b031614806122015750612201836139ed565b8061222657506007546001600160a01b031661221b6139f3565b6001600160a01b0316145b6122425760405162461bcd60e51b8152600401610af490614274565b612268826040518060400160405280600481526020016362616e6b60e01b8152506139f7565b6122845760405162461bcd60e51b8152600401610af4906144fa565b6001600160a01b0383166000908152600360209081526040909120835161197792850190613c70565b600754600160a01b900460ff1681565b6005546000906001600160a01b03166122d46139f3565b6001600160a01b0316148061230357506007546001600160a01b03166122f86139f3565b6001600160a01b0316145b61231f5760405162461bcd60e51b8152600401610af49061448a565b6001600160a01b0382166000908152600460205260408120610c8591613c31565b600061234d6105f16139f3565b806123625750612362600260006107686139f3565b8061237757506123776002600061084e6139f3565b8061238c575061238c6002600061092d6139f3565b806123a157506123a160026000610a0c6139f3565b6123bd5760405162461bcd60e51b8152600401610af4906141db565b600b83836040516123cf929190613fff565b9081526040519081900360200190205460ff16151560011415612421576000600b8484604051612400929190613fff565b908152604051908190036020019020805491151560ff199092169190911790555b50600192915050565b6005546000906001600160a01b03166124416139f3565b6001600160a01b0316148061247057506007546001600160a01b03166124656139f3565b6001600160a01b0316145b61248c5760405162461bcd60e51b8152600401610af49061448a565b6001600160a01b0382166000908152600360205260408120610c8591613c31565b600d81815481106124bd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6124e6600260006107686139f3565b806124fb57506124fb6002600061084e6139f3565b8061251057506125106002600061092d6139f3565b80612525575061252560026000610a0c6139f3565b6125415760405162461bcd60e51b8152600401610af4906144cb565b6125658160405180604001604052806002815260200161242960f11b8152506139f7565b806125995750612599816040518060400160405280600c81526020016b6469676974616c4d6564696160a01b8152506139f7565b806125ca57506125ca81604051806040016040528060098152602001686d61726b6574696e6760b81b8152506139f7565b6125e65760405162461bcd60e51b8152600401610af490614526565b6001600160a01b0382166000908152600960205260409020612609600184613a53565b80546001600160a01b0319166001600160a01b03841617815581516126379060018301906020850190613c70565b50600201805460ff191660011790555050565b6005546001600160a01b031661265e6139f3565b6001600160a01b0316148061268d57506007546001600160a01b03166126826139f3565b6001600160a01b0316145b6126a95760405162461bcd60e51b8152600401610af490614197565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6126d66105f16139f3565b806126eb57506126eb600260006107686139f3565b8061270057506127006002600061084e6139f3565b8061271557506127156002600061092d6139f3565b8061272a575061272a60026000610a0c6139f3565b6127465760405162461bcd60e51b8152600401610af4906141db565b6001600160a01b039091166000908152600c602052604090208054911515600160a81b0260ff60a81b19909216919091179055565b61278a600260006107686139f3565b8061279f575061279f6002600061084e6139f3565b806127b457506127b46002600061092d6139f3565b806127c957506127c960026000610a0c6139f3565b6127e55760405162461bcd60e51b8152600401610af4906144cb565b6127f0600082613a0b565b6001600160a01b03166000908152600860205260409020600201805460ff19169055565b61281d816139ed565b1561283a5760405162461bcd60e51b8152600401610af4906142ab565b6005546001600160a01b031633146128645760405162461bcd60e51b8152600401610af490614274565b604080518082018252600a81526939bab832b920b236b4b760b11b60208083019182526001600160a01b038516600090815260029091529290922090516128ab9290613c70565b5060408051808201825260038152623232bb60e91b60208083019182526005546001600160a01b0316600090815260029091529290922090516128ee9290613c70565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b61291c6105f16139f3565b806129315750612931600260006107686139f3565b8061294657506129466002600061084e6139f3565b8061295b575061295b6002600061092d6139f3565b80612970575061297060026000610a0c6139f3565b61298c5760405162461bcd60e51b8152600401610af4906141db565b612997600a82613a0b565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6001600160a01b0381166000908152600c602052604081206003018054610ea691906129e390614620565b80601f0160208091040260200160405190810160405280929190818152602001828054612a0f90614620565b8015612a5c5780601f10612a3157610100808354040283529160200191612a5c565b820191906000526020600020905b815481529060010190602001808311612a3f57829003601f168201915b5050505050604051806040016040528060078152602001665072656d69756d60c81b8152506139f7565b6001600160a01b0380821660009081526009602090815260408083208151606081019092528054909416815260018401805493948594929390929084019190612ace90614620565b80601f0160208091040260200160405190810160405280929190818152602001828054612afa90614620565b8015612b475780601f10612b1c57610100808354040283529160200191612b47565b820191906000526020600020905b815481529060010190602001808311612b2a57829003601f168201915b505050918352505060029182015460ff1615156020918201526001600160a01b0386166000908152919052604090208054919250612b889161079390614620565b80612bb657506001600160a01b03831660009081526002602052604090208054612bb6919061087990614620565b80612be457506001600160a01b03831660009081526002602052604090208054612be4919061095890614620565b80612c1257506001600160a01b03831660009081526002602052604090208054612c129190610a3790614620565b15612c21576001915050610bcf565b8060400151612c34576000915050610bcf565b6001915050610bcf565b50919050565b6001600160a01b0380821660009081526008602090815260408083208151606081019092528054909416815260018401805493948594929390929084019190612ace90614620565b6000612c9d600260006107686139f3565b80612cb25750612cb26002600061084e6139f3565b80612cc75750612cc76002600061092d6139f3565b80612cdc5750612cdc60026000610a0c6139f3565b612cf85760405162461bcd60e51b8152600401610af4906144cb565b6005546001600160a01b0316612d0c6139f3565b6001600160a01b03161480612d255750612d25836139ed565b80612d4a57506007546001600160a01b0316612d3f6139f3565b6001600160a01b0316145b612d665760405162461bcd60e51b8152600401610af490614274565b612d8b82604051806040016040528060038152602001623232bb60e91b8152506139f7565b80612db65750612db6826040518060400160405280600381526020016266656560e81b8152506139f7565b80612de35750612de3826040518060400160405280600581526020016430b236b4b760d91b8152506139f7565b612dff5760405162461bcd60e51b8152600401610af4906145ea565b6001600160a01b0383166000908152600260209081526040909120835161197792850190613c70565b6001600160a01b038082166000908152600c60209081526040808320600883528184208251606081019093528054909516825260018501805494959194869484019190612e7490614620565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea090614620565b8015612eed5780601f10612ec257610100808354040283529160200191612eed565b820191906000526020600020905b815481529060010190602001808311612ed057829003601f168201915b50505091835250506002919091015460ff1615156020918201526001600160a01b038087166000908152600983526040808220815160608101909252805490931681526001830180549596509194909384019190612f4a90614620565b80601f0160208091040260200160405190810160405280929190818152602001828054612f7690614620565b8015612fc35780601f10612f9857610100808354040283529160200191612fc3565b820191906000526020600020905b815481529060010190602001808311612fa657829003601f168201915b505050918352505060029182015460ff1615156020918201526001600160a01b03881660009081529190526040902080549192506130049161079390614620565b156130155760649350505050610bcf565b6001600160a01b0385166000908152600260205260409020805461303d9190611f8390614620565b1561304e5760659350505050610bcf565b6001600160a01b03851660009081526002602052604090208054613076919061095890614620565b1561308757606e9350505050610bcf565b6001600160a01b038516600090815260026020526040902080546130af919061087990614620565b156130c057606f9350505050610bcf565b6001600160a01b038516600090815260026020526040902080546130e89190610a3790614620565b156130f95760709350505050610bcf565b61312682602001516040518060400160405280600781526020016666696e616e636560c81b8152506139f7565b156131375760789350505050610bcf565b61316382602001516040518060400160405280600681526020016561737365747360d01b8152506139f7565b156131745760799350505050610bcf565b6131a082602001516040518060400160405280600681526020016539b4b3b732b960d11b8152506139f7565b156131b157607a9350505050610bcf565b6131d9816020015160405180604001604052806002815260200161242960f11b8152506139f7565b156131ea57607b9350505050610bcf565b61321c81602001516040518060400160405280600c81526020016b6469676974616c4d6564696160a01b8152506139f7565b1561322d57607c9350505050610bcf565b61325c8160200151604051806040016040528060098152602001686d61726b6574696e6760b81b8152506139f7565b1561326d57607d9350505050610bcf565b6001600160a01b03851660009081526003602052604090208054613335919061329590614620565b80601f01602080910402602001604051908101604052809291908181526020018280546132c190614620565b801561330e5780601f106132e35761010080835404028352916020019161330e565b820191906000526020600020905b8154815290600101906020018083116132f157829003601f168201915b50505050506040518060400160405280600481526020016362616e6b60e01b8152506139f7565b156133465760829350505050610bcf565b6001600160a01b0385166000908152600460205260409020805461336e9190610fa090614620565b1561337f57608c9350505050610bcf565b825460ff16613395576101949350505050610bcf565b600483015460ff16156133af576101919350505050610bcf565b8254600160a81b900460ff166133cc576101909350505050610bcf565b600754600160a01b900460ff166133e95760c89350505050610bcf565b428360010154116134005760c99350505050610bcf565b60c89350505050610bcf565b6001600160a01b03811660009081526002602052604081208054610ea6919061079390614620565b613443600260006107686139f3565b8061345857506134586002600061084e6139f3565b8061346d575061346d6002600061092d6139f3565b80613482575061348260026000610a0c6139f3565b61349e5760405162461bcd60e51b8152600401610af4906144cb565b6134c7816040518060400160405280600781526020016666696e616e636560c81b8152506139f7565b806134f557506134f5816040518060400160405280600681526020016539b4b3b732b960d11b8152506139f7565b806135235750613523816040518060400160405280600681526020016561737365747360d01b8152506139f7565b61353f5760405162461bcd60e51b8152600401610af4906143dc565b6001600160a01b038216600090815260086020908152604090912082519091612149916001840191850190613c70565b6001600160a01b03811660009081526003602052604081208054610ea6919061329590614620565b6135a6600260006107686139f3565b806135bb57506135bb6002600061084e6139f3565b806135d057506135d06002600061092d6139f3565b806135e557506135e560026000610a0c6139f3565b6136015760405162461bcd60e51b8152600401610af4906144cb565b6136258160405180604001604052806002815260200161242960f11b8152506139f7565b806136595750613659816040518060400160405280600c81526020016b6469676974616c4d6564696160a01b8152506139f7565b8061368a575061368a81604051806040016040528060098152602001686d61726b6574696e6760b81b8152506139f7565b6136a65760405162461bcd60e51b8152600401610af490614337565b6001600160a01b038216600090815260096020908152604090912082519091612149916001840191850190613c70565b6005546000906001600160a01b03166136ed6139f3565b6001600160a01b0316148061371c57506007546001600160a01b03166137116139f3565b6001600160a01b0316145b6137385760405162461bcd60e51b8152600401610af490614274565b604080518082018252600a81526939bab832b920b236b4b760b11b60208083019182526001600160a01b0386166000908152600290915292909220905161377f9290613c70565b5060408051602080820180845260008084526005546001600160a01b03168152600290925292902090516137b39290613c70565b5050600580546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b038082166000908152600860209081526040808320815160608101909252805490941681526001840180549394859492939092908401919061382190614620565b80601f016020809104026020016040519081016040528092919081815260200182805461384d90614620565b801561389a5780601f1061386f5761010080835404028352916020019161389a565b820191906000526020600020905b81548152906001019060200180831161387d57829003601f168201915b50505091835250506002919091015460ff161515602090910152604001519392505050565b6138ce600260006107686139f3565b806138e357506138e36002600061084e6139f3565b806138f857506138f86002600061092d6139f3565b8061390d575061390d60026000610a0c6139f3565b6139295760405162461bcd60e51b8152600401610af4906144cb565b613952816040518060400160405280600781526020016666696e616e636560c81b8152506139f7565b806139805750613980816040518060400160405280600681526020016539b4b3b732b960d11b8152506139f7565b806139ae57506139ae816040518060400160405280600681526020016561737365747360d01b8152506139f7565b6139ca5760405162461bcd60e51b8152600401610af49061437f565b6001600160a01b0382166000908152600860205260408120906126099084613a53565b3b151590565b3390565b6000613a038383613a9f565b159392505050565b6001600160a01b038116613a1e57600080fd5b613a288282613bfc565b613a3157600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b038116613a6657600080fd5b613a708282613bfc565b15613a7a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b815181516000918491849190811115613ab6575080515b60005b81811015613bc257828181518110613ae157634e487b7160e01b600052603260045260246000fd5b602001015160f81c60f81b6001600160f81b031916848281518110613b1657634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b0319161015613b395760001994505050505061197d565b828181518110613b5957634e487b7160e01b600052603260045260246000fd5b602001015160f81c60f81b6001600160f81b031916848281518110613b8e57634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b0319161115613bb057600194505050505061197d565b80613bba81614655565b915050613ab9565b50815183511015613bda57600019935050505061197d565b815183511115613bf0576001935050505061197d565b6000935050505061197d565b60006001600160a01b038216613c1157600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b508054613c3d90614620565b6000825580601f10613c4f5750613c6d565b601f016020900490600052602060002090810190613c6d9190613cf4565b50565b828054613c7c90614620565b90600052602060002090601f016020900481019282613c9e5760008555613ce4565b82601f10613cb757805160ff1916838001178555613ce4565b82800160010185558215613ce4579182015b82811115613ce4578251825591602001919060010190613cc9565b50613cf0929150613cf4565b5090565b5b80821115613cf05760008155600101613cf5565b80356001600160a01b0381168114610bcf57600080fd5b80358015158114610bcf57600080fd5b600060208284031215613d41578081fd5b613d4a82613d09565b9392505050565b60008060408385031215613d63578081fd5b613d6c83613d09565b9150613d7a60208401613d20565b90509250929050565b60008060008060808587031215613d98578182fd5b613da185613d09565b9350613daf60208601613d20565b9250613dbd60408601613d20565b9396929550929360600135925050565b60008060408385031215613ddf578182fd5b613de883613d09565b915060208084013567ffffffffffffffff80821115613e05578384fd5b818601915086601f830112613e18578384fd5b813581811115613e2a57613e2a61467c565b604051601f8201601f1916810185018381118282101715613e4d57613e4d61467c565b6040528181528382018501891015613e63578586fd5b81858501868301378585838301015280955050505050509250929050565b60008060408385031215613e93578182fd5b613e9c83613d09565b946020939093013593505050565b600060208284031215613ebb578081fd5b613d4a82613d20565b60008060208385031215613ed6578182fd5b823567ffffffffffffffff80821115613eed578384fd5b818501915085601f830112613f00578384fd5b813581811115613f0e578485fd5b866020828501011115613f1f578485fd5b60209290920196919550909350505050565b600060208284031215613f42578081fd5b5035919050565b6000815180845260208085019450808401835b83811015613f7a578151151587529582019590820190600101613f5c565b509495945050505050565b6000815180845260208085019450808401835b83811015613f7a57815187529582019590820190600101613f98565b60008151808452815b81811015613fd957602081850181015186830182015201613fbd565b81811115613fea5782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03959095168552921515602085015290151560408401526060830152608082015260a00190565b60e08082528851908201819052600090602090610100840190828c01845b828110156140945781516001600160a01b03168452928401929084019060010161406f565b505050838103828501526140a8818b613f49565b91505082810360408401526140bd8189613f49565b905082810360608401526140d18188613f49565b905082810360808401526140e58187613f85565b905082810360a08401526140f98186613f85565b905082810360c084015261410d8185613f85565b9a9950505050505050505050565b901515815260200190565b60006101008a1515835260018060a01b038a166020840152881515604084015287151560608401528660808401528560a08401528060c084015261416c81840186613fb4565b91505082151560e08301529998505050505050505050565b600060208252613d4a6020830184613fb4565b60208082526024908201527f4f6e6c792073757065722061646d696e2063616e2061646420466565204164646040820152637265737360e01b606082015260800190565b60208082526035908201527f414b52555f57686974656c6973743a2063616c6c657220646f6573206e6f74206040820152746861766520746865204d616e6167657220726f6c6560581b606082015260800190565b60208082526024908201527f6f6e6c7920737570657241646d696e2063616e2064657374726f7920436f6e746040820152631c9858dd60e21b606082015260800190565b6020808252601e908201527f4f6e6c792073757065722061646d696e2063616e206164642061646d696e0000604082015260600190565b60208082526024908201527f53757065722061646d696e2063616e7420626520436f6e7472616374206164646040820152637265737360e01b606082015260800190565b60208082526028908201527f4f6e6c792073757065722061646d696e2063616e20616464207375622073757060408201526732b91030b236b4b760c11b606082015260800190565b60208082526028908201527f414b52555f41646d696e57686974656c6973743a20496e76616c696420204d6560408201526764696120726f6c6560c01b606082015260800190565b6020808252603a908201527f414b52555f41646d696e57686974656c6973743a2063616c6c657220646f657360408201527f206e6f74206861766520746865204d616e6167657220726f6c65000000000000606082015260800190565b6020808252602a908201527f414b52555f41646d696e57686974656c6973743a20496e76616c696420204d616040820152696e6167657220726f6c6560b01b606082015260800190565b6020808252601c908201527f506c6561736520456e7465722056616c69642055736572205479706500000000604082015260600190565b602080825260139082015272756e646566696e64206f776e657220726f6c6560681b604082015260600190565b60208082526021908201527f4f6e6c792073757065722061646d696e2063616e2072656d6f76652061646d696040820152603760f91b606082015260800190565b60208082526015908201527413db9b1e4818591b5a5b881a5cc8185b1b1bddd959605a1b604082015260600190565b602080825260129082015271756e646566696e642062616e6b20726f6c6560701b604082015260600190565b60208082526038908201527f414b52555f41646d696e57686974656c6973743a2063616c6c657220646f657360408201527f206e6f74206861766520746865206d6564696120726f6c650000000000000000606082015260800190565b60208082526041908201527f6163637265646174696f6e4578706972793a204163637265646174696f6e204560408201527f78706972792074696d65206973206265666f72652063757272656e742074696d6060820152606560f81b608082015260a00190565b602080825260139082015272756e646566696e642061646d696e20726f6c6560681b604082015260600190565b90815260200190565b60028104600182168061463457607f821691505b60208210811415612c3e57634e487b7160e01b600052602260045260246000fd5b600060001982141561467557634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fdfea26469706673582212204d3627a75cf0037cc5a356acf491a6937ad35ca0df72c12a5238855aa184062764736f6c63430008000033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading