Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set TB Sign | 6261426 | 154 days ago | IN | 0 ETH | 0.00028191 |
Loading...
Loading
Contract Name:
TBDMS
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.19; import "@openzeppelin/contracts/access/Ownable.sol"; interface ITBSign { function verify( address, uint256, string memory, bytes memory ) external view returns (bool); function increaseNonce(address) external; } contract TBDMS is Ownable { address public tbsign; enum RequestStatus { PENDING, CONFIRMED, REVOKED } struct CollabInfo { address collab; string role; } struct DocInfo { address creator; string cid; CollabInfo[] collabs; uint256 currentReqId; bool isConfirmed; uint256 createdDate; } struct RequestInfo { uint256 docId; address collab; string cid; uint8 confirmNumber; RequestStatus status; } struct UserInfo { string name; string company; } uint256 public docID; uint256 public requestID; mapping(uint256 docId => DocInfo) public docList; mapping(uint256 reqId => RequestInfo) public requestList; mapping(uint256 docId => mapping(address collab => bool)) public isSigned; mapping(uint256 reqId => mapping(address collab => RequestStatus)) public collabDecisionOnRequest; mapping(address user => UserInfo) public users; mapping(address user => bool) public isRegistered; mapping(uint256 docId => mapping(address collab => uint8 index)) public docCollabIndex; event AddESign(address collab, uint256 docId, string cid); event ConfirmDocUpdate(address collab, uint256 docId, string cid); event ConfirmRequest(address collab, uint256 reqId); event DelCollab(uint256 docId, address collab); event DocFinalized(uint256 docId); event NewCollab(uint256 docId, CollabInfo collab); event NewDoc( address creator, string title, CollabInfo[] collabs, uint256 docId, uint256 reqId, string cid ); event NewUser(address user, string name, string company); event RequestConfirmed(uint256 reqId); event RequestDocUpdate( address collab, uint256 docId, uint256 reqId, string cid ); event RevokeDocUpdate(address collab, uint256 docId); event RevokeRequest(address collab, uint256 reqId); event UpdateUser(address user, string name, string company); modifier onlyDocCollab(uint256 docId) { require( isCollab(docId, msg.sender), "You are not the collab of that DOC!" ); _; } modifier notConfirmedRequest(uint256 reqId) { require( collabDecisionOnRequest[reqId][msg.sender] == RequestStatus.PENDING, "You already confirmed that request!" ); _; } modifier notConfirmedDoc(uint256 docId) { require(!docList[docId].isConfirmed, "Already confirmed document!"); _; } modifier isOnRequest(uint256 reqId) { require( docList[requestList[reqId].docId].currentReqId == reqId, "Not on that request!" ); _; } modifier onlyDocCreator(uint256 docId) { require( docList[docId].creator == msg.sender, "You are not the doc creator!" ); _; } constructor() Ownable(msg.sender) {} function createDoc( CollabInfo[] memory collabs, string memory title, string memory cid, bytes memory signature ) external { require( ITBSign(tbsign).verify(msg.sender, 0, cid, signature), "Invalid Signature!" ); require(collabs.length <= type(uint8).max, "Too many collabs!"); docID++; requestID++; docList[docID].creator = msg.sender; docList[docID].cid = cid; docList[docID].currentReqId = requestID; docList[docID].createdDate = block.timestamp; for (uint8 i; i < collabs.length; ++i) { docList[docID].collabs.push(collabs[i]); docCollabIndex[docID][collabs[i].collab] = i + 1; } requestList[requestID] = RequestInfo( docID, msg.sender, cid, 1, RequestStatus.PENDING ); collabDecisionOnRequest[requestID][msg.sender] = RequestStatus .CONFIRMED; ITBSign(tbsign).increaseNonce(msg.sender); emit NewDoc(msg.sender, title, collabs, docID, requestID, cid); } function confirmRequest( uint256 reqId ) external onlyDocCollab(requestList[reqId].docId) notConfirmedRequest(reqId) { requestList[reqId].confirmNumber++; collabDecisionOnRequest[reqId][msg.sender] = RequestStatus.CONFIRMED; uint256 docId = requestList[reqId].docId; DocInfo storage doc = docList[docId]; uint8 collabsNumber = uint8(doc.collabs.length); emit ConfirmRequest(msg.sender, reqId); if (requestList[reqId].confirmNumber == collabsNumber) { requestList[reqId].status = RequestStatus.CONFIRMED; emit RequestConfirmed(reqId); } } function revokeRequest( uint256 reqId ) external onlyDocCollab(requestList[reqId].docId) notConfirmedRequest(reqId) { collabDecisionOnRequest[reqId][msg.sender] = RequestStatus.REVOKED; requestList[reqId].status = RequestStatus.REVOKED; emit RevokeRequest(msg.sender, reqId); } function confirmDocContent( uint256 reqId ) external onlyDocCollab(requestList[reqId].docId) notConfirmedDoc(requestList[reqId].docId) isOnRequest(reqId) { uint256 docId = requestList[reqId].docId; docList[docId].cid = requestList[reqId].cid; docList[docId].currentReqId = 0; emit ConfirmDocUpdate(msg.sender, docId, requestList[reqId].cid); } function revokeDocContent( uint256 reqId ) external onlyDocCollab(requestList[reqId].docId) notConfirmedDoc(requestList[reqId].docId) isOnRequest(reqId) { uint256 docId = requestList[reqId].docId; docList[docId].currentReqId = 0; emit RevokeDocUpdate(msg.sender, docId); } function requestDocUpdate( uint256 docId, string memory _cid, bytes memory _signature ) external onlyDocCollab(docId) { require(!docList[docId].isConfirmed, "Already confirmed Doc!"); require(docList[docId].currentReqId == 0, "Already on update!"); require( ITBSign(tbsign).verify(msg.sender, docId, _cid, _signature), "Invalid Signature!" ); ITBSign(tbsign).increaseNonce(msg.sender); requestID++; requestList[requestID] = RequestInfo( docId, msg.sender, _cid, 1, RequestStatus.PENDING ); collabDecisionOnRequest[requestID][msg.sender] = RequestStatus .CONFIRMED; docList[docId].currentReqId = requestID; emit RequestDocUpdate(msg.sender, docId, requestID, _cid); } function finalizeDocContent(uint256 docId) external onlyDocCreator(docId) { docList[docId].isConfirmed = true; emit DocFinalized(docId); } function addESign( uint256 docId, string memory _signCid, bytes memory _signature ) external onlyDocCollab(docId) { require(docList[docId].isConfirmed, "Have to confirm doc before sign!"); require(!isSigned[docId][msg.sender], "You already signed!"); require( ITBSign(tbsign).verify(msg.sender, docId, _signCid, _signature), "Invalid Signature!" ); isSigned[docId][msg.sender] = true; emit AddESign(msg.sender, docId, _signCid); } function isCollab( uint256 docId, address collab ) public view returns (bool) { return docCollabIndex[docId][collab] != 0; } function registerUser(string memory name, string memory company) external { require(!isRegistered[msg.sender], "You are already registered!"); users[msg.sender] = UserInfo(name, company); isRegistered[msg.sender] = true; emit NewUser(msg.sender, name, company); } function editUser(string memory name, string memory company) external { require(isRegistered[msg.sender], "You are not registered!"); users[msg.sender].name = name; users[msg.sender].company = company; emit UpdateUser(msg.sender, name, company); } function addCollab( uint256 docId, CollabInfo memory collab ) external onlyDocCreator(docId) notConfirmedDoc(docId) { require(!isCollab(docId, collab.collab), "It's already a collab!"); CollabInfo[] storage collabs = docList[docId].collabs; require(collabs.length < type(uint8).max, "Can't add more collab!"); collabs.push(collab); docCollabIndex[docId][collab.collab] = uint8(collabs.length); emit NewCollab(docId, collab); } function removeCollab( uint256 docId, address collab ) external onlyDocCreator(docId) notConfirmedDoc(docId) { require(isCollab(docId, collab), "It's not a collab!"); CollabInfo[] storage collabs = docList[docId].collabs; uint8 currentIndex = docCollabIndex[docId][collab]; CollabInfo memory lastCollab = collabs[collabs.length - 1]; collabs[currentIndex - 1] = lastCollab; collabs.pop(); docCollabIndex[docId][lastCollab.collab] = currentIndex; emit DelCollab(docId, collab); } function setTBSign(address _tbsign) external onlyOwner { tbsign = _tbsign; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"indexed":false,"internalType":"string","name":"cid","type":"string"}],"name":"AddESign","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"indexed":false,"internalType":"string","name":"cid","type":"string"}],"name":"ConfirmDocUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"ConfirmRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"indexed":false,"internalType":"address","name":"collab","type":"address"}],"name":"DelCollab","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"}],"name":"DocFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"components":[{"internalType":"address","name":"collab","type":"address"},{"internalType":"string","name":"role","type":"string"}],"indexed":false,"internalType":"struct TBDMS.CollabInfo","name":"collab","type":"tuple"}],"name":"NewCollab","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"title","type":"string"},{"components":[{"internalType":"address","name":"collab","type":"address"},{"internalType":"string","name":"role","type":"string"}],"indexed":false,"internalType":"struct TBDMS.CollabInfo[]","name":"collabs","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reqId","type":"uint256"},{"indexed":false,"internalType":"string","name":"cid","type":"string"}],"name":"NewDoc","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"company","type":"string"}],"name":"NewUser","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":[{"indexed":false,"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"RequestConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reqId","type":"uint256"},{"indexed":false,"internalType":"string","name":"cid","type":"string"}],"name":"RequestDocUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"docId","type":"uint256"}],"name":"RevokeDocUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collab","type":"address"},{"indexed":false,"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"RevokeRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"company","type":"string"}],"name":"UpdateUser","type":"event"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"components":[{"internalType":"address","name":"collab","type":"address"},{"internalType":"string","name":"role","type":"string"}],"internalType":"struct TBDMS.CollabInfo","name":"collab","type":"tuple"}],"name":"addCollab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"string","name":"_signCid","type":"string"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"addESign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"}],"name":"collabDecisionOnRequest","outputs":[{"internalType":"enum TBDMS.RequestStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"confirmDocContent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"confirmRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collab","type":"address"},{"internalType":"string","name":"role","type":"string"}],"internalType":"struct TBDMS.CollabInfo[]","name":"collabs","type":"tuple[]"},{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"createDoc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"}],"name":"docCollabIndex","outputs":[{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"docID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"}],"name":"docList","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"uint256","name":"currentReqId","type":"uint256"},{"internalType":"bool","name":"isConfirmed","type":"bool"},{"internalType":"uint256","name":"createdDate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"company","type":"string"}],"name":"editUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"}],"name":"finalizeDocContent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"}],"name":"isCollab","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"}],"name":"isSigned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"company","type":"string"}],"name":"registerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"}],"name":"removeCollab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"string","name":"_cid","type":"string"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"requestDocUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"requestList","outputs":[{"internalType":"uint256","name":"docId","type":"uint256"},{"internalType":"address","name":"collab","type":"address"},{"internalType":"string","name":"cid","type":"string"},{"internalType":"uint8","name":"confirmNumber","type":"uint8"},{"internalType":"enum TBDMS.RequestStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"revokeDocContent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reqId","type":"uint256"}],"name":"revokeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tbsign","type":"address"}],"name":"setTBSign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tbsign","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"users","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"company","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6129f180620000a66000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806393592cbe116100f9578063dc479bba11610097578063f2fde38b11610071578063f2fde38b1461042f578063f35e237b14610442578063fabaeb1814610455578063ff79e8b61461046857600080fd5b8063dc479bba146103d8578063e436426614610413578063e7d915cf1461041c57600080fd5b8063b024d3ce116100d3578063b024d3ce1461037c578063c2e66dfb1461038f578063c3c5a547146103a2578063d42cca15146103c557600080fd5b806393592cbe14610335578063a6b2c43714610348578063a87430ba1461035b57600080fd5b80636057744911610166578063757c075711610140578063757c0757146102d35780637f53afcb146102e65780638da5cb5b146102f95780638f7792011461031e57600080fd5b8063605774491461029457806369d7427d146102a7578063715018a6146102cb57600080fd5b806302e9d43b146101ae5780631d2e4afd146101db5780632d3ba33e146101f057806332a32c94146102305780633e6d21fa146102435780635b430cda14610281575b600080fd5b6101c16101bc366004611e0a565b61047b565b6040516101d2959493929190611ea1565b60405180910390f35b6101ee6101e9366004611fa4565b610542565b005b61021e6101fe366004612024565b600a60209081526000928352604080842090915290825290205460ff1681565b60405160ff90911681526020016101d2565b6101ee61023e3660046120c6565b610649565b610271610251366004612024565b600660209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101d2565b6101ee61028f366004611e0a565b610a51565b6101ee6102a23660046121f5565b610bc7565b6102ba6102b5366004611e0a565b610ece565b6040516101d2959493929190612262565b6101ee610f95565b6101ee6102e13660046122a3565b610fa9565b6101ee6102f43660046122e0565b61117d565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101d2565b61032760035481565b6040519081526020016101d2565b600154610306906001600160a01b031681565b6101ee610356366004611e0a565b6111a7565b61036e6103693660046122e0565b61135b565b6040516101d2929190612302565b6101ee61038a3660046121f5565b611487565b61027161039d366004612024565b61165a565b6102716103b03660046122e0565b60096020526000908152604090205460ff1681565b6101ee6103d3366004612024565b611689565b6104066103e6366004612024565b600760209081526000928352604080842090915290825290205460ff1681565b6040516101d29190612330565b61032760025481565b6101ee61042a366004611e0a565b611982565b6101ee61043d3660046122e0565b611a82565b6101ee610450366004611fa4565b611ac0565b6101ee610463366004611e0a565b611b89565b6101ee610476366004611e0a565b611cb9565b60056020526000908152604090208054600182015460028301805492936001600160a01b03909216926104ad9061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546104d99061233e565b80156105265780601f106104fb57610100808354040283529160200191610526565b820191906000526020600020905b81548152906001019060200180831161050957829003601f168201915b5050506003909301549192505060ff8082169161010090041685565b3360009081526009602052604090205460ff16156105a75760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520616c7265616479207265676973746572656421000000000060448201526064015b60405180910390fd5b6040805180820182528381526020808201849052336000908152600890915291909120815181906105d890826123c3565b50602082015160018201906105ed90826123c3565b50503360008181526009602052604090819020805460ff19166001179055517f4ddffe5495169d350d09d432b0c9ffb9156ae79ccd81b2113fca4bbea47f1bda925061063d919085908590612483565b60405180910390a15050565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e4890610680903390600090879087906004016124b9565b602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c191906124fd565b6106dd5760405162461bcd60e51b815260040161059e9061251f565b835160ff10156107235760405162461bcd60e51b8152602060048201526011602482015270546f6f206d616e7920636f6c6c6162732160781b604482015260640161059e565b6002805490600061073383612561565b90915550506003805490600061074883612561565b90915550506002805460009081526004602052604080822080546001600160a01b03191633179055915481522060010161078283826123c3565b50600380546002805460009081526004602052604080822090940192909255548152908120426005909101555b84518160ff1610156108c057600460006002548152602001908152602001600020600201858260ff16815181106107e8576107e861257a565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b0390921691909117815591810151909282019061083e90826123c3565b50505080600161084e9190612590565b600a600060025481526020019081526020016000206000878460ff168151811061087a5761087a61257a565b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191660ff929092169190911790556108b9816125a9565b90506107af565b506040805160a081018252600254815233602082015290810183905260016060820152608081016000905260035460009081526005602090815260409182902083518155908301516001820180546001600160a01b0319166001600160a01b0390921691909117905590820151600282019061093c90826123c3565b50606082015160038201805460ff90921660ff1983168117825560808501519261ffff19161761010083600281111561097757610977611e69565b0217905550506003546000908152600760209081526040808320338452909152902080546001925060ff191682800217905550600154604051632091ea5f60e21b81523360048201526001600160a01b0390911690638247a97c90602401600060405180830381600087803b1580156109ef57600080fd5b505af1158015610a03573d6000803e3d6000fd5b50506002546003546040517f2b4587bc06ed8e0680a5e4250ea9f92fad5213927711d30cc22436a41d710eb39450610a439350339288928a9289906125f7565b60405180910390a150505050565b600081815260056020526040902054610a6a813361165a565b610a865760405162461bcd60e51b815260040161059e9061269b565b6000828152600560209081526040808320548084526004928390529220015460ff1615610ac55760405162461bcd60e51b815260040161059e906126de565b6000838152600560209081526040808320548352600490915290206003015483908114610b2b5760405162461bcd60e51b81526020600482015260146024820152734e6f74206f6e207468617420726571756573742160601b604482015260640161059e565b60008481526005602090815260408083208054808552600490935292209091600190910190610b5d9060020182612715565b50600081815260046020908152604080832060030183905587835260059091529081902090517ff2a85f7a294675c2b60bbccaa6dae2668ceacb6943568399f2e8d7bd41b0025091610bb891339185916002909101906127f0565b60405180910390a15050505050565b82610bd2813361165a565b610bee5760405162461bcd60e51b815260040161059e9061269b565b6000848152600460208190526040909120015460ff1615610c4a5760405162461bcd60e51b8152602060048201526016602482015275416c726561647920636f6e6669726d656420446f632160501b604482015260640161059e565b60008481526004602052604090206003015415610c9e5760405162461bcd60e51b8152602060048201526012602482015271416c7265616479206f6e207570646174652160701b604482015260640161059e565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e4890610cd49033908890889088906004016124b9565b602060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906124fd565b610d315760405162461bcd60e51b815260040161059e9061251f565b600154604051632091ea5f60e21b81523360048201526001600160a01b0390911690638247a97c90602401600060405180830381600087803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b505060038054925090506000610d9f83612561565b90915550506040805160a08101825285815233602082015290810184905260016060820152608081016000905260035460009081526005602090815260409182902083518155908301516001820180546001600160a01b0319166001600160a01b03909216919091179055908201516002820190610e1d90826123c3565b50606082015160038201805460ff90921660ff1983168117825560808501519261ffff191617610100836002811115610e5857610e58611e69565b02179055505060038054600090815260076020908152604080832033808552908352818420805460ff1916600117905584548a855260049093529281902090930181905591517fa3a5b7198374ac273bf7616259b230f4831f8730600bc8a1760cf52baadf2c0a9350610a439288918890612892565b600460205260009081526040902080546001820180546001600160a01b039092169291610efa9061233e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f269061233e565b8015610f735780601f10610f4857610100808354040283529160200191610f73565b820191906000526020600020905b815481529060010190602001808311610f5657829003601f168201915b50505050600383015460048401546005909401549293909260ff909116915085565b610f9d611d3f565b610fa76000611d6c565b565b60008281526004602052604090205482906001600160a01b03163314610fe15760405162461bcd60e51b815260040161059e906128bf565b60008381526004602081905260409091200154839060ff16156110165760405162461bcd60e51b815260040161059e906126de565b61102484846000015161165a565b1561106a5760405162461bcd60e51b81526020600482015260166024820152754974277320616c7265616479206120636f6c6c61622160501b604482015260640161059e565b6000848152600460205260409020600201805460ff116110c55760405162461bcd60e51b815260206004820152601660248201527543616e277420616464206d6f726520636f6c6c61622160501b604482015260640161059e565b8054600180820183556000838152602090819020875160029094020180546001600160a01b0319166001600160a01b0390941693909317835586015186929182019061111190826123c3565b505081546000878152600a6020908152604080832089516001600160a01b0316845290915290819020805460ff191660ff90931692909217909155517f9231c7fb604793dfa63c72d99e55a81ad132a68360350cd72367d823b4481d369150610bb890879087906128f6565b611185611d3f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600560205260409020546111c0813361165a565b6111dc5760405162461bcd60e51b815260040161059e9061269b565b8160008082815260076020908152604080832033845290915290205460ff16600281111561120c5761120c611e69565b146112295760405162461bcd60e51b815260040161059e9061290f565b6000838152600560205260408120600301805460ff1691611249836125a9565b82546101009290920a60ff81810219909316919092169190910217905550600083815260076020908152604080832033808552908352818420805460ff19166001179055868452600583528184205480855260048452938290206002810154835192835293820188905292917ff63ea3eae557a7022ec4accf5dd3529a31d448603687447053e3b8919572b20e910160405180910390a160008681526005602052604090206003015460ff80831691160361135357600086815260056020908152604091829020600301805461010061ff001990911617905590518781527ff82a94675f90ef5361ee99a4fba4d5c46c7afffb3522499c668f74c496fb58e4910160405180910390a15b505050505050565b6008602052600090815260409020805481906113769061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546113a29061233e565b80156113ef5780601f106113c4576101008083540402835291602001916113ef565b820191906000526020600020905b8154815290600101906020018083116113d257829003601f168201915b5050505050908060010180546114049061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546114309061233e565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905082565b82611492813361165a565b6114ae5760405162461bcd60e51b815260040161059e9061269b565b6000848152600460208190526040909120015460ff166115105760405162461bcd60e51b815260206004820181905260248201527f4861766520746f20636f6e6669726d20646f63206265666f7265207369676e21604482015260640161059e565b600084815260066020908152604080832033845290915290205460ff16156115705760405162461bcd60e51b8152602060048201526013602482015272596f7520616c7265616479207369676e65642160681b604482015260640161059e565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e48906115a69033908890889088906004016124b9565b602060405180830381865afa1580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e791906124fd565b6116035760405162461bcd60e51b815260040161059e9061251f565b600084815260066020908152604080832033808552925291829020805460ff1916600117905590517fad1ef0f31a5a91874aa5ea96af9a36e32cbac60bcfe3ed547208774c457471fe91610a439187908790612952565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1615155b92915050565b60008281526004602052604090205482906001600160a01b031633146116c15760405162461bcd60e51b815260040161059e906128bf565b60008381526004602081905260409091200154839060ff16156116f65760405162461bcd60e51b815260040161059e906126de565b611700848461165a565b6117415760405162461bcd60e51b815260206004820152601260248201527149742773206e6f74206120636f6c6c61622160701b604482015260640161059e565b6000848152600460209081526040808320600a83528184206001600160a01b038816855290925282205460029091018054909260ff9092169190839061178990600190612979565b815481106117995761179961257a565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316825260018101805492939192918401916117d89061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546118049061233e565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b5050505050815250509050808360018461186b919061298c565b60ff168154811061187e5761187e61257a565b600091825260209182902083516002929092020180546001600160a01b0319166001600160a01b039092169190911781559082015160018201906118c290826123c3565b50905050828054806118d6576118d66129a5565b60008281526020812060026000199093019283020180546001600160a01b0319168155906119076001830182611dbc565b505090556000878152600a6020908152604080832084516001600160a01b03908116855290835292819020805460ff191660ff871617905580518a8152928916918301919091527f8f8ba90a3537bb5db73c92326b03d5cf9903a8c6ba588309512f287a9da0a7b4910160405180910390a150505050505050565b60008181526005602052604090205461199b813361165a565b6119b75760405162461bcd60e51b815260040161059e9061269b565b8160008082815260076020908152604080832033845290915290205460ff1660028111156119e7576119e7611e69565b14611a045760405162461bcd60e51b815260040161059e9061290f565b600083815260076020908152604080832033808552908352818420805460ff191660021790558684526005835292819020600301805461020061ff001990911617905580519283529082018590527fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd0910160405180910390a1505050565b611a8a611d3f565b6001600160a01b038116611ab457604051631e4fbdf760e01b81526000600482015260240161059e565b611abd81611d6c565b50565b3360009081526009602052604090205460ff16611b1f5760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f74207265676973746572656421000000000000000000604482015260640161059e565b336000908152600860205260409020611b3883826123c3565b50336000908152600860205260409020600101611b5582826123c3565b507f780d856ed9ea931025ba084067327ac59ec5901a2d40b1019936c4561eb66efb33838360405161063d93929190612483565b600081815260056020526040902054611ba2813361165a565b611bbe5760405162461bcd60e51b815260040161059e9061269b565b6000828152600560209081526040808320548084526004928390529220015460ff1615611bfd5760405162461bcd60e51b815260040161059e906126de565b6000838152600560209081526040808320548352600490915290206003015483908114611c635760405162461bcd60e51b81526020600482015260146024820152734e6f74206f6e207468617420726571756573742160601b604482015260640161059e565b600084815260056020908152604080832054808452600483528184206003019390935580513381529182018390527fd9168354e7488be9ffebf8f086c5d0a417368fc090dd17e987927b5e2bf75ded9101610bb8565b60008181526004602052604090205481906001600160a01b03163314611cf15760405162461bcd60e51b815260040161059e906128bf565b60008281526004602081905260409182902001805460ff19166001179055517f7bfc51787cf9b207191cae1618bc4b3ca9cadc6dfb5b920e569de8d4a847d0389061063d9084815260200190565b6000546001600160a01b03163314610fa75760405163118cdaa760e01b815233600482015260240161059e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054611dc89061233e565b6000825580601f10611dd8575050565b601f016020900490600052602060002090810190611abd91905b80821115611e065760008155600101611df2565b5090565b600060208284031215611e1c57600080fd5b5035919050565b6000815180845260005b81811015611e4957602081850181015186830182015201611e2d565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b60038110611e9d57634e487b7160e01b600052602160045260246000fd5b9052565b8581526001600160a01b038516602082015260a060408201819052600090611ecb90830186611e23565b905060ff84166060830152611ee36080830184611e7f565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f2c57611f2c611eed565b604052919050565b600082601f830112611f4557600080fd5b813567ffffffffffffffff811115611f5f57611f5f611eed565b611f72601f8201601f1916602001611f03565b818152846020838601011115611f8757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611fb757600080fd5b823567ffffffffffffffff80821115611fcf57600080fd5b611fdb86838701611f34565b93506020850135915080821115611ff157600080fd5b50611ffe85828601611f34565b9150509250929050565b80356001600160a01b038116811461201f57600080fd5b919050565b6000806040838503121561203757600080fd5b8235915061204760208401612008565b90509250929050565b60006040828403121561206257600080fd5b6040516040810167ffffffffffffffff828210818311171561208657612086611eed565b8160405282935061209685612008565b835260208501359150808211156120ac57600080fd5b506120b985828601611f34565b6020830152505092915050565b600080600080608085870312156120dc57600080fd5b843567ffffffffffffffff808211156120f457600080fd5b818701915087601f83011261210857600080fd5b813560208282111561211c5761211c611eed565b8160051b61212b828201611f03565b928352848101820192828101908c85111561214557600080fd5b83870192505b84831015612181578235868111156121635760008081fd5b6121718e86838b0101612050565b835250918301919083019061214b565b995050508801359250508082111561219857600080fd5b6121a488838901611f34565b945060408701359150808211156121ba57600080fd5b6121c688838901611f34565b935060608701359150808211156121dc57600080fd5b506121e987828801611f34565b91505092959194509250565b60008060006060848603121561220a57600080fd5b83359250602084013567ffffffffffffffff8082111561222957600080fd5b61223587838801611f34565b9350604086013591508082111561224b57600080fd5b5061225886828701611f34565b9150509250925092565b6001600160a01b038616815260a06020820181905260009061228690830187611e23565b604083019590955250911515606083015260809091015292915050565b600080604083850312156122b657600080fd5b82359150602083013567ffffffffffffffff8111156122d457600080fd5b611ffe85828601612050565b6000602082840312156122f257600080fd5b6122fb82612008565b9392505050565b6040815260006123156040830185611e23565b82810360208401526123278185611e23565b95945050505050565b602081016116838284611e7f565b600181811c9082168061235257607f821691505b60208210810361237257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156123be57600081815260208120601f850160051c8101602086101561239f5750805b601f850160051c820191505b81811015611353578281556001016123ab565b505050565b815167ffffffffffffffff8111156123dd576123dd611eed565b6123f1816123eb845461233e565b84612378565b602080601f831160018114612426576000841561240e5750858301515b600019600386901b1c1916600185901b178555611353565b600085815260208120601f198616915b8281101561245557888601518255948401946001909101908401612436565b50858210156124735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03841681526060602082018190526000906124a790830185611e23565b8281036040840152611ee38185611e23565b60018060a01b03851681528360208201526080604082015260006124e06080830185611e23565b82810360608401526124f28185611e23565b979650505050505050565b60006020828403121561250f57600080fd5b815180151581146122fb57600080fd5b602080825260129082015271496e76616c6964205369676e61747572652160701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016125735761257361254b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60ff81811683821601908111156116835761168361254b565b600060ff821660ff81036125bf576125bf61254b565b60010192915050565b60018060a01b03815116825260006020820151604060208501526125ef6040850182611e23565b949350505050565b6001600160a01b038716815260c0602080830182905260009161261c90840189611e23565b8381036040850152875180825282820190600581901b83018401848b0160005b8381101561266a57601f198684030185526126588383516125c8565b9487019492509086019060010161263c565b505089606088015288608088015286810360a088015261268a8189611e23565b9d9c50505050505050505050505050565b60208082526023908201527f596f7520617265206e6f742074686520636f6c6c6162206f66207468617420446040820152624f432160e81b606082015260800190565b6020808252601b908201527f416c726561647920636f6e6669726d656420646f63756d656e74210000000000604082015260600190565b818103612720575050565b61272a825461233e565b67ffffffffffffffff81111561274257612742611eed565b612750816123eb845461233e565b6000601f821160018114612784576000831561276c5750848201545b600019600385901b1c1916600184901b1784556127e9565b600085815260209020601f19841690600086815260209020845b838110156127be578286015482556001958601959091019060200161279e565b50858310156127dc5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b60018060a01b038416815260006020848184015260606040840152600084546128188161233e565b806060870152608060018084166000811461283a576001811461285457612882565b60ff1985168984015283151560051b890183019550612882565b896000528660002060005b8581101561287a5781548b820186015290830190880161285f565b8a0184019650505b50939a9950505050505050505050565b60018060a01b0385168152836020820152826040820152608060608201526000611ee36080830184611e23565b6020808252601c908201527f596f7520617265206e6f742074686520646f632063726561746f722100000000604082015260600190565b8281526040602082015260006125ef60408301846125c8565b60208082526023908201527f596f7520616c726561647920636f6e6669726d6564207468617420726571756560408201526273742160e81b606082015260800190565b60018060a01b03841681528260208201526060604082015260006123276060830184611e23565b818103818111156116835761168361254b565b60ff82811682821603908111156116835761168361254b565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f7e1ba275c98da5f01c6b37af3854aca92e53099d9937444ae7a8276da9768a864736f6c63430008140033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806393592cbe116100f9578063dc479bba11610097578063f2fde38b11610071578063f2fde38b1461042f578063f35e237b14610442578063fabaeb1814610455578063ff79e8b61461046857600080fd5b8063dc479bba146103d8578063e436426614610413578063e7d915cf1461041c57600080fd5b8063b024d3ce116100d3578063b024d3ce1461037c578063c2e66dfb1461038f578063c3c5a547146103a2578063d42cca15146103c557600080fd5b806393592cbe14610335578063a6b2c43714610348578063a87430ba1461035b57600080fd5b80636057744911610166578063757c075711610140578063757c0757146102d35780637f53afcb146102e65780638da5cb5b146102f95780638f7792011461031e57600080fd5b8063605774491461029457806369d7427d146102a7578063715018a6146102cb57600080fd5b806302e9d43b146101ae5780631d2e4afd146101db5780632d3ba33e146101f057806332a32c94146102305780633e6d21fa146102435780635b430cda14610281575b600080fd5b6101c16101bc366004611e0a565b61047b565b6040516101d2959493929190611ea1565b60405180910390f35b6101ee6101e9366004611fa4565b610542565b005b61021e6101fe366004612024565b600a60209081526000928352604080842090915290825290205460ff1681565b60405160ff90911681526020016101d2565b6101ee61023e3660046120c6565b610649565b610271610251366004612024565b600660209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101d2565b6101ee61028f366004611e0a565b610a51565b6101ee6102a23660046121f5565b610bc7565b6102ba6102b5366004611e0a565b610ece565b6040516101d2959493929190612262565b6101ee610f95565b6101ee6102e13660046122a3565b610fa9565b6101ee6102f43660046122e0565b61117d565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101d2565b61032760035481565b6040519081526020016101d2565b600154610306906001600160a01b031681565b6101ee610356366004611e0a565b6111a7565b61036e6103693660046122e0565b61135b565b6040516101d2929190612302565b6101ee61038a3660046121f5565b611487565b61027161039d366004612024565b61165a565b6102716103b03660046122e0565b60096020526000908152604090205460ff1681565b6101ee6103d3366004612024565b611689565b6104066103e6366004612024565b600760209081526000928352604080842090915290825290205460ff1681565b6040516101d29190612330565b61032760025481565b6101ee61042a366004611e0a565b611982565b6101ee61043d3660046122e0565b611a82565b6101ee610450366004611fa4565b611ac0565b6101ee610463366004611e0a565b611b89565b6101ee610476366004611e0a565b611cb9565b60056020526000908152604090208054600182015460028301805492936001600160a01b03909216926104ad9061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546104d99061233e565b80156105265780601f106104fb57610100808354040283529160200191610526565b820191906000526020600020905b81548152906001019060200180831161050957829003601f168201915b5050506003909301549192505060ff8082169161010090041685565b3360009081526009602052604090205460ff16156105a75760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520616c7265616479207265676973746572656421000000000060448201526064015b60405180910390fd5b6040805180820182528381526020808201849052336000908152600890915291909120815181906105d890826123c3565b50602082015160018201906105ed90826123c3565b50503360008181526009602052604090819020805460ff19166001179055517f4ddffe5495169d350d09d432b0c9ffb9156ae79ccd81b2113fca4bbea47f1bda925061063d919085908590612483565b60405180910390a15050565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e4890610680903390600090879087906004016124b9565b602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c191906124fd565b6106dd5760405162461bcd60e51b815260040161059e9061251f565b835160ff10156107235760405162461bcd60e51b8152602060048201526011602482015270546f6f206d616e7920636f6c6c6162732160781b604482015260640161059e565b6002805490600061073383612561565b90915550506003805490600061074883612561565b90915550506002805460009081526004602052604080822080546001600160a01b03191633179055915481522060010161078283826123c3565b50600380546002805460009081526004602052604080822090940192909255548152908120426005909101555b84518160ff1610156108c057600460006002548152602001908152602001600020600201858260ff16815181106107e8576107e861257a565b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b0390921691909117815591810151909282019061083e90826123c3565b50505080600161084e9190612590565b600a600060025481526020019081526020016000206000878460ff168151811061087a5761087a61257a565b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191660ff929092169190911790556108b9816125a9565b90506107af565b506040805160a081018252600254815233602082015290810183905260016060820152608081016000905260035460009081526005602090815260409182902083518155908301516001820180546001600160a01b0319166001600160a01b0390921691909117905590820151600282019061093c90826123c3565b50606082015160038201805460ff90921660ff1983168117825560808501519261ffff19161761010083600281111561097757610977611e69565b0217905550506003546000908152600760209081526040808320338452909152902080546001925060ff191682800217905550600154604051632091ea5f60e21b81523360048201526001600160a01b0390911690638247a97c90602401600060405180830381600087803b1580156109ef57600080fd5b505af1158015610a03573d6000803e3d6000fd5b50506002546003546040517f2b4587bc06ed8e0680a5e4250ea9f92fad5213927711d30cc22436a41d710eb39450610a439350339288928a9289906125f7565b60405180910390a150505050565b600081815260056020526040902054610a6a813361165a565b610a865760405162461bcd60e51b815260040161059e9061269b565b6000828152600560209081526040808320548084526004928390529220015460ff1615610ac55760405162461bcd60e51b815260040161059e906126de565b6000838152600560209081526040808320548352600490915290206003015483908114610b2b5760405162461bcd60e51b81526020600482015260146024820152734e6f74206f6e207468617420726571756573742160601b604482015260640161059e565b60008481526005602090815260408083208054808552600490935292209091600190910190610b5d9060020182612715565b50600081815260046020908152604080832060030183905587835260059091529081902090517ff2a85f7a294675c2b60bbccaa6dae2668ceacb6943568399f2e8d7bd41b0025091610bb891339185916002909101906127f0565b60405180910390a15050505050565b82610bd2813361165a565b610bee5760405162461bcd60e51b815260040161059e9061269b565b6000848152600460208190526040909120015460ff1615610c4a5760405162461bcd60e51b8152602060048201526016602482015275416c726561647920636f6e6669726d656420446f632160501b604482015260640161059e565b60008481526004602052604090206003015415610c9e5760405162461bcd60e51b8152602060048201526012602482015271416c7265616479206f6e207570646174652160701b604482015260640161059e565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e4890610cd49033908890889088906004016124b9565b602060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1591906124fd565b610d315760405162461bcd60e51b815260040161059e9061251f565b600154604051632091ea5f60e21b81523360048201526001600160a01b0390911690638247a97c90602401600060405180830381600087803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b505060038054925090506000610d9f83612561565b90915550506040805160a08101825285815233602082015290810184905260016060820152608081016000905260035460009081526005602090815260409182902083518155908301516001820180546001600160a01b0319166001600160a01b03909216919091179055908201516002820190610e1d90826123c3565b50606082015160038201805460ff90921660ff1983168117825560808501519261ffff191617610100836002811115610e5857610e58611e69565b02179055505060038054600090815260076020908152604080832033808552908352818420805460ff1916600117905584548a855260049093529281902090930181905591517fa3a5b7198374ac273bf7616259b230f4831f8730600bc8a1760cf52baadf2c0a9350610a439288918890612892565b600460205260009081526040902080546001820180546001600160a01b039092169291610efa9061233e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f269061233e565b8015610f735780601f10610f4857610100808354040283529160200191610f73565b820191906000526020600020905b815481529060010190602001808311610f5657829003601f168201915b50505050600383015460048401546005909401549293909260ff909116915085565b610f9d611d3f565b610fa76000611d6c565b565b60008281526004602052604090205482906001600160a01b03163314610fe15760405162461bcd60e51b815260040161059e906128bf565b60008381526004602081905260409091200154839060ff16156110165760405162461bcd60e51b815260040161059e906126de565b61102484846000015161165a565b1561106a5760405162461bcd60e51b81526020600482015260166024820152754974277320616c7265616479206120636f6c6c61622160501b604482015260640161059e565b6000848152600460205260409020600201805460ff116110c55760405162461bcd60e51b815260206004820152601660248201527543616e277420616464206d6f726520636f6c6c61622160501b604482015260640161059e565b8054600180820183556000838152602090819020875160029094020180546001600160a01b0319166001600160a01b0390941693909317835586015186929182019061111190826123c3565b505081546000878152600a6020908152604080832089516001600160a01b0316845290915290819020805460ff191660ff90931692909217909155517f9231c7fb604793dfa63c72d99e55a81ad132a68360350cd72367d823b4481d369150610bb890879087906128f6565b611185611d3f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600560205260409020546111c0813361165a565b6111dc5760405162461bcd60e51b815260040161059e9061269b565b8160008082815260076020908152604080832033845290915290205460ff16600281111561120c5761120c611e69565b146112295760405162461bcd60e51b815260040161059e9061290f565b6000838152600560205260408120600301805460ff1691611249836125a9565b82546101009290920a60ff81810219909316919092169190910217905550600083815260076020908152604080832033808552908352818420805460ff19166001179055868452600583528184205480855260048452938290206002810154835192835293820188905292917ff63ea3eae557a7022ec4accf5dd3529a31d448603687447053e3b8919572b20e910160405180910390a160008681526005602052604090206003015460ff80831691160361135357600086815260056020908152604091829020600301805461010061ff001990911617905590518781527ff82a94675f90ef5361ee99a4fba4d5c46c7afffb3522499c668f74c496fb58e4910160405180910390a15b505050505050565b6008602052600090815260409020805481906113769061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546113a29061233e565b80156113ef5780601f106113c4576101008083540402835291602001916113ef565b820191906000526020600020905b8154815290600101906020018083116113d257829003601f168201915b5050505050908060010180546114049061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546114309061233e565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905082565b82611492813361165a565b6114ae5760405162461bcd60e51b815260040161059e9061269b565b6000848152600460208190526040909120015460ff166115105760405162461bcd60e51b815260206004820181905260248201527f4861766520746f20636f6e6669726d20646f63206265666f7265207369676e21604482015260640161059e565b600084815260066020908152604080832033845290915290205460ff16156115705760405162461bcd60e51b8152602060048201526013602482015272596f7520616c7265616479207369676e65642160681b604482015260640161059e565b600154604051630d2a47c960e31b81526001600160a01b03909116906369523e48906115a69033908890889088906004016124b9565b602060405180830381865afa1580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e791906124fd565b6116035760405162461bcd60e51b815260040161059e9061251f565b600084815260066020908152604080832033808552925291829020805460ff1916600117905590517fad1ef0f31a5a91874aa5ea96af9a36e32cbac60bcfe3ed547208774c457471fe91610a439187908790612952565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1615155b92915050565b60008281526004602052604090205482906001600160a01b031633146116c15760405162461bcd60e51b815260040161059e906128bf565b60008381526004602081905260409091200154839060ff16156116f65760405162461bcd60e51b815260040161059e906126de565b611700848461165a565b6117415760405162461bcd60e51b815260206004820152601260248201527149742773206e6f74206120636f6c6c61622160701b604482015260640161059e565b6000848152600460209081526040808320600a83528184206001600160a01b038816855290925282205460029091018054909260ff9092169190839061178990600190612979565b815481106117995761179961257a565b60009182526020918290206040805180820190915260029092020180546001600160a01b0316825260018101805492939192918401916117d89061233e565b80601f01602080910402602001604051908101604052809291908181526020018280546118049061233e565b80156118515780601f1061182657610100808354040283529160200191611851565b820191906000526020600020905b81548152906001019060200180831161183457829003601f168201915b5050505050815250509050808360018461186b919061298c565b60ff168154811061187e5761187e61257a565b600091825260209182902083516002929092020180546001600160a01b0319166001600160a01b039092169190911781559082015160018201906118c290826123c3565b50905050828054806118d6576118d66129a5565b60008281526020812060026000199093019283020180546001600160a01b0319168155906119076001830182611dbc565b505090556000878152600a6020908152604080832084516001600160a01b03908116855290835292819020805460ff191660ff871617905580518a8152928916918301919091527f8f8ba90a3537bb5db73c92326b03d5cf9903a8c6ba588309512f287a9da0a7b4910160405180910390a150505050505050565b60008181526005602052604090205461199b813361165a565b6119b75760405162461bcd60e51b815260040161059e9061269b565b8160008082815260076020908152604080832033845290915290205460ff1660028111156119e7576119e7611e69565b14611a045760405162461bcd60e51b815260040161059e9061290f565b600083815260076020908152604080832033808552908352818420805460ff191660021790558684526005835292819020600301805461020061ff001990911617905580519283529082018590527fa36a540c5fea3a5e69d4b1c2247b28a93fd183ef1314af26a8db7b3ae080bcd0910160405180910390a1505050565b611a8a611d3f565b6001600160a01b038116611ab457604051631e4fbdf760e01b81526000600482015260240161059e565b611abd81611d6c565b50565b3360009081526009602052604090205460ff16611b1f5760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f74207265676973746572656421000000000000000000604482015260640161059e565b336000908152600860205260409020611b3883826123c3565b50336000908152600860205260409020600101611b5582826123c3565b507f780d856ed9ea931025ba084067327ac59ec5901a2d40b1019936c4561eb66efb33838360405161063d93929190612483565b600081815260056020526040902054611ba2813361165a565b611bbe5760405162461bcd60e51b815260040161059e9061269b565b6000828152600560209081526040808320548084526004928390529220015460ff1615611bfd5760405162461bcd60e51b815260040161059e906126de565b6000838152600560209081526040808320548352600490915290206003015483908114611c635760405162461bcd60e51b81526020600482015260146024820152734e6f74206f6e207468617420726571756573742160601b604482015260640161059e565b600084815260056020908152604080832054808452600483528184206003019390935580513381529182018390527fd9168354e7488be9ffebf8f086c5d0a417368fc090dd17e987927b5e2bf75ded9101610bb8565b60008181526004602052604090205481906001600160a01b03163314611cf15760405162461bcd60e51b815260040161059e906128bf565b60008281526004602081905260409182902001805460ff19166001179055517f7bfc51787cf9b207191cae1618bc4b3ca9cadc6dfb5b920e569de8d4a847d0389061063d9084815260200190565b6000546001600160a01b03163314610fa75760405163118cdaa760e01b815233600482015260240161059e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054611dc89061233e565b6000825580601f10611dd8575050565b601f016020900490600052602060002090810190611abd91905b80821115611e065760008155600101611df2565b5090565b600060208284031215611e1c57600080fd5b5035919050565b6000815180845260005b81811015611e4957602081850181015186830182015201611e2d565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b60038110611e9d57634e487b7160e01b600052602160045260246000fd5b9052565b8581526001600160a01b038516602082015260a060408201819052600090611ecb90830186611e23565b905060ff84166060830152611ee36080830184611e7f565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f2c57611f2c611eed565b604052919050565b600082601f830112611f4557600080fd5b813567ffffffffffffffff811115611f5f57611f5f611eed565b611f72601f8201601f1916602001611f03565b818152846020838601011115611f8757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611fb757600080fd5b823567ffffffffffffffff80821115611fcf57600080fd5b611fdb86838701611f34565b93506020850135915080821115611ff157600080fd5b50611ffe85828601611f34565b9150509250929050565b80356001600160a01b038116811461201f57600080fd5b919050565b6000806040838503121561203757600080fd5b8235915061204760208401612008565b90509250929050565b60006040828403121561206257600080fd5b6040516040810167ffffffffffffffff828210818311171561208657612086611eed565b8160405282935061209685612008565b835260208501359150808211156120ac57600080fd5b506120b985828601611f34565b6020830152505092915050565b600080600080608085870312156120dc57600080fd5b843567ffffffffffffffff808211156120f457600080fd5b818701915087601f83011261210857600080fd5b813560208282111561211c5761211c611eed565b8160051b61212b828201611f03565b928352848101820192828101908c85111561214557600080fd5b83870192505b84831015612181578235868111156121635760008081fd5b6121718e86838b0101612050565b835250918301919083019061214b565b995050508801359250508082111561219857600080fd5b6121a488838901611f34565b945060408701359150808211156121ba57600080fd5b6121c688838901611f34565b935060608701359150808211156121dc57600080fd5b506121e987828801611f34565b91505092959194509250565b60008060006060848603121561220a57600080fd5b83359250602084013567ffffffffffffffff8082111561222957600080fd5b61223587838801611f34565b9350604086013591508082111561224b57600080fd5b5061225886828701611f34565b9150509250925092565b6001600160a01b038616815260a06020820181905260009061228690830187611e23565b604083019590955250911515606083015260809091015292915050565b600080604083850312156122b657600080fd5b82359150602083013567ffffffffffffffff8111156122d457600080fd5b611ffe85828601612050565b6000602082840312156122f257600080fd5b6122fb82612008565b9392505050565b6040815260006123156040830185611e23565b82810360208401526123278185611e23565b95945050505050565b602081016116838284611e7f565b600181811c9082168061235257607f821691505b60208210810361237257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156123be57600081815260208120601f850160051c8101602086101561239f5750805b601f850160051c820191505b81811015611353578281556001016123ab565b505050565b815167ffffffffffffffff8111156123dd576123dd611eed565b6123f1816123eb845461233e565b84612378565b602080601f831160018114612426576000841561240e5750858301515b600019600386901b1c1916600185901b178555611353565b600085815260208120601f198616915b8281101561245557888601518255948401946001909101908401612436565b50858210156124735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03841681526060602082018190526000906124a790830185611e23565b8281036040840152611ee38185611e23565b60018060a01b03851681528360208201526080604082015260006124e06080830185611e23565b82810360608401526124f28185611e23565b979650505050505050565b60006020828403121561250f57600080fd5b815180151581146122fb57600080fd5b602080825260129082015271496e76616c6964205369676e61747572652160701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016125735761257361254b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60ff81811683821601908111156116835761168361254b565b600060ff821660ff81036125bf576125bf61254b565b60010192915050565b60018060a01b03815116825260006020820151604060208501526125ef6040850182611e23565b949350505050565b6001600160a01b038716815260c0602080830182905260009161261c90840189611e23565b8381036040850152875180825282820190600581901b83018401848b0160005b8381101561266a57601f198684030185526126588383516125c8565b9487019492509086019060010161263c565b505089606088015288608088015286810360a088015261268a8189611e23565b9d9c50505050505050505050505050565b60208082526023908201527f596f7520617265206e6f742074686520636f6c6c6162206f66207468617420446040820152624f432160e81b606082015260800190565b6020808252601b908201527f416c726561647920636f6e6669726d656420646f63756d656e74210000000000604082015260600190565b818103612720575050565b61272a825461233e565b67ffffffffffffffff81111561274257612742611eed565b612750816123eb845461233e565b6000601f821160018114612784576000831561276c5750848201545b600019600385901b1c1916600184901b1784556127e9565b600085815260209020601f19841690600086815260209020845b838110156127be578286015482556001958601959091019060200161279e565b50858310156127dc5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b60018060a01b038416815260006020848184015260606040840152600084546128188161233e565b806060870152608060018084166000811461283a576001811461285457612882565b60ff1985168984015283151560051b890183019550612882565b896000528660002060005b8581101561287a5781548b820186015290830190880161285f565b8a0184019650505b50939a9950505050505050505050565b60018060a01b0385168152836020820152826040820152608060608201526000611ee36080830184611e23565b6020808252601c908201527f596f7520617265206e6f742074686520646f632063726561746f722100000000604082015260600190565b8281526040602082015260006125ef60408301846125c8565b60208082526023908201527f596f7520616c726561647920636f6e6669726d6564207468617420726571756560408201526273742160e81b606082015260800190565b60018060a01b03841681528260208201526060604082015260006123276060830184611e23565b818103818111156116835761168361254b565b60ff82811682821603908111156116835761168361254b565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f7e1ba275c98da5f01c6b37af3854aca92e53099d9937444ae7a8276da9768a864736f6c63430008140033
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.