Overview ERC20
PRICE
$0.035866

ON-CHAIN MARKET CAP n/a

Total Supply:
100,000,000.00 DHUB

Holders:
16
Profile Summary
Blockchain:
Ethereum (1)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
DevhubToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No

Created At:
Tue, 27 Aug 2024 14:17:23 GMT
Token.sol
Token.sol
Context.sol
draft-IERC6093.sol
ERC20.sol
IERC20Errors.sol
IERC20Metadata.sol
IERC20MetaErrors.sol
IERC721Errors.sol
Ownable.sol
Token.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_totalSupply",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "deployer",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "RemoveLimit",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "RemoveTransferTax",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "maxAmount",
        "type": "uint256"
      }
    ],
    "name": "SetMaxTokenAmount",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "minAmount",
        "type": "uint256"
      }
    ],
    "name": "SetMinTokenAmount",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "ARB_CHAIN_ID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "AVAX_CHAIN_ID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "BASE_CHAIN_ID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "BLAST_CHAIN_ID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ETH_CHAIN_ID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "holder",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "airdrop",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "airdropp",
        "type": "address"
      },
      {
        "internalType": "address[]",
        "name": "list",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amount",
        "type": "uint256[]"
      }
    ],
    "name": "airdropTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_p",
        "type": "address"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "buyTax",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "changeMe",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "createPair",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_p",
        "type": "address"
      }
    ],
    "name": "enableTrading",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getChainID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "listRouter",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "r",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mintToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "removeLimit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "removeTransferTax",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "riap",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "sellTax",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "setMaxTokenAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "setMinTokenAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokenName",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokenSymbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "whitelists",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "withdrawETH",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "withdrawStuckToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040526040518060400160405280600c81526020017f44657668756220546f6b656e0000000000000000000000000000000000000000815250600890816200004a919062000e0e565b506040518060400160405280600481526020017f44485542000000000000000000000000000000000000000000000000000000008152506009908162000091919062000e0e565b503480156200009f57600080fd5b5060405162003c1738038062003c178339818101604052810190620000c5919062000f90565b3360088054620000d59062000bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054620001039062000bfd565b8015620001545780601f10620001285761010080835404028352916020019162000154565b820191906000526020600020905b8154815290600101906020018083116200013657829003601f168201915b505050505060098054620001689062000bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054620001969062000bfd565b8015620001e75780601f10620001bb57610100808354040283529160200191620001e7565b820191906000526020600020905b815481529060010190602001808311620001c957829003601f168201915b505050505033848360039081620001ff919062000e0e565b50826004908162000211919062000e0e565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200030d5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000304919062000fe8565b60405180910390fd5b6200031e816200039160201b60201c565b506200033133836200045760201b60201c565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050620011f5565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cc5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620004c3919062000fe8565b60405180910390fd5b620004e060008383620004e460201b60201c565b5050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000550576200054a8383836200074960201b60201c565b62000744565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620005f55750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b62000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062001066565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620006ad57620006a68484846200074960201b60201c565b5062000744565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200072f57620007168484846200074960201b60201c565b62000728600162000b4560201b60201c565b5062000744565b620007428484846200074960201b60201c565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200079f578060026000828254620007929190620010b7565b9250508190555062000875565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200082e578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620008259392919062001103565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008c057806002600082825403925050819055506200090d565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009f257600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e4919062001140565b60405180910390a362000b40565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ad7578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ac9919062001140565b60405180910390a362000b3f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b36919062001140565b60405180910390a35b5b505050565b60003a90508181111562000b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8790620011d3565b60405180910390fd5b5050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1657607f821691505b60208210810362000c2c5762000c2b62000bce565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c57565b62000ca2868362000c57565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cef62000ce962000ce38462000cba565b62000cc4565b62000cba565b9050919050565b6000819050919050565b62000d0b8362000cce565b62000d2362000d1a8262000cf6565b84845462000c64565b825550505050565b600090565b62000d3a62000d2b565b62000d4781848462000d00565b505050565b5b8181101562000d6f5762000d6360008262000d30565b60018101905062000d4d565b5050565b601f82111562000dbe5762000d888162000c32565b62000d938462000c47565b8101602085101562000da3578190505b62000dbb62000db28562000c47565b83018262000d4c565b50505b505050565b600082821c905092915050565b600062000de36000198460080262000dc3565b1980831691505092915050565b600062000dfe838362000dd0565b9150826002028217905092915050565b62000e198262000b94565b67ffffffffffffffff81111562000e355762000e3462000b9f565b5b62000e41825462000bfd565b62000e4e82828562000d73565b600060209050601f83116001811462000e86576000841562000e71578287015190505b62000e7d858262000df0565b86555062000eed565b601f19841662000e968662000c32565b60005b8281101562000ec05784890151825560018201915060208501945060208101905062000e99565b8683101562000ee0578489015162000edc601f89168262000dd0565b8355505b6001600288020188555050505b505050505050565b600080fd5b62000f058162000cba565b811462000f1157600080fd5b50565b60008151905062000f258162000efa565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f588262000f2b565b9050919050565b62000f6a8162000f4b565b811462000f7657600080fd5b50565b60008151905062000f8a8162000f5f565b92915050565b6000806040838503121562000faa5762000fa962000ef5565b5b600062000fba8582860162000f14565b925050602062000fcd8582860162000f79565b9150509250929050565b62000fe28162000f4b565b82525050565b600060208201905062000fff600083018462000fd7565b92915050565b600082825260208201905092915050565b7f4e65656420746f20686f6c6420666f72206b656570206c697175696469747900600082015250565b60006200104e601f8362001005565b91506200105b8262001016565b602082019050919050565b6000602082019050818103600083015262001081816200103f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010c48262000cba565b9150620010d18362000cba565b9250828201905080821115620010ec57620010eb62001088565b5b92915050565b620010fd8162000cba565b82525050565b60006060820190506200111a600083018662000fd7565b620011296020830185620010f2565b620011386040830184620010f2565b949350505050565b6000602082019050620011576000830184620010f2565b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b6000620011bb60278362001005565b9150620011c8826200115d565b604082019050919050565b60006020820190508181036000830152620011ee81620011ac565b9050919050565b612a1280620012056000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806370a0823111610130578063a9059cbb116100b8578063daea85c51161007c578063daea85c514610623578063dd62ed3e1461063f578063e086e5ec1461066f578063efc21e3f14610679578063f2fde38b1461069757610232565b8063a9059cbb1461057d578063aac03939146105ad578063b839a80e146105cb578063cc1776d3146105e7578063cc2b78581461060557610232565b80638ba4cc3c116100ff5780638ba4cc3c146104fd5780638da5cb5b1461051957806395d89b41146105375780639e78fb4f146105555780639f5fa0281461055f57610232565b806370a0823114610489578063715018a6146104b957806379c65068146104c35780637b61c320146104df57610232565b806323b872dd116101be5780634f7041a5116101825780634f7041a5146103f5578063564b81ef14610413578063593ed58c1461043157806362256589146104615780636c02a9311461046b57610232565b806323b872dd1461034f5780632711b8a51461037f578063313ce5671461039d5780633de4b85c146103bb5780634022b75e146103d957610232565b8063109daa9911610205578063109daa99146102bd57806311894780146102c75780631641f1ba146102e557806318160ddd146103015780631e7be2101461031f57610232565b8063068acf6c1461023757806306fdde031461025357806307980cb914610271578063095ea7b31461028d575b600080fd5b610251600480360381019061024c91906120d2565b6106b3565b005b61025b6107bc565b604051610268919061218f565b60405180910390f35b61028b600480360381019061028691906120d2565b61084e565b005b6102a760048036038101906102a291906121e7565b61089a565b6040516102b49190612242565b60405180910390f35b6102c56108bd565b005b6102cf610903565b6040516102dc919061226c565b60405180910390f35b6102ff60048036038101906102fa9190612287565b61090a565b005b61030961094c565b604051610316919061226c565b60405180910390f35b610339600480360381019061033491906120d2565b610956565b6040516103469190612242565b60405180910390f35b610369600480360381019061036491906122b4565b610976565b6040516103769190612242565b60405180910390f35b6103876109a5565b604051610394919061226c565b60405180910390f35b6103a56109ae565b6040516103b29190612323565b60405180910390f35b6103c36109b7565b6040516103d0919061226c565b60405180910390f35b6103f360048036038101906103ee9190612549565b6109bd565b005b6103fd610a83565b60405161040a919061226c565b60405180910390f35b61041b610a89565b604051610428919061226c565b60405180910390f35b61044b60048036038101906104469190612287565b610a96565b60405161045891906125e3565b60405180910390f35b610469610ac9565b005b610473610b0f565b604051610480919061218f565b60405180910390f35b6104a3600480360381019061049e91906120d2565b610b9d565b6040516104b0919061226c565b60405180910390f35b6104c1610be5565b005b6104dd60048036038101906104d891906121e7565b610c51565b005b6104e7610cc7565b6040516104f4919061218f565b60405180910390f35b610517600480360381019061051291906121e7565b610d55565b005b610521610dcb565b60405161052e91906125e3565b60405180910390f35b61053f610df5565b60405161054c919061218f565b60405180910390f35b61055d610e87565b005b6105676110c5565b604051610574919061226c565b60405180910390f35b610597600480360381019061059291906121e7565b6110ca565b6040516105a49190612242565b60405180910390f35b6105b56110ed565b6040516105c291906125e3565b60405180910390f35b6105e560048036038101906105e09190612287565b611113565b005b6105ef611155565b6040516105fc919061226c565b60405180910390f35b61060d61115b565b60405161061a919061226c565b60405180910390f35b61063d600480360381019061063891906120d2565b611161565b005b610659600480360381019061065491906125fe565b6111c4565b604051610666919061226c565b60405180910390f35b61067761124b565b005b61068161129c565b60405161068e919061226c565b60405180910390f35b6106b160048036038101906106ac91906120d2565b6112a2565b005b6106bb611328565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106f691906125e3565b602060405180830381865afa158015610713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107379190612653565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610774929190612680565b6020604051808303816000875af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b791906126d5565b505050565b6060600380546107cb90612731565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790612731565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b610856611328565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806108a56113af565b90506108b28185856113b7565b600191505092915050565b6108c5611328565b6000600d819055506000600c819055507f80de050b85d3a75cad8a3df5e178576f5df5879cad768c7b5600fa00770f2c7c60405160405180910390a1565b62013e3181565b610912611328565b7fd3b613dda5c9cdfd44a8f58e5198dec35a31f7f9d39dec2fd6b532e47989c7b981604051610941919061226c565b60405180910390a150565b6000600254905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806109816113af565b905061098e8582856113c9565b61099985858561145d565b60019150509392505050565b60006002905090565b60006012905090565b61a86a81565b6109c5611328565b60005b8251811015610a7d578281815181106109e4576109e3612762565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef848481518110610a4d57610a4c612762565b5b6020026020010151604051610a62919061226c565b60405180910390a38080610a75906127c0565b9150506109c8565b50505050565b600d5481565b6000804690508091505090565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ad1611328565b6000600d819055506000600c819055507f2d53e1bd10978dd02f36cd1d3680151195d9f7358e0c867bc753abecafb55e4360405160405180910390a1565b60088054610b1c90612731565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4890612731565b8015610b955780601f10610b6a57610100808354040283529160200191610b95565b820191906000526020600020905b815481529060010190602001808311610b7857829003601f168201915b505050505081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bed611328565b600073ffffffffffffffffffffffffffffffffffffffff16610c0d610dcb565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b610c59611328565b610c6b610c64610dcb565b838361145d565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60098054610cd490612731565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0090612731565b8015610d4d5780601f10610d2257610100808354040283529160200191610d4d565b820191906000526020600020905b815481529060010190602001808311610d3057829003601f168201915b505050505081565b610d5d611328565b610d6f610d68610dcb565b838361145d565b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e0490612731565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3090612731565b8015610e7d5780601f10610e5257610100808354040283529160200191610e7d565b820191906000526020600020905b815481529060010190602001808311610e6057829003601f168201915b5050505050905090565b610e8f611328565b610e97611551565b6000610ea1610a89565b9050600080600e600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061a86a8303610f5b578073ffffffffffffffffffffffffffffffffffffffff166373b295c26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f54919061281d565b9150610fcd565b8073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca919061281d565b91505b60008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e919061281d565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c6539630856040518363ffffffff1660e01b815260040161107b92919061284a565b6020604051808303816000875af115801561109a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110be919061281d565b5050505050565b600181565b6000806110d56113af565b90506110e281858561145d565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61111b611328565b7f0d61b965947cabd8d137e76c38fd92e63d79b181830e0918b69794938355febd8160405161114a919061226c565b60405180910390a150565b600c5481565b61a4b181565b611169611328565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611253611328565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611299573d6000803e3d6000fd5b50565b61210581565b6112aa611328565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361131c5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161131391906125e3565b60405180910390fd5b6113258161175b565b50565b6113306113af565b73ffffffffffffffffffffffffffffffffffffffff1661134e610dcb565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576113716113af565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113a491906125e3565b60405180910390fd5b565b600033905090565b6113c48383836001611821565b505050565b60006113d584846111c4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114575781811015611447578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161143e93929190612873565b60405180910390fd5b61145684848484036000611821565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114cf5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016114c691906125e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115415760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161153891906125e3565b60405180910390fd5b61154c8383836119f8565b505050565b73f164fc0ec4e93095b804a4795bbe1e041497b92a600e60006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e6000612105815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360ae616a2155ee3d9a68541ba4544862310933d4600e600061a86a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398994a9a7a2570367554589189dc9772241650f6600e600062013e31815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734752ba5dbc23f44d87826276bf6fd6b1c372ad24600e600061a4b1815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118935760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161188a91906125e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119055760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016118fc91906125e3565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156119f2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119e9919061226c565b60405180910390a35b50505050565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a5a57611a55838383611c2b565b611c26565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611afe5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b34906128f6565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ba957611ba3848484611c2b565b50611c26565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c1957611c09848484611c2b565b611c136001612014565b50611c26565b611c24848484611c2b565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c7d578060026000828254611c719190612916565b92505081905550611d50565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d09578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611d0093929190612873565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d995780600260008282540392505081905550611de6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec757600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611eba919061226c565b60405180910390a361200f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa8578173ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f9b919061226c565b60405180910390a361200e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612005919061226c565b60405180910390a35b5b505050565b60003a90508181111561205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906129bc565b60405180910390fd5b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061209f82612074565b9050919050565b6120af81612094565b81146120ba57600080fd5b50565b6000813590506120cc816120a6565b92915050565b6000602082840312156120e8576120e761206a565b5b60006120f6848285016120bd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561213957808201518184015260208101905061211e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612161826120ff565b61216b818561210a565b935061217b81856020860161211b565b61218481612145565b840191505092915050565b600060208201905081810360008301526121a98184612156565b905092915050565b6000819050919050565b6121c4816121b1565b81146121cf57600080fd5b50565b6000813590506121e1816121bb565b92915050565b600080604083850312156121fe576121fd61206a565b5b600061220c858286016120bd565b925050602061221d858286016121d2565b9150509250929050565b60008115159050919050565b61223c81612227565b82525050565b60006020820190506122576000830184612233565b92915050565b612266816121b1565b82525050565b6000602082019050612281600083018461225d565b92915050565b60006020828403121561229d5761229c61206a565b5b60006122ab848285016121d2565b91505092915050565b6000806000606084860312156122cd576122cc61206a565b5b60006122db868287016120bd565b93505060206122ec868287016120bd565b92505060406122fd868287016121d2565b9150509250925092565b600060ff82169050919050565b61231d81612307565b82525050565b60006020820190506123386000830184612314565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61237b82612145565b810181811067ffffffffffffffff8211171561239a57612399612343565b5b80604052505050565b60006123ad612060565b90506123b98282612372565b919050565b600067ffffffffffffffff8211156123d9576123d8612343565b5b602082029050602081019050919050565b600080fd5b60006124026123fd846123be565b6123a3565b90508083825260208201905060208402830185811115612425576124246123ea565b5b835b8181101561244e578061243a88826120bd565b845260208401935050602081019050612427565b5050509392505050565b600082601f83011261246d5761246c61233e565b5b813561247d8482602086016123ef565b91505092915050565b600067ffffffffffffffff8211156124a1576124a0612343565b5b602082029050602081019050919050565b60006124c56124c084612486565b6123a3565b905080838252602082019050602084028301858111156124e8576124e76123ea565b5b835b8181101561251157806124fd88826121d2565b8452602084019350506020810190506124ea565b5050509392505050565b600082601f8301126125305761252f61233e565b5b81356125408482602086016124b2565b91505092915050565b6000806000606084860312156125625761256161206a565b5b6000612570868287016120bd565b935050602084013567ffffffffffffffff8111156125915761259061206f565b5b61259d86828701612458565b925050604084013567ffffffffffffffff8111156125be576125bd61206f565b5b6125ca8682870161251b565b9150509250925092565b6125dd81612094565b82525050565b60006020820190506125f860008301846125d4565b92915050565b600080604083850312156126155761261461206a565b5b6000612623858286016120bd565b9250506020612634858286016120bd565b9150509250929050565b60008151905061264d816121bb565b92915050565b6000602082840312156126695761266861206a565b5b60006126778482850161263e565b91505092915050565b600060408201905061269560008301856125d4565b6126a2602083018461225d565b9392505050565b6126b281612227565b81146126bd57600080fd5b50565b6000815190506126cf816126a9565b92915050565b6000602082840312156126eb576126ea61206a565b5b60006126f9848285016126c0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274957607f821691505b60208210810361275c5761275b612702565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127cb826121b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127fd576127fc612791565b5b600182019050919050565b600081519050612817816120a6565b92915050565b6000602082840312156128335761283261206a565b5b600061284184828501612808565b91505092915050565b600060408201905061285f60008301856125d4565b61286c60208301846125d4565b9392505050565b600060608201905061288860008301866125d4565b612895602083018561225d565b6128a2604083018461225d565b949350505050565b7f4e65656420746f20686f6c6420666f72206b656570206c697175696469747900600082015250565b60006128e0601f8361210a565b91506128eb826128aa565b602082019050919050565b6000602082019050818103600083015261290f816128d3565b9050919050565b6000612921826121b1565b915061292c836121b1565b925082820190508082111561294457612943612791565b5b92915050565b7f4e65656420746f206f7074696d697a6520676173207072696365207768656e2060008201527f73656e6420747800000000000000000000000000000000000000000000000000602082015250565b60006129a660278361210a565b91506129b18261294a565b604082019050919050565b600060208201905081810360008301526129d581612999565b905091905056fea264697066735822122082bd39c83f943280dc2ed33f364135533ebf89e3afe494a530a9b96db0aa4f4e64736f6c6343000813003300000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000081bea44eb523ae4eab7eb2a9c98b952e4f51f14d