Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,415 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16132711 | 633 days ago | IN | 0 ETH | 0.00065514 | ||||
Set Validation | 16132704 | 633 days ago | IN | 0 ETH | 0.00358711 | ||||
Withdraw | 16120260 | 635 days ago | IN | 0 ETH | 0.00069763 | ||||
Set Payment Per ... | 16042668 | 646 days ago | IN | 0 ETH | 0.00045284 | ||||
Set Validation | 13995707 | 961 days ago | IN | 0 ETH | 0.03644266 | ||||
Set Validation | 13971805 | 965 days ago | IN | 0 ETH | 0.0198248 | ||||
Set Validation | 13918189 | 973 days ago | IN | 0 ETH | 0.01734873 | ||||
Set Validation | 13915409 | 974 days ago | IN | 0 ETH | 0.02342705 | ||||
Set Validation | 13888764 | 978 days ago | IN | 0 ETH | 0.03063407 | ||||
Set Validation | 13884699 | 979 days ago | IN | 0 ETH | 0.00826728 | ||||
Set Validation | 13884693 | 979 days ago | IN | 0 ETH | 0.02158842 | ||||
Set Validation | 13880379 | 979 days ago | IN | 0 ETH | 0.01432019 | ||||
Set Validation | 13878072 | 980 days ago | IN | 0 ETH | 0.01938264 | ||||
Set Validation | 13853509 | 983 days ago | IN | 0 ETH | 0.0142655 | ||||
Set Validation | 13852863 | 983 days ago | IN | 0 ETH | 0.00748097 | ||||
Set Validation | 13852863 | 983 days ago | IN | 0 ETH | 0.01592155 | ||||
Set Validation | 13848880 | 984 days ago | IN | 0 ETH | 0.01328674 | ||||
Set Validation | 13836521 | 986 days ago | IN | 0 ETH | 0.01411728 | ||||
Set Validation | 13796825 | 992 days ago | IN | 0 ETH | 0.01043669 | ||||
Set Validation | 13788326 | 993 days ago | IN | 0 ETH | 0.01120149 | ||||
Set Validation | 13786385 | 994 days ago | IN | 0 ETH | 0.00792374 | ||||
Set Validation | 13786366 | 994 days ago | IN | 0 ETH | 0.01683089 | ||||
Set Validation | 13778906 | 995 days ago | IN | 0 ETH | 0.03082916 | ||||
Set Validation | 13778525 | 995 days ago | IN | 0 ETH | 0.03381025 | ||||
Set Validation | 13775513 | 995 days ago | IN | 0 ETH | 0.01825695 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TwitterValidationOperator
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-02 */ // File: @openzeppelin/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: @openzeppelin/contracts/access/roles/WhitelistAdminRole.sol pragma solidity ^0.5.0; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(msg.sender); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(msg.sender), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(msg.sender); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } // File: @openzeppelin/contracts/access/roles/WhitelistedRole.sol pragma solidity ^0.5.0; /** * @title WhitelistedRole * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove * it), and not Whitelisteds themselves. */ contract WhitelistedRole is WhitelistAdminRole { using Roles for Roles.Role; event WhitelistedAdded(address indexed account); event WhitelistedRemoved(address indexed account); Roles.Role private _whitelisteds; modifier onlyWhitelisted() { require(isWhitelisted(msg.sender), "WhitelistedRole: caller does not have the Whitelisted role"); _; } function isWhitelisted(address account) public view returns (bool) { return _whitelisteds.has(account); } function addWhitelisted(address account) public onlyWhitelistAdmin { _addWhitelisted(account); } function removeWhitelisted(address account) public onlyWhitelistAdmin { _removeWhitelisted(account); } function renounceWhitelisted() public { _removeWhitelisted(msg.sender); } function _addWhitelisted(address account) internal { _whitelisteds.add(account); emit WhitelistedAdded(account); } function _removeWhitelisted(address account) internal { _whitelisteds.remove(account); emit WhitelistedRemoved(account); } } // File: @openzeppelin/contracts/access/roles/CapperRole.sol pragma solidity ^0.5.0; contract CapperRole { using Roles for Roles.Role; event CapperAdded(address indexed account); event CapperRemoved(address indexed account); Roles.Role private _cappers; constructor () internal { _addCapper(msg.sender); } modifier onlyCapper() { require(isCapper(msg.sender), "CapperRole: caller does not have the Capper role"); _; } function isCapper(address account) public view returns (bool) { return _cappers.has(account); } function addCapper(address account) public onlyCapper { _addCapper(account); } function renounceCapper() public { _removeCapper(msg.sender); } function _addCapper(address account) internal { _cappers.add(account); emit CapperAdded(account); } function _removeCapper(address account) internal { _cappers.remove(account); emit CapperRemoved(account); } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: @chainlink/contracts/src/v0.5/interfaces/LinkTokenInterface.sol pragma solidity ^0.5.0; interface LinkTokenInterface { function allowance(address owner, address spender) external view returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external view returns (uint256 balance); function decimals() external view returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external view returns (string memory tokenName); function symbol() external view returns (string memory tokenSymbol); function totalSupply() external view returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); } // File: contracts/util/ERC677Receiver.sol pragma solidity 0.5.12; contract ERC677Receiver { /** * @dev Method invoked when tokens transferred via transferAndCall method * @param _sender Original token sender * @param _value Tokens amount * @param _data Additional data passed to contract */ function onTokenTransfer(address _sender, uint256 _value, bytes calldata _data) external; } // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC165 standard, as defined in the * [EIP](https://eips.ethereum.org/EIPS/eip-165). * * Implementers can declare support of contract interfaces, which can then be * queried by others (`ERC165Checker`). * * For an implementation, see `ERC165`. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.0; /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either `approve` or `setApproveForAll`. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either `approve` or `setApproveForAll`. */ function transferFrom(address from, address to, uint256 tokenId) public; function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: @openzeppelin/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.5.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/IRegistry.sol pragma solidity 0.5.12; contract IRegistry is IERC721Metadata { event NewURI(uint256 indexed tokenId, string uri); event NewURIPrefix(string prefix); event Resolve(uint256 indexed tokenId, address indexed to); event Sync(address indexed resolver, uint256 indexed updateId, uint256 indexed tokenId); /** * @dev Controlled function to set the token URI Prefix for all tokens. * @param prefix string URI to assign */ function controlledSetTokenURIPrefix(string calldata prefix) external; /** * @dev Returns whether the given spender can transfer a given token ID. * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool); /** * @dev Mints a new a child token. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token not exist. * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the parent token * @param label subdomain label of the child token ID */ function mintChild(address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled function to mint a given token ID. * Requires the msg.sender to be controller. * Requires the token ID to not exist. * @param to address the given token ID will be minted to * @param label string that is a subdomain * @param tokenId uint256 ID of the parent token */ function controlledMintChild(address to, uint256 tokenId, string calldata label) external; /** * @dev Transfers the ownership of a child token ID to another address. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param label subdomain label of the child token ID */ function transferFromChild(address from, address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled function to transfers the ownership of a token ID to * another address. * Requires the msg.sender to be controller. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function controlledTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Safely transfers the ownership of a child token ID to another address. * Calculates child token ID using a namehash function. * Implements a ERC721Reciever check unlike transferFromChild. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 parent ID of the token to be transferred * @param label subdomain label of the child token ID * @param _data bytes data to send along with a safe transfer check */ function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label, bytes calldata _data) external; /// Shorthand for calling the above ^^^ safeTransferFromChild function with an empty _data parameter. Similar to ERC721.safeTransferFrom. function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled frunction to safely transfers the ownership of a token ID * to another address. * Implements a ERC721Reciever check unlike controlledSafeTransferFrom. * Requires the msg.sender to be controller. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 parent ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function controlledSafeTransferFrom(address from, address to, uint256 tokenId, bytes calldata _data) external; /** * @dev Burns a child token ID. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @param tokenId uint256 ID of the token to be transferred * @param label subdomain label of the child token ID */ function burnChild(uint256 tokenId, string calldata label) external; /** * @dev Controlled function to burn a given token ID. * Requires the msg.sender to be controller. * Requires the token already exist. * @param tokenId uint256 ID of the token to be burned */ function controlledBurn(uint256 tokenId) external; /** * @dev Sets the resolver of a given token ID to another address. * Requires the msg.sender to be the owner, approved, or operator. * @param to address the given token ID will resolve to * @param tokenId uint256 ID of the token to be transferred */ function resolveTo(address to, uint256 tokenId) external; /** * @dev Gets the resolver of the specified token ID. * @param tokenId uint256 ID of the token to query the resolver of * @return address currently marked as the resolver of the given token ID */ function resolverOf(uint256 tokenId) external view returns (address); /** * @dev Controlled function to sets the resolver of a given token ID. * Requires the msg.sender to be controller. * @param to address the given token ID will resolve to * @param tokenId uint256 ID of the token to be transferred */ function controlledResolveTo(address to, uint256 tokenId) external; /** * @dev Provides child token (subdomain) of provided tokenId. * @param tokenId uint256 ID of the token * @param label label of subdomain (for `aaa.bbb.crypto` it will be `aaa`) */ function childIdOf(uint256 tokenId, string calldata label) external pure returns (uint256); /** * @dev Transfer domain ownership without resetting domain records. * @param to address of new domain owner * @param tokenId uint256 ID of the token to be transferred */ function setOwner(address to, uint256 tokenId) external; } // File: contracts/IResolver.sol pragma solidity 0.5.12; pragma experimental ABIEncoderV2; contract IResolver { /** * @dev Reset all domain records and set new ones * @param keys New record keys * @param values New record values * @param tokenId ERC-721 token id of the domain */ function reconfigure(string[] memory keys, string[] memory values, uint256 tokenId) public; /** * @dev Set or update domain records * @param keys New record keys * @param values New record values * @param tokenId ERC-721 token id of the domain */ function setMany(string[] memory keys, string[] memory values, uint256 tokenId) public; /** * @dev Function to set record. * @param key The key set the value of. * @param value The value to set key to. * @param tokenId ERC-721 token id to set. */ function set(string calldata key, string calldata value, uint256 tokenId) external; /** * @dev Function to reset all existing records on a domain. * @param tokenId ERC-721 token id to set. */ function reset(uint256 tokenId) external; } // File: contracts/operators/TwitterValidationOperator.sol pragma solidity 0.5.12; // pragma experimental ABIEncoderV2; contract TwitterValidationOperator is WhitelistedRole, CapperRole, ERC677Receiver { string public constant NAME = 'Chainlink Twitter Validation Operator'; string public constant VERSION = '0.2.0'; using SafeMath for uint256; event Validation(uint256 indexed tokenId, uint256 requestId, uint256 paymentAmount); event ValidationRequest(uint256 indexed tokenId, address indexed owner, uint256 requestId, string code); event PaymentSet(uint256 operatorPaymentPerValidation, uint256 userPaymentPerValidation); uint256 public operatorPaymentPerValidation; uint256 public userPaymentPerValidation; uint256 public withdrawableTokens; uint256 private frozenTokens; uint256 private lastRequestId = 1; mapping(uint256 => uint256) private userRequests; IRegistry private registry; LinkTokenInterface private linkToken; /** * @notice Deploy with the address of the LINK token, domains registry and payment amount in LINK for one valiation * @dev Sets the LinkToken address, Registry address and payment in LINK tokens for one validation * @param _registry The address of the .crypto Registry * @param _linkToken The address of the LINK token * @param _paymentCappers Addresses allowed to update payment amount per validation */ constructor (IRegistry _registry, LinkTokenInterface _linkToken, address[] memory _paymentCappers) public { require(address(_registry) != address(0), "TwitterValidationOperator: INVALID_REGISTRY_ADDRESS"); require(address(_linkToken) != address(0), "TwitterValidationOperator: INVALID_LINK_TOKEN_ADDRESS"); require(_paymentCappers.length > 0, "TwitterValidationOperator: NO_CAPPERS_PROVIDED"); registry = _registry; linkToken = _linkToken; uint256 cappersCount = _paymentCappers.length; for (uint256 i = 0; i < cappersCount; i++) { addCapper(_paymentCappers[i]); } renounceCapper(); } /** * @dev Reverts if amount requested is greater than withdrawable balance * @param _amount The given amount to compare to `withdrawableTokens` */ modifier hasAvailableFunds(uint256 _amount) { require(withdrawableTokens >= _amount, "TwitterValidationOperator: TOO_MANY_TOKENS_REQUESTED"); _; } /** * @dev Reverts if contract doesn not have enough LINK tokens to fulfil validation */ modifier hasAvailableBalance() { require( availableBalance() >= withdrawableTokens.add(operatorPaymentPerValidation), "TwitterValidationOperator: NOT_ENOUGH_TOKENS_ON_CONTRACT_BALANCE" ); _; } /** * @dev Reverts if method called not from LINK token contract */ modifier linkTokenOnly() { require(msg.sender == address(linkToken), "TwitterValidationOperator: CAN_CALL_FROM_LINK_TOKEN_ONLY"); _; } /** * @dev Reverts if user sent incorrect amount of LINK tokens */ modifier correctTokensAmount(uint256 _value) { require(_value == userPaymentPerValidation, "TwitterValidationOperator: INCORRECT_TOKENS_AMOUNT"); _; } /** * @notice Method will be called by Chainlink node in the end of the job. Provides user twitter name and validation signature * @dev Sets twitter username and signature to .crypto domain records * @param _username Twitter username * @param _signature Signed twitter username. Ensures the validity of twitter username * @param _tokenId Domain token ID * @param _requestId Request id for validations were requested from Smart Contract. If validation was requested from operator `_requestId` should be equals to zero. */ function setValidation(string calldata _username, string calldata _signature, uint256 _tokenId, uint256 _requestId) external onlyWhitelisted hasAvailableBalance { uint256 _payment = calculatePaymentForValidation(_requestId); withdrawableTokens = withdrawableTokens.add(_payment); IResolver Resolver = IResolver(registry.resolverOf(_tokenId)); Resolver.set("social.twitter.username", _username, _tokenId); Resolver.set("validation.social.twitter.username", _signature, _tokenId); emit Validation(_tokenId, _requestId, _payment); } /** * @notice Method returns true if Node Operator able to set validation * @dev Returns true or error */ function canSetValidation() external view onlyWhitelisted hasAvailableBalance returns (bool) { return true; } /** * @notice Method allows to update payments per one validation in LINK tokens * @dev Sets operatorPaymentPerValidation and userPaymentPerValidation variables * @param _operatorPaymentPerValidation Payment amount in LINK tokens when verification initiated via Operator * @param _userPaymentPerValidation Payment amount in LINK tokens when verification initiated directly by user via Smart Contract call */ function setPaymentPerValidation(uint256 _operatorPaymentPerValidation, uint256 _userPaymentPerValidation) external onlyCapper { operatorPaymentPerValidation = _operatorPaymentPerValidation; userPaymentPerValidation = _userPaymentPerValidation; emit PaymentSet(operatorPaymentPerValidation, userPaymentPerValidation); } /** * @notice Allows the node operator to withdraw earned LINK to a given address * @dev The owner of the contract can be another wallet and does not have to be a Chainlink node * @param _recipient The address to send the LINK token to * @param _amount The amount to send (specified in wei) */ function withdraw(address _recipient, uint256 _amount) external onlyWhitelistAdmin hasAvailableFunds(_amount) { withdrawableTokens = withdrawableTokens.sub(_amount); assert(linkToken.transfer(_recipient, _amount)); } /** * @notice Initiate Twitter validation * @dev Method invoked when LINK tokens transferred via transferAndCall method. Requires additional encoded data * @param _sender Original token sender * @param _value Tokens amount * @param _data Encoded additional data needed to initiate domain verification: `abi.encode(uint256 tokenId, string code)` */ function onTokenTransfer(address _sender, uint256 _value, bytes calldata _data) external linkTokenOnly correctTokensAmount(_value) { (uint256 _tokenId, string memory _code) = abi.decode(_data, (uint256, string)); require(registry.isApprovedOrOwner(_sender, _tokenId), "TwitterValidationOperator: SENDER_DOES_NOT_HAVE_ACCESS_TO_DOMAIN"); require(bytes(_code).length > 0, "TwitterValidationOperator: CODE_IS_EMPTY"); require(registry.isApprovedOrOwner(address(this), _tokenId), "TwitterValidationOperator: OPERATOR_SHOULD_BE_APPROVED"); frozenTokens = frozenTokens.add(_value); userRequests[lastRequestId] = _value; emit ValidationRequest(_tokenId, registry.ownerOf(_tokenId), lastRequestId, _code); lastRequestId = lastRequestId.add(1); } /** * @notice Method returns available LINK tokens balance minus held tokens * @dev Returns tokens amount */ function availableBalance() public view returns (uint256) { return linkToken.balanceOf(address(this)).sub(frozenTokens); } function calculatePaymentForValidation(uint256 _requestId) private returns (uint256 _paymentPerValidation) { if (_requestId > 0) {// Validation was requested from Smart Contract. We need to search for price in mapping _paymentPerValidation = userRequests[_requestId]; frozenTokens = frozenTokens.sub(_paymentPerValidation); delete userRequests[_requestId]; } else { _paymentPerValidation = operatorPaymentPerValidation; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IRegistry","name":"_registry","type":"address"},{"internalType":"contract LinkTokenInterface","name":"_linkToken","type":"address"},{"internalType":"address[]","name":"_paymentCappers","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"CapperAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"CapperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"operatorPaymentPerValidation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userPaymentPerValidation","type":"uint256"}],"name":"PaymentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"paymentAmount","type":"uint256"}],"name":"Validation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"string","name":"code","type":"string"}],"name":"ValidationRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"canSetValidation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCapper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"operatorPaymentPerValidation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_operatorPaymentPerValidation","type":"uint256"},{"internalType":"uint256","name":"_userPaymentPerValidation","type":"uint256"}],"name":"setPaymentPerValidation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_username","type":"string"},{"internalType":"string","name":"_signature","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_requestId","type":"uint256"}],"name":"setValidation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"userPaymentPerValidation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260016007553480156200001657600080fd5b50604051620031c9380380620031c983398181016040526200003c919081019062000733565b6200004d336200027060201b60201c565b6200005e33620002d160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c89062000afe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013b9062000a76565b60405180910390fd5b60008151116200018b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001829062000aba565b60405180910390fd5b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008151905060008090505b818110156200025557620002478382815181106200023357fe5b60200260200101516200033260201b60201c565b808060010191505062000219565b50620002666200039960201b60201c565b5050505062000c54565b6200028b816000620003ac60201b6200142d1790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620002ec816002620003ac60201b6200142d1790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b62000343336200045f60201b60201c565b62000385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037c9062000b20565b60405180910390fd5b6200039681620002d160201b60201c565b50565b620003aa336200048360201b60201c565b565b620003be8282620004e460201b60201c565b1562000401576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f89062000a54565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006200047c826002620004e460201b620011451790919060201c565b9050919050565b6200049e816002620005af60201b620014d51790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000558576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054f9062000adc565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b620005c18282620004e460201b60201c565b62000603576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005fa9062000a98565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600081519050620006728162000c06565b92915050565b600082601f8301126200068a57600080fd5b8151620006a16200069b8262000b70565b62000b42565b91508181835260208401935060208101905083856020840282011115620006c757600080fd5b60005b83811015620006fb5781620006e0888262000661565b845260208401935060208301925050600181019050620006ca565b5050505092915050565b600081519050620007168162000c20565b92915050565b6000815190506200072d8162000c3a565b92915050565b6000806000606084860312156200074957600080fd5b6000620007598682870162000705565b93505060206200076c868287016200071c565b925050604084015167ffffffffffffffff8111156200078a57600080fd5b620007988682870162000678565b9150509250925092565b6000620007b1601f8362000b99565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000620007f360358362000b99565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20494e56414c60008301527f49445f4c494e4b5f544f4b454e5f4144445245535300000000000000000000006020830152604082019050919050565b60006200085b60218362000b99565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000620008c3602e8362000b99565b91507f5477697474657256616c69646174696f6e4f70657261746f723a204e4f5f434160008301527f50504552535f50524f56494445440000000000000000000000000000000000006020830152604082019050919050565b60006200092b60228362000b99565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200099360338362000b99565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20494e56414c60008301527f49445f52454749535452595f41444452455353000000000000000000000000006020830152604082019050919050565b6000620009fb60308362000b99565b91507f436170706572526f6c653a2063616c6c657220646f6573206e6f74206861766560008301527f207468652043617070657220726f6c65000000000000000000000000000000006020830152604082019050919050565b6000602082019050818103600083015262000a6f81620007a2565b9050919050565b6000602082019050818103600083015262000a9181620007e4565b9050919050565b6000602082019050818103600083015262000ab3816200084c565b9050919050565b6000602082019050818103600083015262000ad581620008b4565b9050919050565b6000602082019050818103600083015262000af7816200091c565b9050919050565b6000602082019050818103600083015262000b198162000984565b9050919050565b6000602082019050818103600083015262000b3b81620009ec565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171562000b6657600080fd5b8060405250919050565b600067ffffffffffffffff82111562000b8857600080fd5b602082029050602081019050919050565b600082825260208201905092915050565b600062000bb78262000be6565b9050919050565b600062000bcb8262000baa565b9050919050565b600062000bdf8262000baa565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62000c118162000baa565b811462000c1d57600080fd5b50565b62000c2b8162000bbe565b811462000c3757600080fd5b50565b62000c458162000bd2565b811462000c5157600080fd5b50565b6125658062000c646000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638dfbcf36116100b8578063c22739381161007c578063c227393814610300578063cb793ca21461031e578063d6cd94731461033c578063f3fef3a314610346578063f615dcd814610362578063ffa1ad741461037e57610137565b80638dfbcf361461025c578063a3f4df7e14610278578063a4c0ed3614610296578063ab2f0e51146102b2578063bb5f747b146102d057610137565b80634c5a628c116100ff5780634c5a628c146101f25780635d5576f8146101fc57806367a63119146102065780637362d9c8146102225780637fe0a6341461023e57610137565b806310154bad1461013c578063291d95491461015857806337cedfe51461017457806339564561146101925780633af32abf146101c2575b600080fd5b610156600480360361015191908101906116cd565b61039c565b005b610172600480360361016d91908101906116cd565b6103f0565b005b61017c610444565b6040516101899190612082565b60405180910390f35b6101ac60048036036101a791908101906116cd565b6104f5565b6040516101b99190612082565b60405180910390f35b6101dc60048036036101d791908101906116cd565b610512565b6040516101e99190612082565b60405180910390f35b6101fa61052f565b005b61020461053a565b005b610220600480360361021b9190810190611908565b610545565b005b61023c600480360361023791908101906116cd565b6105dc565b005b610246610630565b6040516102539190612329565b60405180910390f35b610276600480360361027191908101906116cd565b610636565b005b61028061068a565b60405161028d919061209d565b60405180910390f35b6102b060048036036102ab919081019061175b565b6106a6565b005b6102ba610b05565b6040516102c79190612329565b60405180910390f35b6102ea60048036036102e591908101906116cd565b610bcb565b6040516102f79190612082565b60405180910390f35b610308610be8565b6040516103159190612329565b60405180910390f35b610326610bee565b6040516103339190612329565b60405180910390f35b610344610bf4565b005b610360600480360361035b919081019061171f565b610bff565b005b61037c600480360361037791908101906117f0565b610d62565b005b610386611003565b604051610393919061209d565b60405180910390f35b6103a533610bcb565b6103e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103db90612269565b60405180910390fd5b6103ed8161103c565b50565b6103f933610bcb565b610438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042f90612269565b60405180910390fd5b61044181611096565b50565b600061044f33610512565b61048e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610485906122a9565b60405180910390fd5b6104a56003546005546110f090919063ffffffff16565b6104ad610b05565b10156104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e590612229565b60405180910390fd5b6001905090565b600061050b82600261114590919063ffffffff16565b9050919050565b600061052882600161114590919063ffffffff16565b9050919050565b6105383361120d565b565b61054333611267565b565b61054e336104f5565b61058d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610584906122e9565b60405180910390fd5b81600381905550806004819055507f769ee4ccac1531bdb9405bbbafe6505e85c1a11f7d1e758cfcb9768651bcf9b56003546004546040516105d0929190612374565b60405180910390a15050565b6105e533610bcb565b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b90612269565b60405180910390fd5b61062d816112c1565b50565b60055481565b61063f336104f5565b61067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906122e9565b60405180910390fd5b6106878161131b565b50565b6040518060600160405280602581526020016124fe6025913981565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d90612289565b60405180910390fd5b82600454811461077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612164565b60405180910390fd5b60006060848461078e91908101906118b4565b91509150600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430c208188846040518363ffffffff1660e01b81526004016107ef929190612059565b60206040518083038186803b15801561080757600080fd5b505afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083f91908101906117c7565b61087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087590612309565b60405180910390fd5b60008151116108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906121a4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430c208130846040518363ffffffff1660e01b815260040161091f929190612059565b60206040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061096f91908101906117c7565b6109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906122c9565b60405180910390fd5b6109c3866006546110f090919063ffffffff16565b6006819055508560086000600754815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610a3e9190612329565b60206040518083038186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8e91908101906116f6565b73ffffffffffffffffffffffffffffffffffffffff16827fc3394c5f6e735c734448afa55eefbce7fa2c55449859aa3f9ab1f6cc6f1922eb60075484604051610ad8929190612344565b60405180910390a3610af660016007546110f090919063ffffffff16565b60078190555050505050505050565b6000610bc6600654600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b68919061203e565b60206040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bb8919081019061188b565b61137590919063ffffffff16565b905090565b6000610be182600061114590919063ffffffff16565b9050919050565b60035481565b60045481565b610bfd33611096565b565b610c0833610bcb565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612269565b60405180910390fd5b80806005541015610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490612144565b60405180910390fd5b610ca28260055461137590919063ffffffff16565b600581905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610d05929190612059565b602060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d5791908101906117c7565b610d5d57fe5b505050565b610d6b33610512565b610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906122a9565b60405180910390fd5b610dc16003546005546110f090919063ffffffff16565b610dc9610b05565b1015610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190612229565b60405180910390fd5b6000610e15826113cb565b9050610e2c816005546110f090919063ffffffff16565b6005819055506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b3f9e4cb856040518263ffffffff1660e01b8152600401610e8f9190612329565b60206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610edf91908101906116f6565b90508073ffffffffffffffffffffffffffffffffffffffff166347c816998989876040518463ffffffff1660e01b8152600401610f1e939291906120df565b600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166347c816998787876040518463ffffffff1660e01b8152600401610f8d939291906121e4565b600060405180830381600087803b158015610fa757600080fd5b505af1158015610fbb573d6000803e3d6000fd5b50505050837f64308d1f172ca5d2a008c997998c974d7bc7143d883024b4611ad01d01f424608484604051610ff1929190612374565b60405180910390a25050505050505050565b6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b61105081600161142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6110aa8160016114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008082840190508381101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612124565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90612249565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112218160006114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61127b8160026114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b6112d581600061142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b61132f81600261142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000828211156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190612184565b60405180910390fd5b600082840390508091505092915050565b60008082111561142257600860008381526020019081526020016000205490506114008160065461137590919063ffffffff16565b6006819055506008600083815260200190815260200160002060009055611428565b60035490505b919050565b6114378282611145565b15611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906120bf565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114df8282611145565b61151e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611515906121c4565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008135905061158b816124b8565b92915050565b6000815190506115a0816124b8565b92915050565b6000815190506115b5816124cf565b92915050565b60008083601f8401126115cd57600080fd5b8235905067ffffffffffffffff8111156115e657600080fd5b6020830191508360018202830111156115fe57600080fd5b9250929050565b60008083601f84011261161757600080fd5b8235905067ffffffffffffffff81111561163057600080fd5b60208301915083600182028301111561164857600080fd5b9250929050565b600082601f83011261166057600080fd5b813561167361166e826123ca565b61239d565b9150808252602083016020830185838301111561168f57600080fd5b61169a838284612465565b50505092915050565b6000813590506116b2816124e6565b92915050565b6000815190506116c7816124e6565b92915050565b6000602082840312156116df57600080fd5b60006116ed8482850161157c565b91505092915050565b60006020828403121561170857600080fd5b600061171684828501611591565b91505092915050565b6000806040838503121561173257600080fd5b60006117408582860161157c565b9250506020611751858286016116a3565b9150509250929050565b6000806000806060858703121561177157600080fd5b600061177f8782880161157c565b9450506020611790878288016116a3565b935050604085013567ffffffffffffffff8111156117ad57600080fd5b6117b9878288016115bb565b925092505092959194509250565b6000602082840312156117d957600080fd5b60006117e7848285016115a6565b91505092915050565b6000806000806000806080878903121561180957600080fd5b600087013567ffffffffffffffff81111561182357600080fd5b61182f89828a01611605565b9650965050602087013567ffffffffffffffff81111561184e57600080fd5b61185a89828a01611605565b9450945050604061186d89828a016116a3565b925050606061187e89828a016116a3565b9150509295509295509295565b60006020828403121561189d57600080fd5b60006118ab848285016116b8565b91505092915050565b600080604083850312156118c757600080fd5b60006118d5858286016116a3565b925050602083013567ffffffffffffffff8111156118f257600080fd5b6118fe8582860161164f565b9150509250929050565b6000806040838503121561191b57600080fd5b6000611929858286016116a3565b925050602061193a858286016116a3565b9150509250929050565b61194d8161241d565b82525050565b61195c8161242f565b82525050565b600061196e838561240c565b935061197b838584612465565b611984836124a7565b840190509392505050565b600061199a82612401565b6119a4818561240c565b93506119b4818560208601612474565b6119bd816124a7565b840191505092915050565b60006119d3826123f6565b6119dd818561240c565b93506119ed818560208601612474565b6119f6816124a7565b840191505092915050565b6000611a0e601f8361240c565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000611a4e60178361240c565b91507f736f6369616c2e747769747465722e757365726e616d650000000000000000006000830152602082019050919050565b6000611a8e601b8361240c565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000611ace60348361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20544f4f5f4d60008301527f414e595f544f4b454e535f5245515545535445440000000000000000000000006020830152604082019050919050565b6000611b3460328361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20494e434f5260008301527f524543545f544f4b454e535f414d4f554e5400000000000000000000000000006020830152604082019050919050565b6000611b9a601e8361240c565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b6000611bda60288361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20434f44455f60008301527f49535f454d5054590000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c4060218361240c565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ca660228361240c565b91507f76616c69646174696f6e2e736f6369616c2e747769747465722e757365726e6160008301527f6d650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d0c60408361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a204e4f545f4560008301527f4e4f5547485f544f4b454e535f4f4e5f434f4e54524143545f42414c414e43456020830152604082019050919050565b6000611d7260228361240c565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dd860408361240c565b91507f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008301527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c656020830152604082019050919050565b6000611e3e60388361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a2043414e5f4360008301527f414c4c5f46524f4d5f4c494e4b5f544f4b454e5f4f4e4c5900000000000000006020830152604082019050919050565b6000611ea4603a8361240c565b91507f57686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f7460008301527f2068617665207468652057686974656c697374656420726f6c650000000000006020830152604082019050919050565b6000611f0a60368361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a204f5045524160008301527f544f525f53484f554c445f42455f415050524f564544000000000000000000006020830152604082019050919050565b6000611f7060308361240c565b91507f436170706572526f6c653a2063616c6c657220646f6573206e6f74206861766560008301527f207468652043617070657220726f6c65000000000000000000000000000000006020830152604082019050919050565b6000611fd660408361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a2053454e444560008301527f525f444f45535f4e4f545f484156455f4143434553535f544f5f444f4d41494e6020830152604082019050919050565b6120388161245b565b82525050565b60006020820190506120536000830184611944565b92915050565b600060408201905061206e6000830185611944565b61207b602083018461202f565b9392505050565b60006020820190506120976000830184611953565b92915050565b600060208201905081810360008301526120b781846119c8565b905092915050565b600060208201905081810360008301526120d881611a01565b9050919050565b600060608201905081810360008301526120f881611a41565b9050818103602083015261210d818587611962565b905061211c604083018461202f565b949350505050565b6000602082019050818103600083015261213d81611a81565b9050919050565b6000602082019050818103600083015261215d81611ac1565b9050919050565b6000602082019050818103600083015261217d81611b27565b9050919050565b6000602082019050818103600083015261219d81611b8d565b9050919050565b600060208201905081810360008301526121bd81611bcd565b9050919050565b600060208201905081810360008301526121dd81611c33565b9050919050565b600060608201905081810360008301526121fd81611c99565b90508181036020830152612212818587611962565b9050612221604083018461202f565b949350505050565b6000602082019050818103600083015261224281611cff565b9050919050565b6000602082019050818103600083015261226281611d65565b9050919050565b6000602082019050818103600083015261228281611dcb565b9050919050565b600060208201905081810360008301526122a281611e31565b9050919050565b600060208201905081810360008301526122c281611e97565b9050919050565b600060208201905081810360008301526122e281611efd565b9050919050565b6000602082019050818103600083015261230281611f63565b9050919050565b6000602082019050818103600083015261232281611fc9565b9050919050565b600060208201905061233e600083018461202f565b92915050565b6000604082019050612359600083018561202f565b818103602083015261236b818461198f565b90509392505050565b6000604082019050612389600083018561202f565b612396602083018461202f565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156123c057600080fd5b8060405250919050565b600067ffffffffffffffff8211156123e157600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b60006124288261243b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612492578082015181840152602081019050612477565b838111156124a1576000848401525b50505050565b6000601f19601f8301169050919050565b6124c18161241d565b81146124cc57600080fd5b50565b6124d88161242f565b81146124e357600080fd5b50565b6124ef8161245b565b81146124fa57600080fd5b5056fe436861696e6c696e6b20547769747465722056616c69646174696f6e204f70657261746f72a365627a7a723158206dc5865dec1e85cab5d34bc96037f289720ae15bb37b90f483e4b4b6f0839ef26c6578706572696d656e74616cf564736f6c634300050c0040000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d67a6512c5fce7830629e1f3d067115b57fdb333000000000000000000000000c2cc046e7f4f7a3e9715a853fc54907c12364b6b
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638dfbcf36116100b8578063c22739381161007c578063c227393814610300578063cb793ca21461031e578063d6cd94731461033c578063f3fef3a314610346578063f615dcd814610362578063ffa1ad741461037e57610137565b80638dfbcf361461025c578063a3f4df7e14610278578063a4c0ed3614610296578063ab2f0e51146102b2578063bb5f747b146102d057610137565b80634c5a628c116100ff5780634c5a628c146101f25780635d5576f8146101fc57806367a63119146102065780637362d9c8146102225780637fe0a6341461023e57610137565b806310154bad1461013c578063291d95491461015857806337cedfe51461017457806339564561146101925780633af32abf146101c2575b600080fd5b610156600480360361015191908101906116cd565b61039c565b005b610172600480360361016d91908101906116cd565b6103f0565b005b61017c610444565b6040516101899190612082565b60405180910390f35b6101ac60048036036101a791908101906116cd565b6104f5565b6040516101b99190612082565b60405180910390f35b6101dc60048036036101d791908101906116cd565b610512565b6040516101e99190612082565b60405180910390f35b6101fa61052f565b005b61020461053a565b005b610220600480360361021b9190810190611908565b610545565b005b61023c600480360361023791908101906116cd565b6105dc565b005b610246610630565b6040516102539190612329565b60405180910390f35b610276600480360361027191908101906116cd565b610636565b005b61028061068a565b60405161028d919061209d565b60405180910390f35b6102b060048036036102ab919081019061175b565b6106a6565b005b6102ba610b05565b6040516102c79190612329565b60405180910390f35b6102ea60048036036102e591908101906116cd565b610bcb565b6040516102f79190612082565b60405180910390f35b610308610be8565b6040516103159190612329565b60405180910390f35b610326610bee565b6040516103339190612329565b60405180910390f35b610344610bf4565b005b610360600480360361035b919081019061171f565b610bff565b005b61037c600480360361037791908101906117f0565b610d62565b005b610386611003565b604051610393919061209d565b60405180910390f35b6103a533610bcb565b6103e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103db90612269565b60405180910390fd5b6103ed8161103c565b50565b6103f933610bcb565b610438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042f90612269565b60405180910390fd5b61044181611096565b50565b600061044f33610512565b61048e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610485906122a9565b60405180910390fd5b6104a56003546005546110f090919063ffffffff16565b6104ad610b05565b10156104ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e590612229565b60405180910390fd5b6001905090565b600061050b82600261114590919063ffffffff16565b9050919050565b600061052882600161114590919063ffffffff16565b9050919050565b6105383361120d565b565b61054333611267565b565b61054e336104f5565b61058d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610584906122e9565b60405180910390fd5b81600381905550806004819055507f769ee4ccac1531bdb9405bbbafe6505e85c1a11f7d1e758cfcb9768651bcf9b56003546004546040516105d0929190612374565b60405180910390a15050565b6105e533610bcb565b610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b90612269565b60405180910390fd5b61062d816112c1565b50565b60055481565b61063f336104f5565b61067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906122e9565b60405180910390fd5b6106878161131b565b50565b6040518060600160405280602581526020016124fe6025913981565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d90612289565b60405180910390fd5b82600454811461077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612164565b60405180910390fd5b60006060848461078e91908101906118b4565b91509150600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430c208188846040518363ffffffff1660e01b81526004016107ef929190612059565b60206040518083038186803b15801561080757600080fd5b505afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061083f91908101906117c7565b61087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087590612309565b60405180910390fd5b60008151116108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906121a4565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663430c208130846040518363ffffffff1660e01b815260040161091f929190612059565b60206040518083038186803b15801561093757600080fd5b505afa15801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061096f91908101906117c7565b6109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a5906122c9565b60405180910390fd5b6109c3866006546110f090919063ffffffff16565b6006819055508560086000600754815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610a3e9190612329565b60206040518083038186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8e91908101906116f6565b73ffffffffffffffffffffffffffffffffffffffff16827fc3394c5f6e735c734448afa55eefbce7fa2c55449859aa3f9ab1f6cc6f1922eb60075484604051610ad8929190612344565b60405180910390a3610af660016007546110f090919063ffffffff16565b60078190555050505050505050565b6000610bc6600654600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b68919061203e565b60206040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bb8919081019061188b565b61137590919063ffffffff16565b905090565b6000610be182600061114590919063ffffffff16565b9050919050565b60035481565b60045481565b610bfd33611096565b565b610c0833610bcb565b610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612269565b60405180910390fd5b80806005541015610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490612144565b60405180910390fd5b610ca28260055461137590919063ffffffff16565b600581905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610d05929190612059565b602060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d5791908101906117c7565b610d5d57fe5b505050565b610d6b33610512565b610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906122a9565b60405180910390fd5b610dc16003546005546110f090919063ffffffff16565b610dc9610b05565b1015610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190612229565b60405180910390fd5b6000610e15826113cb565b9050610e2c816005546110f090919063ffffffff16565b6005819055506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b3f9e4cb856040518263ffffffff1660e01b8152600401610e8f9190612329565b60206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610edf91908101906116f6565b90508073ffffffffffffffffffffffffffffffffffffffff166347c816998989876040518463ffffffff1660e01b8152600401610f1e939291906120df565b600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff166347c816998787876040518463ffffffff1660e01b8152600401610f8d939291906121e4565b600060405180830381600087803b158015610fa757600080fd5b505af1158015610fbb573d6000803e3d6000fd5b50505050837f64308d1f172ca5d2a008c997998c974d7bc7143d883024b4611ad01d01f424608484604051610ff1929190612374565b60405180910390a25050505050505050565b6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b61105081600161142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6110aa8160016114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008082840190508381101561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612124565b60405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90612249565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112218160006114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61127b8160026114d590919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b6112d581600061142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b61132f81600261142d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000828211156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190612184565b60405180910390fd5b600082840390508091505092915050565b60008082111561142257600860008381526020019081526020016000205490506114008160065461137590919063ffffffff16565b6006819055506008600083815260200190815260200160002060009055611428565b60035490505b919050565b6114378282611145565b15611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906120bf565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114df8282611145565b61151e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611515906121c4565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008135905061158b816124b8565b92915050565b6000815190506115a0816124b8565b92915050565b6000815190506115b5816124cf565b92915050565b60008083601f8401126115cd57600080fd5b8235905067ffffffffffffffff8111156115e657600080fd5b6020830191508360018202830111156115fe57600080fd5b9250929050565b60008083601f84011261161757600080fd5b8235905067ffffffffffffffff81111561163057600080fd5b60208301915083600182028301111561164857600080fd5b9250929050565b600082601f83011261166057600080fd5b813561167361166e826123ca565b61239d565b9150808252602083016020830185838301111561168f57600080fd5b61169a838284612465565b50505092915050565b6000813590506116b2816124e6565b92915050565b6000815190506116c7816124e6565b92915050565b6000602082840312156116df57600080fd5b60006116ed8482850161157c565b91505092915050565b60006020828403121561170857600080fd5b600061171684828501611591565b91505092915050565b6000806040838503121561173257600080fd5b60006117408582860161157c565b9250506020611751858286016116a3565b9150509250929050565b6000806000806060858703121561177157600080fd5b600061177f8782880161157c565b9450506020611790878288016116a3565b935050604085013567ffffffffffffffff8111156117ad57600080fd5b6117b9878288016115bb565b925092505092959194509250565b6000602082840312156117d957600080fd5b60006117e7848285016115a6565b91505092915050565b6000806000806000806080878903121561180957600080fd5b600087013567ffffffffffffffff81111561182357600080fd5b61182f89828a01611605565b9650965050602087013567ffffffffffffffff81111561184e57600080fd5b61185a89828a01611605565b9450945050604061186d89828a016116a3565b925050606061187e89828a016116a3565b9150509295509295509295565b60006020828403121561189d57600080fd5b60006118ab848285016116b8565b91505092915050565b600080604083850312156118c757600080fd5b60006118d5858286016116a3565b925050602083013567ffffffffffffffff8111156118f257600080fd5b6118fe8582860161164f565b9150509250929050565b6000806040838503121561191b57600080fd5b6000611929858286016116a3565b925050602061193a858286016116a3565b9150509250929050565b61194d8161241d565b82525050565b61195c8161242f565b82525050565b600061196e838561240c565b935061197b838584612465565b611984836124a7565b840190509392505050565b600061199a82612401565b6119a4818561240c565b93506119b4818560208601612474565b6119bd816124a7565b840191505092915050565b60006119d3826123f6565b6119dd818561240c565b93506119ed818560208601612474565b6119f6816124a7565b840191505092915050565b6000611a0e601f8361240c565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000611a4e60178361240c565b91507f736f6369616c2e747769747465722e757365726e616d650000000000000000006000830152602082019050919050565b6000611a8e601b8361240c565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000611ace60348361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20544f4f5f4d60008301527f414e595f544f4b454e535f5245515545535445440000000000000000000000006020830152604082019050919050565b6000611b3460328361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20494e434f5260008301527f524543545f544f4b454e535f414d4f554e5400000000000000000000000000006020830152604082019050919050565b6000611b9a601e8361240c565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b6000611bda60288361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a20434f44455f60008301527f49535f454d5054590000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611c4060218361240c565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ca660228361240c565b91507f76616c69646174696f6e2e736f6369616c2e747769747465722e757365726e6160008301527f6d650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611d0c60408361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a204e4f545f4560008301527f4e4f5547485f544f4b454e535f4f4e5f434f4e54524143545f42414c414e43456020830152604082019050919050565b6000611d7260228361240c565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dd860408361240c565b91507f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732060008301527f6e6f742068617665207468652057686974656c69737441646d696e20726f6c656020830152604082019050919050565b6000611e3e60388361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a2043414e5f4360008301527f414c4c5f46524f4d5f4c494e4b5f544f4b454e5f4f4e4c5900000000000000006020830152604082019050919050565b6000611ea4603a8361240c565b91507f57686974656c6973746564526f6c653a2063616c6c657220646f6573206e6f7460008301527f2068617665207468652057686974656c697374656420726f6c650000000000006020830152604082019050919050565b6000611f0a60368361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a204f5045524160008301527f544f525f53484f554c445f42455f415050524f564544000000000000000000006020830152604082019050919050565b6000611f7060308361240c565b91507f436170706572526f6c653a2063616c6c657220646f6573206e6f74206861766560008301527f207468652043617070657220726f6c65000000000000000000000000000000006020830152604082019050919050565b6000611fd660408361240c565b91507f5477697474657256616c69646174696f6e4f70657261746f723a2053454e444560008301527f525f444f45535f4e4f545f484156455f4143434553535f544f5f444f4d41494e6020830152604082019050919050565b6120388161245b565b82525050565b60006020820190506120536000830184611944565b92915050565b600060408201905061206e6000830185611944565b61207b602083018461202f565b9392505050565b60006020820190506120976000830184611953565b92915050565b600060208201905081810360008301526120b781846119c8565b905092915050565b600060208201905081810360008301526120d881611a01565b9050919050565b600060608201905081810360008301526120f881611a41565b9050818103602083015261210d818587611962565b905061211c604083018461202f565b949350505050565b6000602082019050818103600083015261213d81611a81565b9050919050565b6000602082019050818103600083015261215d81611ac1565b9050919050565b6000602082019050818103600083015261217d81611b27565b9050919050565b6000602082019050818103600083015261219d81611b8d565b9050919050565b600060208201905081810360008301526121bd81611bcd565b9050919050565b600060208201905081810360008301526121dd81611c33565b9050919050565b600060608201905081810360008301526121fd81611c99565b90508181036020830152612212818587611962565b9050612221604083018461202f565b949350505050565b6000602082019050818103600083015261224281611cff565b9050919050565b6000602082019050818103600083015261226281611d65565b9050919050565b6000602082019050818103600083015261228281611dcb565b9050919050565b600060208201905081810360008301526122a281611e31565b9050919050565b600060208201905081810360008301526122c281611e97565b9050919050565b600060208201905081810360008301526122e281611efd565b9050919050565b6000602082019050818103600083015261230281611f63565b9050919050565b6000602082019050818103600083015261232281611fc9565b9050919050565b600060208201905061233e600083018461202f565b92915050565b6000604082019050612359600083018561202f565b818103602083015261236b818461198f565b90509392505050565b6000604082019050612389600083018561202f565b612396602083018461202f565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156123c057600080fd5b8060405250919050565b600067ffffffffffffffff8211156123e157600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b60006124288261243b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612492578082015181840152602081019050612477565b838111156124a1576000848401525b50505050565b6000601f19601f8301169050919050565b6124c18161241d565b81146124cc57600080fd5b50565b6124d88161242f565b81146124e357600080fd5b50565b6124ef8161245b565b81146124fa57600080fd5b5056fe436861696e6c696e6b20547769747465722056616c69646174696f6e204f70657261746f72a365627a7a723158206dc5865dec1e85cab5d34bc96037f289720ae15bb37b90f483e4b4b6f0839ef26c6578706572696d656e74616cf564736f6c634300050c0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d67a6512c5fce7830629e1f3d067115b57fdb333000000000000000000000000c2cc046e7f4f7a3e9715a853fc54907c12364b6b
-----Decoded View---------------
Arg [0] : _registry (address): 0xD1E5b0FF1287aA9f9A268759062E4Ab08b9Dacbe
Arg [1] : _linkToken (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [2] : _paymentCappers (address[]): 0xd67a6512C5FCE7830629e1F3D067115B57fDB333,0xc2cC046e7F4f7A3e9715A853Fc54907c12364b6B
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe
Arg [1] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [4] : 000000000000000000000000d67a6512c5fce7830629e1f3d067115b57fdb333
Arg [5] : 000000000000000000000000c2cc046e7f4f7a3e9715a853fc54907c12364b6b
Deployed Bytecode Sourcemap
22255:8049:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22255:8049:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3413:110;;;;;;;;;;;;;;;;:::i;:::-;;3531:116;;;;;;;;;;;;;;;;:::i;:::-;;26810:123;;;:::i;:::-;;;;;;;;;;;;;;;;4555:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3286:119;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2048:93;;;:::i;:::-;;4772:77;;;:::i;:::-;;27384:351;;;;;;;;;;;;;;;;:::i;:::-;;1924:116;;;;;;;;;;;;;;;;:::i;:::-;;22897:33;;;:::i;:::-;;;;;;;;;;;;;;;;4672:92;;;;;;;;;;;;;;;;:::i;:::-;;22344:69;;;:::i;:::-;;;;;;;;;;;;;;;;28697:816;;;;;;;;;;;;;;;;:::i;:::-;;29650:136;;;:::i;:::-;;;;;;;;;;;;;;;;1791:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22801:43;;;:::i;:::-;;;;;;;;;;;;;;;;22851:39;;;:::i;:::-;;;;;;;;;;;;;;;;3655:87;;;:::i;:::-;;28067:239;;;;;;;;;;;;;;;;:::i;:::-;;26073:603;;;;;;;;;;;;;;;;:::i;:::-;;22420:40;;;:::i;:::-;;;;;;;;;;;;;;;;3413:110;1666:28;1683:10;1666:16;:28::i;:::-;1658:105;;;;;;;;;;;;;;;;;;;;;;3491:24;3507:7;3491:15;:24::i;:::-;3413:110;:::o;3531:116::-;1666:28;1683:10;1666:16;:28::i;:::-;1658:105;;;;;;;;;;;;;;;;;;;;;;3612:27;3631:7;3612:18;:27::i;:::-;3531:116;:::o;26810:123::-;26897:4;3170:25;3184:10;3170:13;:25::i;:::-;3162:96;;;;;;;;;;;;;;;;;;;;;;24818:52;24841:28;;24818:18;;:22;;:52;;;;:::i;:::-;24796:18;:16;:18::i;:::-;:74;;24774:188;;;;;;;;;;;;;;;;;;;;;;26921:4;26914:11;;26810:123;:::o;4555:109::-;4611:4;4635:21;4648:7;4635:8;:12;;:21;;;;:::i;:::-;4628:28;;4555:109;;;:::o;3286:119::-;3347:4;3371:26;3389:7;3371:13;:17;;:26;;;;:::i;:::-;3364:33;;3286:119;;;:::o;2048:93::-;2100:33;2122:10;2100:21;:33::i;:::-;2048:93::o;4772:77::-;4816:25;4830:10;4816:13;:25::i;:::-;4772:77::o;27384:351::-;4454:20;4463:10;4454:8;:20::i;:::-;4446:81;;;;;;;;;;;;;;;;;;;;;;27553:29;27522:28;:60;;;;27620:25;27593:24;:52;;;;27661:66;27672:28;;27702:24;;27661:66;;;;;;;;;;;;;;;;27384:351;;:::o;1924:116::-;1666:28;1683:10;1666:16;:28::i;:::-;1658:105;;;;;;;;;;;;;;;;;;;;;;2005:27;2024:7;2005:18;:27::i;:::-;1924:116;:::o;22897:33::-;;;;:::o;4672:92::-;4454:20;4463:10;4454:8;:20::i;:::-;4446:81;;;;;;;;;;;;;;;;;;;;;;4737:19;4748:7;4737:10;:19::i;:::-;4672:92;:::o;22344:69::-;;;;;;;;;;;;;;;;;;;:::o;28697:816::-;25141:9;;;;;;;;;;;25119:32;;:10;:32;;;25111:101;;;;;;;;;;;;;;;;;;;;;;28820:6;25398:24;;25388:6;:34;25380:97;;;;;;;;;;;;;;;;;;;;;;28840:16;28858:19;28892:5;;28881:36;;;;;;;;;28839:78;;;;28936:8;;;;;;;;;;;:26;;;28963:7;28972:8;28936:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28936:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28936:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28936:45:0;;;;;;;;;28928:122;;;;;;;;;;;;;;;;;;;;;;29091:1;29075:5;29069:19;:23;29061:76;;;;;;;;;;;;;;;;;;;;;;29156:8;;;;;;;;;;;:26;;;29191:4;29198:8;29156:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29156:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29156:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29156:51:0;;;;;;;;;29148:118;;;;;;;;;;;;;;;;;;;;;;29292:24;29309:6;29292:12;;:16;;:24;;;;:::i;:::-;29277:12;:39;;;;29357:6;29327:12;:27;29340:13;;29327:27;;;;;;;;;;;:36;;;;29409:8;;;;;;;;;;;:16;;;29426:8;29409:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29409:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29409:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29409:26:0;;;;;;;;;29381:77;;29399:8;29381:77;29437:13;;29452:5;29381:77;;;;;;;;;;;;;;;;29485:20;29503:1;29485:13;;:17;;:20;;;;:::i;:::-;29469:13;:36;;;;25488:1;;25223;28697:816;;;;:::o;29650:136::-;29699:7;29726:52;29765:12;;29726:9;;;;;;;;;;;:19;;;29754:4;29726:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29726:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29726:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29726:34:0;;;;;;;;;:38;;:52;;;;:::i;:::-;29719:59;;29650:136;:::o;1791:125::-;1855:4;1879:29;1900:7;1879:16;:20;;:29;;;;:::i;:::-;1872:36;;1791:125;;;:::o;22801:43::-;;;;:::o;22851:39::-;;;;:::o;3655:87::-;3704:30;3723:10;3704:18;:30::i;:::-;3655:87::o;28067:239::-;1666:28;1683:10;1666:16;:28::i;:::-;1658:105;;;;;;;;;;;;;;;;;;;;;;28168:7;24534;24512:18;;:29;;24504:94;;;;;;;;;;;;;;;;;;;;;;28209:31;28232:7;28209:18;;:22;;:31;;;;:::i;:::-;28188:18;:52;;;;28258:9;;;;;;;;;;;:18;;;28277:10;28289:7;28258:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28258:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28258:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28258:39:0;;;;;;;;;28251:47;;;;1774:1;28067:239;;:::o;26073:603::-;3170:25;3184:10;3170:13;:25::i;:::-;3162:96;;;;;;;;;;;;;;;;;;;;;;24818:52;24841:28;;24818:18;;:22;;:52;;;;:::i;:::-;24796:18;:16;:18::i;:::-;:74;;24774:188;;;;;;;;;;;;;;;;;;;;;;26260:16;26279:41;26309:10;26279:29;:41::i;:::-;26260:60;;26352:32;26375:8;26352:18;;:22;;:32;;;;:::i;:::-;26331:18;:53;;;;26395:18;26426:8;;;;;;;;;;;:19;;;26446:8;26426:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26426:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26426:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26426:29:0;;;;;;;;;26395:61;;26467:8;:12;;;26507:9;;26518:8;26467:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26467:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26467:60:0;;;;26538:8;:12;;;26589:10;;26601:8;26538:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26538:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26538:72:0;;;;26637:8;26626:42;26647:10;26659:8;26626:42;;;;;;;;;;;;;;;;24973:1;;26073:603;;;;;;:::o;22420:40::-;;;;;;;;;;;;;;;;;;;:::o;3750:137::-;3812:26;3830:7;3812:13;:17;;:26;;;;:::i;:::-;3871:7;3854:25;;;;;;;;;;;;3750:137;:::o;3895:145::-;3960:29;3981:7;3960:13;:20;;:29;;;;:::i;:::-;4024:7;4005:27;;;;;;;;;;;;3895:145;:::o;6037:181::-;6095:7;6115:9;6131:1;6127;:5;6115:17;;6156:1;6151;:6;;6143:46;;;;;;;;;;;;;;;;;;;;;;6209:1;6202:8;;;6037:181;;;;:::o;863:203::-;935:4;979:1;960:21;;:7;:21;;;;952:68;;;;;;;;;;;;;;;;;;;;;;1038:4;:11;;:20;1050:7;1038:20;;;;;;;;;;;;;;;;;;;;;;;;;1031:27;;863:203;;;;:::o;2303:154::-;2371:32;2395:7;2371:16;:23;;:32;;;;:::i;:::-;2441:7;2419:30;;;;;;;;;;;;2303:154;:::o;4987:130::-;5047:24;5063:7;5047:8;:15;;:24;;;;:::i;:::-;5101:7;5087:22;;;;;;;;;;;;4987:130;:::o;2149:146::-;2214:29;2235:7;2214:16;:20;;:29;;;;:::i;:::-;2279:7;2259:28;;;;;;;;;;;;2149:146;:::o;4857:122::-;4914:21;4927:7;4914:8;:12;;:21;;;;:::i;:::-;4963:7;4951:20;;;;;;;;;;;;4857:122;:::o;6493:184::-;6551:7;6584:1;6579;:6;;6571:49;;;;;;;;;;;;;;;;;;;;;;6631:9;6647:1;6643;:5;6631:17;;6668:1;6661:8;;;6493:184;;;;:::o;29794:507::-;29870:29;29929:1;29916:10;:14;29912:382;;;30058:12;:24;30071:10;30058:24;;;;;;;;;;;;30034:48;;30112:39;30129:21;30112:12;;:16;;:39;;;;:::i;:::-;30097:12;:54;;;;30173:12;:24;30186:10;30173:24;;;;;;;;;;;30166:31;;;29912:382;;;30254:28;;30230:52;;29912:382;29794:507;;;:::o;327:178::-;405:18;409:4;415:7;405:3;:18::i;:::-;404:19;396:63;;;;;;;;;;;;;;;;;;;;;;493:4;470;:11;;:20;482:7;470:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;327:178;;:::o;585:183::-;665:18;669:4;675:7;665:3;:18::i;:::-;657:64;;;;;;;;;;;;;;;;;;;;;;755:5;732:4;:11;;:20;744:7;732:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;585:183;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;432:335;;;546:3;539:4;531:6;527:17;523:27;513:2;;564:1;561;554:12;513:2;597:6;584:20;574:30;;624:18;616:6;613:30;610:2;;;656:1;653;646:12;610:2;690:4;682:6;678:17;666:29;;740:3;733;725:6;721:16;711:8;707:31;704:40;701:2;;;757:1;754;747:12;701:2;506:261;;;;;;790:336;;;905:3;898:4;890:6;886:17;882:27;872:2;;923:1;920;913:12;872:2;956:6;943:20;933:30;;983:18;975:6;972:30;969:2;;;1015:1;1012;1005:12;969:2;1049:4;1041:6;1037:17;1025:29;;1099:3;1092;1084:6;1080:16;1070:8;1066:31;1063:40;1060:2;;;1116:1;1113;1106:12;1060:2;865:261;;;;;;1135:434;;1233:3;1226:4;1218:6;1214:17;1210:27;1200:2;;1251:1;1248;1241:12;1200:2;1288:6;1275:20;1310:61;1325:45;1363:6;1325:45;;;1310:61;;;1301:70;;1391:6;1384:5;1377:21;1427:4;1419:6;1415:17;1460:4;1453:5;1449:16;1495:3;1486:6;1481:3;1477:16;1474:25;1471:2;;;1512:1;1509;1502:12;1471:2;1522:41;1556:6;1551:3;1546;1522:41;;;1193:376;;;;;;;;1577:130;;1657:6;1644:20;1635:29;;1669:33;1696:5;1669:33;;;1629:78;;;;;1714:134;;1798:6;1792:13;1783:22;;1810:33;1837:5;1810:33;;;1777:71;;;;;1855:241;;1959:2;1947:9;1938:7;1934:23;1930:32;1927:2;;;1975:1;1972;1965:12;1927:2;2010:1;2027:53;2072:7;2063:6;2052:9;2048:22;2027:53;;;2017:63;;1989:97;1921:175;;;;;2103:263;;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2234:1;2231;2224:12;2186:2;2269:1;2286:64;2342:7;2333:6;2322:9;2318:22;2286:64;;;2276:74;;2248:108;2180:186;;;;;2373:366;;;2494:2;2482:9;2473:7;2469:23;2465:32;2462:2;;;2510:1;2507;2500:12;2462:2;2545:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;;;2552:63;;2524:97;2652:2;2670:53;2715:7;2706:6;2695:9;2691:22;2670:53;;;2660:63;;2631:98;2456:283;;;;;;2746:615;;;;;2903:2;2891:9;2882:7;2878:23;2874:32;2871:2;;;2919:1;2916;2909:12;2871:2;2954:1;2971:53;3016:7;3007:6;2996:9;2992:22;2971:53;;;2961:63;;2933:97;3061:2;3079:53;3124:7;3115:6;3104:9;3100:22;3079:53;;;3069:63;;3040:98;3197:2;3186:9;3182:18;3169:32;3221:18;3213:6;3210:30;3207:2;;;3253:1;3250;3243:12;3207:2;3281:64;3337:7;3328:6;3317:9;3313:22;3281:64;;;3271:74;;;;3148:203;2865:496;;;;;;;;3368:257;;3480:2;3468:9;3459:7;3455:23;3451:32;3448:2;;;3496:1;3493;3486:12;3448:2;3531:1;3548:61;3601:7;3592:6;3581:9;3577:22;3548:61;;;3538:71;;3510:105;3442:183;;;;;3632:869;;;;;;;3827:3;3815:9;3806:7;3802:23;3798:33;3795:2;;;3844:1;3841;3834:12;3795:2;3907:1;3896:9;3892:17;3879:31;3930:18;3922:6;3919:30;3916:2;;;3962:1;3959;3952:12;3916:2;3990:65;4047:7;4038:6;4027:9;4023:22;3990:65;;;3980:75;;;;3858:203;4120:2;4109:9;4105:18;4092:32;4144:18;4136:6;4133:30;4130:2;;;4176:1;4173;4166:12;4130:2;4204:65;4261:7;4252:6;4241:9;4237:22;4204:65;;;4194:75;;;;4071:204;4306:2;4324:53;4369:7;4360:6;4349:9;4345:22;4324:53;;;4314:63;;4285:98;4414:2;4432:53;4477:7;4468:6;4457:9;4453:22;4432:53;;;4422:63;;4393:98;3789:712;;;;;;;;;4508:263;;4623:2;4611:9;4602:7;4598:23;4594:32;4591:2;;;4639:1;4636;4629:12;4591:2;4674:1;4691:64;4747:7;4738:6;4727:9;4723:22;4691:64;;;4681:74;;4653:108;4585:186;;;;;4778:464;;;4905:2;4893:9;4884:7;4880:23;4876:32;4873:2;;;4921:1;4918;4911:12;4873:2;4956:1;4973:53;5018:7;5009:6;4998:9;4994:22;4973:53;;;4963:63;;4935:97;5091:2;5080:9;5076:18;5063:32;5115:18;5107:6;5104:30;5101:2;;;5147:1;5144;5137:12;5101:2;5167:59;5218:7;5209:6;5198:9;5194:22;5167:59;;;5157:69;;5042:190;4867:375;;;;;;5249:366;;;5370:2;5358:9;5349:7;5345:23;5341:32;5338:2;;;5386:1;5383;5376:12;5338:2;5421:1;5438:53;5483:7;5474:6;5463:9;5459:22;5438:53;;;5428:63;;5400:97;5528:2;5546:53;5591:7;5582:6;5571:9;5567:22;5546:53;;;5536:63;;5507:98;5332:283;;;;;;5622:113;5705:24;5723:5;5705:24;;;5700:3;5693:37;5687:48;;;5742:104;5819:21;5834:5;5819:21;;;5814:3;5807:34;5801:45;;;5878:300;;5994:71;6058:6;6053:3;5994:71;;;5987:78;;6077:43;6113:6;6108:3;6101:5;6077:43;;;6142:29;6164:6;6142:29;;;6137:3;6133:39;6126:46;;5980:198;;;;;;6186:347;;6298:39;6331:5;6298:39;;;6349:71;6413:6;6408:3;6349:71;;;6342:78;;6425:52;6470:6;6465:3;6458:4;6451:5;6447:16;6425:52;;;6498:29;6520:6;6498:29;;;6493:3;6489:39;6482:46;;6278:255;;;;;;6540:339;;6648:35;6677:5;6648:35;;;6695:71;6759:6;6754:3;6695:71;;;6688:78;;6771:52;6816:6;6811:3;6804:4;6797:5;6793:16;6771:52;;;6844:29;6866:6;6844:29;;;6839:3;6835:39;6828:46;;6628:251;;;;;;6887:364;;7047:67;7111:2;7106:3;7047:67;;;7040:74;;7147:66;7143:1;7138:3;7134:11;7127:87;7242:2;7237:3;7233:12;7226:19;;7033:218;;;;7260:364;;7420:67;7484:2;7479:3;7420:67;;;7413:74;;7520:66;7516:1;7511:3;7507:11;7500:87;7615:2;7610:3;7606:12;7599:19;;7406:218;;;;7633:364;;7793:67;7857:2;7852:3;7793:67;;;7786:74;;7893:66;7889:1;7884:3;7880:11;7873:87;7988:2;7983:3;7979:12;7972:19;;7779:218;;;;8006:465;;8166:67;8230:2;8225:3;8166:67;;;8159:74;;8266:66;8262:1;8257:3;8253:11;8246:87;8367:66;8362:2;8357:3;8353:12;8346:88;8462:2;8457:3;8453:12;8446:19;;8152:319;;;;8480:465;;8640:67;8704:2;8699:3;8640:67;;;8633:74;;8740:66;8736:1;8731:3;8727:11;8720:87;8841:66;8836:2;8831:3;8827:12;8820:88;8936:2;8931:3;8927:12;8920:19;;8626:319;;;;8954:364;;9114:67;9178:2;9173:3;9114:67;;;9107:74;;9214:66;9210:1;9205:3;9201:11;9194:87;9309:2;9304:3;9300:12;9293:19;;9100:218;;;;9327:465;;9487:67;9551:2;9546:3;9487:67;;;9480:74;;9587:66;9583:1;9578:3;9574:11;9567:87;9688:66;9683:2;9678:3;9674:12;9667:88;9783:2;9778:3;9774:12;9767:19;;9473:319;;;;9801:465;;9961:67;10025:2;10020:3;9961:67;;;9954:74;;10061:66;10057:1;10052:3;10048:11;10041:87;10162:66;10157:2;10152:3;10148:12;10141:88;10257:2;10252:3;10248:12;10241:19;;9947:319;;;;10275:465;;10435:67;10499:2;10494:3;10435:67;;;10428:74;;10535:66;10531:1;10526:3;10522:11;10515:87;10636:66;10631:2;10626:3;10622:12;10615:88;10731:2;10726:3;10722:12;10715:19;;10421:319;;;;10749:465;;10909:67;10973:2;10968:3;10909:67;;;10902:74;;11009:66;11005:1;11000:3;10996:11;10989:87;11110:66;11105:2;11100:3;11096:12;11089:88;11205:2;11200:3;11196:12;11189:19;;10895:319;;;;11223:465;;11383:67;11447:2;11442:3;11383:67;;;11376:74;;11483:66;11479:1;11474:3;11470:11;11463:87;11584:66;11579:2;11574:3;11570:12;11563:88;11679:2;11674:3;11670:12;11663:19;;11369:319;;;;11697:465;;11857:67;11921:2;11916:3;11857:67;;;11850:74;;11957:66;11953:1;11948:3;11944:11;11937:87;12058:66;12053:2;12048:3;12044:12;12037:88;12153:2;12148:3;12144:12;12137:19;;11843:319;;;;12171:465;;12331:67;12395:2;12390:3;12331:67;;;12324:74;;12431:66;12427:1;12422:3;12418:11;12411:87;12532:66;12527:2;12522:3;12518:12;12511:88;12627:2;12622:3;12618:12;12611:19;;12317:319;;;;12645:465;;12805:67;12869:2;12864:3;12805:67;;;12798:74;;12905:66;12901:1;12896:3;12892:11;12885:87;13006:66;13001:2;12996:3;12992:12;12985:88;13101:2;13096:3;13092:12;13085:19;;12791:319;;;;13119:465;;13279:67;13343:2;13338:3;13279:67;;;13272:74;;13379:66;13375:1;13370:3;13366:11;13359:87;13480:66;13475:2;13470:3;13466:12;13459:88;13575:2;13570:3;13566:12;13559:19;;13265:319;;;;13593:465;;13753:67;13817:2;13812:3;13753:67;;;13746:74;;13853:66;13849:1;13844:3;13840:11;13833:87;13954:66;13949:2;13944:3;13940:12;13933:88;14049:2;14044:3;14040:12;14033:19;;13739:319;;;;14067:465;;14227:67;14291:2;14286:3;14227:67;;;14220:74;;14327:66;14323:1;14318:3;14314:11;14307:87;14428:66;14423:2;14418:3;14414:12;14407:88;14523:2;14518:3;14514:12;14507:19;;14213:319;;;;14540:113;14623:24;14641:5;14623:24;;;14618:3;14611:37;14605:48;;;14660:213;;14778:2;14767:9;14763:18;14755:26;;14792:71;14860:1;14849:9;14845:17;14836:6;14792:71;;;14749:124;;;;;14880:324;;15026:2;15015:9;15011:18;15003:26;;15040:71;15108:1;15097:9;15093:17;15084:6;15040:71;;;15122:72;15190:2;15179:9;15175:18;15166:6;15122:72;;;14997:207;;;;;;15211:201;;15323:2;15312:9;15308:18;15300:26;;15337:65;15399:1;15388:9;15384:17;15375:6;15337:65;;;15294:118;;;;;15419:293;;15553:2;15542:9;15538:18;15530:26;;15603:9;15597:4;15593:20;15589:1;15578:9;15574:17;15567:47;15628:74;15697:4;15688:6;15628:74;;;15620:82;;15524:188;;;;;15719:407;;15910:2;15899:9;15895:18;15887:26;;15960:9;15954:4;15950:20;15946:1;15935:9;15931:17;15924:47;15985:131;16111:4;15985:131;;;15977:139;;15881:245;;;;16133:737;;16410:2;16399:9;16395:18;16387:26;;16460:9;16454:4;16450:20;16446:1;16435:9;16431:17;16424:47;16485:131;16611:4;16485:131;;;16477:139;;16664:9;16658:4;16654:20;16649:2;16638:9;16634:18;16627:48;16689:88;16772:4;16763:6;16755;16689:88;;;16681:96;;16788:72;16856:2;16845:9;16841:18;16832:6;16788:72;;;16381:489;;;;;;;16877:407;;17068:2;17057:9;17053:18;17045:26;;17118:9;17112:4;17108:20;17104:1;17093:9;17089:17;17082:47;17143:131;17269:4;17143:131;;;17135:139;;17039:245;;;;17291:407;;17482:2;17471:9;17467:18;17459:26;;17532:9;17526:4;17522:20;17518:1;17507:9;17503:17;17496:47;17557:131;17683:4;17557:131;;;17549:139;;17453:245;;;;17705:407;;17896:2;17885:9;17881:18;17873:26;;17946:9;17940:4;17936:20;17932:1;17921:9;17917:17;17910:47;17971:131;18097:4;17971:131;;;17963:139;;17867:245;;;;18119:407;;18310:2;18299:9;18295:18;18287:26;;18360:9;18354:4;18350:20;18346:1;18335:9;18331:17;18324:47;18385:131;18511:4;18385:131;;;18377:139;;18281:245;;;;18533:407;;18724:2;18713:9;18709:18;18701:26;;18774:9;18768:4;18764:20;18760:1;18749:9;18745:17;18738:47;18799:131;18925:4;18799:131;;;18791:139;;18695:245;;;;18947:407;;19138:2;19127:9;19123:18;19115:26;;19188:9;19182:4;19178:20;19174:1;19163:9;19159:17;19152:47;19213:131;19339:4;19213:131;;;19205:139;;19109:245;;;;19361:737;;19638:2;19627:9;19623:18;19615:26;;19688:9;19682:4;19678:20;19674:1;19663:9;19659:17;19652:47;19713:131;19839:4;19713:131;;;19705:139;;19892:9;19886:4;19882:20;19877:2;19866:9;19862:18;19855:48;19917:88;20000:4;19991:6;19983;19917:88;;;19909:96;;20016:72;20084:2;20073:9;20069:18;20060:6;20016:72;;;19609:489;;;;;;;20105:407;;20296:2;20285:9;20281:18;20273:26;;20346:9;20340:4;20336:20;20332:1;20321:9;20317:17;20310:47;20371:131;20497:4;20371:131;;;20363:139;;20267:245;;;;20519:407;;20710:2;20699:9;20695:18;20687:26;;20760:9;20754:4;20750:20;20746:1;20735:9;20731:17;20724:47;20785:131;20911:4;20785:131;;;20777:139;;20681:245;;;;20933:407;;21124:2;21113:9;21109:18;21101:26;;21174:9;21168:4;21164:20;21160:1;21149:9;21145:17;21138:47;21199:131;21325:4;21199:131;;;21191:139;;21095:245;;;;21347:407;;21538:2;21527:9;21523:18;21515:26;;21588:9;21582:4;21578:20;21574:1;21563:9;21559:17;21552:47;21613:131;21739:4;21613:131;;;21605:139;;21509:245;;;;21761:407;;21952:2;21941:9;21937:18;21929:26;;22002:9;21996:4;21992:20;21988:1;21977:9;21973:17;21966:47;22027:131;22153:4;22027:131;;;22019:139;;21923:245;;;;22175:407;;22366:2;22355:9;22351:18;22343:26;;22416:9;22410:4;22406:20;22402:1;22391:9;22387:17;22380:47;22441:131;22567:4;22441:131;;;22433:139;;22337:245;;;;22589:407;;22780:2;22769:9;22765:18;22757:26;;22830:9;22824:4;22820:20;22816:1;22805:9;22801:17;22794:47;22855:131;22981:4;22855:131;;;22847:139;;22751:245;;;;23003:407;;23194:2;23183:9;23179:18;23171:26;;23244:9;23238:4;23234:20;23230:1;23219:9;23215:17;23208:47;23269:131;23395:4;23269:131;;;23261:139;;23165:245;;;;23417:213;;23535:2;23524:9;23520:18;23512:26;;23549:71;23617:1;23606:9;23602:17;23593:6;23549:71;;;23506:124;;;;;23637:412;;23803:2;23792:9;23788:18;23780:26;;23817:71;23885:1;23874:9;23870:17;23861:6;23817:71;;;23936:9;23930:4;23926:20;23921:2;23910:9;23906:18;23899:48;23961:78;24034:4;24025:6;23961:78;;;23953:86;;23774:275;;;;;;24056:324;;24202:2;24191:9;24187:18;24179:26;;24216:71;24284:1;24273:9;24269:17;24260:6;24216:71;;;24298:72;24366:2;24355:9;24351:18;24342:6;24298:72;;;24173:207;;;;;;24387:256;;24449:2;24443:9;24433:19;;24487:4;24479:6;24475:17;24586:6;24574:10;24571:22;24550:18;24538:10;24535:34;24532:62;24529:2;;;24607:1;24604;24597:12;24529:2;24627:10;24623:2;24616:22;24427:216;;;;;24650:318;;24790:18;24782:6;24779:30;24776:2;;;24822:1;24819;24812:12;24776:2;24889:4;24885:9;24878:4;24870:6;24866:17;24862:33;24854:41;;24953:4;24947;24943:15;24935:23;;24713:255;;;;24975:118;;25065:5;25059:12;25049:22;;25030:63;;;;25100:122;;25194:5;25188:12;25178:22;;25159:63;;;;25230:163;;25345:6;25340:3;25333:19;25382:4;25377:3;25373:14;25358:29;;25326:67;;;;;25401:91;;25463:24;25481:5;25463:24;;;25452:35;;25446:46;;;;25499:85;;25572:5;25565:13;25558:21;25547:32;;25541:43;;;;25591:121;;25664:42;25657:5;25653:54;25642:65;;25636:76;;;;25719:72;;25781:5;25770:16;;25764:27;;;;25799:145;25880:6;25875:3;25870;25857:30;25936:1;25927:6;25922:3;25918:16;25911:27;25850:94;;;;25953:268;26018:1;26025:101;26039:6;26036:1;26033:13;26025:101;;;26115:1;26110:3;26106:11;26100:18;26096:1;26091:3;26087:11;26080:39;26061:2;26058:1;26054:10;26049:15;;26025:101;;;26141:6;26138:1;26135:13;26132:2;;;26206:1;26197:6;26192:3;26188:16;26181:27;26132:2;26002:219;;;;;26229:97;;26317:2;26313:7;26308:2;26301:5;26297:14;26293:28;26283:38;;26277:49;;;;26334:117;26403:24;26421:5;26403:24;;;26396:5;26393:35;26383:2;;26442:1;26439;26432:12;26383:2;26377:74;;26458:111;26524:21;26539:5;26524:21;;;26517:5;26514:32;26504:2;;26560:1;26557;26550:12;26504:2;26498:71;;26576:117;26645:24;26663:5;26645:24;;;26638:5;26635:35;26625:2;;26684:1;26681;26674:12;26625:2;26619:74;
Swarm Source
bzzr://6dc5865dec1e85cab5d34bc96037f289720ae15bb37b90f483e4b4b6f0839ef2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $10.96 | 97.9738 | $1,073.79 |
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.