Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0.006 ETH
Eth Value
$12.37 (@ $2,062.38/ETH)Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Main Contrac... | 16733998 | 1121 days ago | IN | 0 ETH | 0.00123829 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MarquisBanquet
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-03-01
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @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) {
return a + b;
}
/**
* @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) {
return a - b;
}
/**
* @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) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting 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) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message 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,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* 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,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface VRFCoordinatorV2Interface {
/**
* @notice Get configuration relevant for making requests
* @return minimumRequestConfirmations global min for request confirmations
* @return maxGasLimit global max for request gas limit
* @return s_provingKeyHashes list of registered key hashes
*/
function getRequestConfig()
external
view
returns (
uint16,
uint32,
bytes32[] memory
);
/**
* @notice Request a set of random words.
* @param keyHash - Corresponds to a particular oracle job which uses
* that key for generating the VRF proof. Different keyHash's have different gas price
* ceilings, so you can select a specific one to bound your maximum per request cost.
* @param subId - The ID of the VRF subscription. Must be funded
* with the minimum subscription balance required for the selected keyHash.
* @param minimumRequestConfirmations - How many blocks you'd like the
* oracle to wait before responding to the request. See SECURITY CONSIDERATIONS
* for why you may want to request more. The acceptable range is
* [minimumRequestBlockConfirmations, 200].
* @param callbackGasLimit - How much gas you'd like to receive in your
* fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords
* may be slightly less than this amount because of gas used calling the function
* (argument decoding etc.), so you may need to request slightly more than you expect
* to have inside fulfillRandomWords. The acceptable range is
* [0, maxGasLimit]
* @param numWords - The number of uint256 random values you'd like to receive
* in your fulfillRandomWords callback. Note these numbers are expanded in a
* secure way by the VRFCoordinator from a single random value supplied by the oracle.
* @return requestId - A unique identifier of the request. Can be used to match
* a request to a response in fulfillRandomWords.
*/
function requestRandomWords(
bytes32 keyHash,
uint64 subId,
uint16 minimumRequestConfirmations,
uint32 callbackGasLimit,
uint32 numWords
) external returns (uint256 requestId);
/**
* @notice Create a VRF subscription.
* @return subId - A unique subscription id.
* @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.
* @dev Note to fund the subscription, use transferAndCall. For example
* @dev LINKTOKEN.transferAndCall(
* @dev address(COORDINATOR),
* @dev amount,
* @dev abi.encode(subId));
*/
function createSubscription() external returns (uint64 subId);
/**
* @notice Get a VRF subscription.
* @param subId - ID of the subscription
* @return balance - LINK balance of the subscription in juels.
* @return reqCount - number of requests for this subscription, determines fee tier.
* @return owner - owner of the subscription.
* @return consumers - list of consumer address which are able to use this subscription.
*/
function getSubscription(uint64 subId)
external
view
returns (
uint96 balance,
uint64 reqCount,
address owner,
address[] memory consumers
);
/**
* @notice Request subscription owner transfer.
* @param subId - ID of the subscription
* @param newOwner - proposed new owner of the subscription
*/
function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;
/**
* @notice Request subscription owner transfer.
* @param subId - ID of the subscription
* @dev will revert if original owner of subId has
* not requested that msg.sender become the new owner.
*/
function acceptSubscriptionOwnerTransfer(uint64 subId) external;
/**
* @notice Add a consumer to a VRF subscription.
* @param subId - ID of the subscription
* @param consumer - New consumer which can use the subscription
*/
function addConsumer(uint64 subId, address consumer) external;
/**
* @notice Remove a consumer from a VRF subscription.
* @param subId - ID of the subscription
* @param consumer - Consumer to remove from the subscription
*/
function removeConsumer(uint64 subId, address consumer) external;
/**
* @notice Cancel a subscription
* @param subId - ID of the subscription
* @param to - Where to send the remaining LINK to
*/
function cancelSubscription(uint64 subId, address to) external;
}
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* 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);
}
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
abstract contract VRFConsumerBaseV2 {
error OnlyCoordinatorCanFulfill(address have, address want);
address private immutable vrfCoordinator;
/**
* @param _vrfCoordinator address of VRFCoordinator contract
*/
constructor(address _vrfCoordinator) {
vrfCoordinator = _vrfCoordinator;
}
/**
* @notice fulfillRandomness handles the VRF response. Your contract must
* @notice implement it. See "SECURITY CONSIDERATIONS" above for important
* @notice principles to keep in mind when implementing your fulfillRandomness
* @notice method.
*
* @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this
* @dev signature, and will call it once it has verified the proof
* @dev associated with the randomness. (It is triggered via a call to
* @dev rawFulfillRandomness, below.)
*
* @param requestId The Id initially returned by requestRandomness
* @param randomWords the VRF output expanded to the requested number of words
*/
function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;
// rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
// proof. rawFulfillRandomness then calls fulfillRandomness, after validating
// the origin of the call
function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
if (msg.sender != vrfCoordinator) {
revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
}
fulfillRandomWords(requestId, randomWords);
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
contract MarquisBanquet is Ownable, VRFConsumerBaseV2 {
using SafeMath for uint256;
struct KeyInfo {
bool shuffle;
uint256 ownerTokenId;
uint256 changeBlockNumber;
bytes32 ownerSignature;
}
struct Payment {
bool approved;
bool paid;
uint256 amount;
address to;
uint256 expirationBlock;
}
uint256 private constant INVALID_TOKEN_ID = type(uint256).max;
uint256 private constant ONE_HOUR_BLOCKS = 300; // ~ an hour
bool public isRunning;
uint256 public bountyBalance;
uint256 private shuffleRequestId;
uint256 private shuffleStartBlock;
// Verified Random Function (VRFv2) variables
bytes32 public keyHash;
uint256 public subscriptionId;
VRFCoordinatorV2Interface vrfCoordinatorIface;
IERC721Enumerable mainContract;
KeyInfo[4] private keys;
// Bounty balance and reward variables
uint256 cleanPaymentsIndex;
uint256[] private allPaymentIds;
mapping(address => uint256[]) private userPaymentIds;
mapping(uint256 => Payment) private payments;
event RewardPaid(address to, uint256 amount);
modifier whenRunning() {
require(isRunning, "not running");
_;
}
modifier whenNotShuffling() {
require(block.number.sub(shuffleStartBlock) > (ONE_HOUR_BLOCKS * 24), "shuffling");
_;
}
constructor(address _vrfCoordinator, bytes32 _keyHash, uint256 _subscriptionId) VRFConsumerBaseV2(_vrfCoordinator) {
vrfCoordinatorIface = VRFCoordinatorV2Interface(_vrfCoordinator);
keyHash = _keyHash;
subscriptionId = _subscriptionId;
keys[0].ownerSignature = 0xf892afaa24442adb2ac89ab748bf4690e224a9f20c2a6ce10c067f8cabd8b5d2;
keys[1].ownerSignature = 0xd6e7a87deffdf73e47a03e5ba13787cb7be05b8c772a6c0f13dade69ba7a6aa4;
keys[2].ownerSignature = 0x9a2865ea99380dcd0f2d3f2905ecf562920f6b186ccae7187bd5dbd9d56b54c9;
keys[3].ownerSignature = 0x116bcd8a7089a68db23d0bb8294ccaaf147e20b5b23547b9d7a9522727392476;
// this is to avoid those cases where token 0 could appear as key-owner, when It is not.
keys[0].ownerTokenId = INVALID_TOKEN_ID;
keys[1].ownerTokenId = INVALID_TOKEN_ID;
keys[2].ownerTokenId = INVALID_TOKEN_ID;
keys[3].ownerTokenId = INVALID_TOKEN_ID;
}
/**
* @dev This method will recieve all sent Eth
*/
receive() external payable {
bountyBalance += msg.value;
}
function setMainContract(address _mainContractAddress) public onlyOwner {
mainContract = IERC721Enumerable(_mainContractAddress);
}
function start() public onlyOwner {
require(address(mainContract) != address(0));
keys[0].changeBlockNumber = block.number;
keys[1].changeBlockNumber = block.number;
keys[2].changeBlockNumber = block.number;
keys[3].changeBlockNumber = block.number;
isRunning = true;
}
function getOwnerSignature(uint256 keyId) public view returns(bytes32) {
require(keyId < 4, "invalid keyId");
return keys[keyId].ownerSignature;
}
function getKeyOwner(uint256 keyId) public view returns(uint256) {
require(keyId < 4, "invalid keyId");
return keys[keyId].ownerTokenId;
}
function getKeyInfo(uint256 keyId) public view returns (KeyInfo memory) {
return keys[keyId];
}
/*
*
*/
function claimKey(uint256 keyId, uint256 tokenId, bytes32 secret) public whenNotShuffling {
require(keys[keyId].ownerTokenId == INVALID_TOKEN_ID, "key already owned");
require(mainContract.ownerOf(tokenId) == address(msg.sender), "not tokenId owner");
bytes32 signture = keccak256(abi.encodePacked(tokenId, secret));
require(signture == keys[keyId].ownerSignature, "wrong signatue");
keys[keyId].changeBlockNumber = block.number;
keys[keyId].ownerTokenId = tokenId;
}
function transferKey(uint256 keyId, uint256 toTokenId) public whenNotShuffling {
require(keyId < 4, "invalid keyId");
require(mainContract.ownerOf(keys[keyId].ownerTokenId) == address(msg.sender), "key owner error");
require(mainContract.ownerOf(toTokenId) == address(msg.sender), "toTokenId error");
require(block.number.sub(keys[keyId].changeBlockNumber) > ONE_HOUR_BLOCKS, "one transfer x hour");
require(keys[keyId].ownerTokenId != toTokenId, "already own the key");
keys[keyId].changeBlockNumber = block.number;
keys[keyId].ownerTokenId = toTokenId;
}
function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
if (requestId != shuffleRequestId)
return;
uint256 randomWord = randomWords[0];
for(uint8 keyId = 0; keyId < 4; keyId++) {
if (keys[keyId].shuffle) {
keys[keyId].ownerTokenId = randomWord.mod(mainContract.totalSupply());
randomWord = randomWord >> 16;
keys[keyId].shuffle = false;
keys[keyId].changeBlockNumber = block.number;
}
}
payments[requestId].approved = true;
shuffleStartBlock = 0;
}
function _requestShuffle(uint256 _amount, address _to) private {
require(subscriptionId > 0, "VRF no set up");
shuffleStartBlock = block.number;
shuffleRequestId = vrfCoordinatorIface.requestRandomWords(
keyHash,
uint64(subscriptionId),
3,
200000,
1
);
payments[shuffleRequestId] = Payment({
approved: false,
paid: false,
amount: _amount,
to: _to,
expirationBlock: (block.number + (ONE_HOUR_BLOCKS * 24 * 7))
});
userPaymentIds[_to].push(shuffleRequestId);
allPaymentIds.push(shuffleRequestId);
}
function shuffle() public whenRunning whenNotShuffling {
uint128 keysToShuffle = 0;
uint128 keyId = 0;
uint256 _rewardAmount;
for(; keyId < 4; keyId++) {
keys[keyId].shuffle = (block.number.sub(keys[keyId].changeBlockNumber) > (ONE_HOUR_BLOCKS * 24 * 30));
if (keys[keyId].shuffle)
keysToShuffle += 1;
}
if (keysToShuffle == 0)
revert("no keys to shuffle");
_rewardAmount = bountyBalance.div(100).mul(keysToShuffle); // In this case, 1% of bounty per key, is paid as reward
bountyBalance -= _rewardAmount;
_requestShuffle(_rewardAmount, address(msg.sender));
}
function claimBounty() public whenRunning whenNotShuffling {
require(bountyBalance > 0, "no balance to claim");
uint256 _rewardAmount = bountyBalance;
bountyBalance = 0;
for(uint8 keyId = 0; keyId < 4; keyId++) {
require(mainContract.ownerOf(keys[keyId].ownerTokenId) == address(msg.sender), "not key owner");
keys[keyId].shuffle = true;
}
_requestShuffle(_rewardAmount, address(msg.sender));
}
function getUserPayments(address user) public view returns(uint256[] memory) {
return userPaymentIds[user];
}
function getPaymentInfo(uint256 paymentId) public view returns (Payment memory) {
return payments[paymentId];
}
function claimPayment(uint256 paymentId) public {
require(payments[paymentId].approved && !payments[paymentId].paid, "not approved or already paid");
require(payments[paymentId].to == address(msg.sender), "payment owner error");
require(payments[paymentId].expirationBlock >= block.number, "expired payment");
payments[paymentId].paid = true;
(bool success, ) = payments[paymentId].to.call{value: payments[paymentId].amount}("");
require(success, 'transaction error');
}
function cleanPayments() public {
require(cleanPaymentsIndex < allPaymentIds.length);
require(
payments[allPaymentIds[cleanPaymentsIndex]].expirationBlock < block.number,
"no expired payments"
);
for(; cleanPaymentsIndex < allPaymentIds.length; cleanPaymentsIndex++) {
Payment memory _payment = payments[allPaymentIds[cleanPaymentsIndex]];
if(_payment.paid == true) {
continue;
}
// Is It not expired?
if(_payment.expirationBlock >= block.number) {
break;
}
// If we are here is because the payment was not paid and It is expired
bountyBalance += _payment.amount;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"uint256","name":"_subscriptionId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"inputs":[],"name":"bountyBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32","name":"secret","type":"bytes32"}],"name":"claimKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"paymentId","type":"uint256"}],"name":"claimPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cleanPayments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyId","type":"uint256"}],"name":"getKeyInfo","outputs":[{"components":[{"internalType":"bool","name":"shuffle","type":"bool"},{"internalType":"uint256","name":"ownerTokenId","type":"uint256"},{"internalType":"uint256","name":"changeBlockNumber","type":"uint256"},{"internalType":"bytes32","name":"ownerSignature","type":"bytes32"}],"internalType":"struct MarquisBanquet.KeyInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyId","type":"uint256"}],"name":"getKeyOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyId","type":"uint256"}],"name":"getOwnerSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"paymentId","type":"uint256"}],"name":"getPaymentInfo","outputs":[{"components":[{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"bool","name":"paid","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"expirationBlock","type":"uint256"}],"internalType":"struct MarquisBanquet.Payment","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPayments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRunning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainContractAddress","type":"address"}],"name":"setMainContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shuffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscriptionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"keyId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"transferKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040523480156200001157600080fd5b5060405162003cfb38038062003cfb8339818101604052810190620000379190620004bd565b82620000586200004c6200031160201b60201c565b6200031960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600481905550806005819055507ff892afaa24442adb2ac89ab748bf4690e224a9f20c2a6ce10c067f8cabd8b5d260001b600860006004811062000118576200011762000519565b5b60040201600301819055507fd6e7a87deffdf73e47a03e5ba13787cb7be05b8c772a6c0f13dade69ba7a6aa460001b60086001600481106200015f576200015e62000519565b5b60040201600301819055507f9a2865ea99380dcd0f2d3f2905ecf562920f6b186ccae7187bd5dbd9d56b54c960001b6008600260048110620001a657620001a562000519565b5b60040201600301819055507f116bcd8a7089a68db23d0bb8294ccaaf147e20b5b23547b9d7a952272739247660001b6008600360048110620001ed57620001ec62000519565b5b60040201600301819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860006004811062000231576200023062000519565b5b60040201600101819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860016004811062000275576200027462000519565b5b60040201600101819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6008600260048110620002b957620002b862000519565b5b60040201600101819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6008600360048110620002fd57620002fc62000519565b5b600402016001018190555050505062000548565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040f82620003e2565b9050919050565b620004218162000402565b81146200042d57600080fd5b50565b600081519050620004418162000416565b92915050565b6000819050919050565b6200045c8162000447565b81146200046857600080fd5b50565b6000815190506200047c8162000451565b92915050565b6000819050919050565b620004978162000482565b8114620004a357600080fd5b50565b600081519050620004b7816200048c565b92915050565b600080600060608486031215620004d957620004d8620003dd565b5b6000620004e98682870162000430565b9350506020620004fc868287016200046b565b92505060406200050f86828701620004a6565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6080516137906200056b600039600081816104cb015261051f01526137906000f3fe60806040526004361061012e5760003560e01c8063715018a6116100ab578063be9a65551161006f578063be9a6555146103db578063c63fdcc7146103f2578063d03b41a91461041b578063d810ff0f14610446578063ee4be28814610483578063f2fde38b1461049a5761014d565b8063715018a6146103085780637390020b1461031f57806381dff4e51461035c5780638da5cb5b146103735780639d7dadeb1461039e5761014d565b806335dad1e8116100f257806335dad1e8146102115780633ded33bc1461024e5780635be94c781461027757806361728f39146102a05780636294f462146102cb5761014d565b806309c1ba2e146101525780631fe543e31461017d5780632014e5d1146101a65780632520bf04146101d1578063343890e2146101e85761014d565b3661014d57346001600082825461014591906122ed565b925050819055005b600080fd5b34801561015e57600080fd5b506101676104c3565b6040516101749190612330565b60405180910390f35b34801561018957600080fd5b506101a4600480360381019061019f91906124e4565b6104c9565b005b3480156101b257600080fd5b506101bb610589565b6040516101c8919061255b565b60405180910390f35b3480156101dd57600080fd5b506101e661059c565b005b3480156101f457600080fd5b5061020f600480360381019061020a9190612576565b61082c565b005b34801561021d57600080fd5b50610238600480360381019061023391906125b6565b610c12565b60405161024591906125fc565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190612675565b610c7a565b005b34801561028357600080fd5b5061029e600480360381019061029991906126ce565b610d3a565b005b3480156102ac57600080fd5b506102b5610ff4565b6040516102c291906125fc565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed91906125b6565b610ffa565b6040516102ff91906127a3565b60405180910390f35b34801561031457600080fd5b5061031d611065565b005b34801561032b57600080fd5b50610346600480360381019061034191906125b6565b6110ed565b6040516103539190612330565b60405180910390f35b34801561036857600080fd5b50610371611155565b005b34801561037f57600080fd5b50610388611337565b60405161039591906127cd565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190612675565b611360565b6040516103d29190612897565b60405180910390f35b3480156103e757600080fd5b506103f06113f7565b005b3480156103fe57600080fd5b50610419600480360381019061041491906125b6565b61156f565b005b34801561042757600080fd5b50610430611827565b60405161043d9190612330565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906125b6565b61182d565b60405161047a9190612930565b60405180910390f35b34801561048f57600080fd5b506104986118fa565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190612675565b611b8f565b005b60055481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057b57337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f400000000000000000000000000000000000000000000000000000000815260040161057292919061294b565b60405180910390fd5b6105858282611c86565b5050565b600060149054906101000a900460ff1681565b600060149054906101000a900460ff166105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e2906129d1565b60405180910390fd5b601861012c6105fa91906129f1565b61060f60035443611e6790919063ffffffff16565b1161064f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064690612a7f565b60405180910390fd5b60008060005b6004826fffffffffffffffffffffffffffffffff16101561077357601e601861012c61068191906129f1565b61068b91906129f1565b6106cb6008846fffffffffffffffffffffffffffffffff16600481106106b4576106b3612a9f565b5b600402016002015443611e6790919063ffffffff16565b116008836fffffffffffffffffffffffffffffffff16600481106106f2576106f1612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055506008826fffffffffffffffffffffffffffffffff166004811061073657610735612a9f565b5b6004020160000160009054906101000a900460ff16156107605760018361075d9190612aea565b92505b818061076b90612b2e565b925050610655565b6000836fffffffffffffffffffffffffffffffff16036107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bb2565b60405180910390fd5b610802836fffffffffffffffffffffffffffffffff166107f46064600154611e7d90919063ffffffff16565b611e9390919063ffffffff16565b905080600160008282546108169190612bd2565b925050819055506108278133611ea9565b505050565b601861012c61083b91906129f1565b61085060035443611e6790919063ffffffff16565b11610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088790612a7f565b60405180910390fd5b600482106108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90612c52565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6008856004811061093c5761093b612a9f565b5b60040201600101546040518263ffffffff1660e01b81526004016109609190612330565b602060405180830381865afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190612c87565b73ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90612d00565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610a699190612330565b602060405180830381865afa158015610a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaa9190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790612d6c565b60405180910390fd5b61012c610b3160088460048110610b1a57610b19612a9f565b5b600402016002015443611e6790919063ffffffff16565b11610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890612dd8565b60405180910390fd5b8060088360048110610b8657610b85612a9f565b5b600402016001015403610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590612e44565b60405180910390fd5b4360088360048110610be357610be2612a9f565b5b60040201600201819055508060088360048110610c0357610c02612a9f565b5b60040201600101819055505050565b600060048210610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e90612c52565b60405180910390fd5b60088260048110610c6b57610c6a612a9f565b5b60040201600301549050919050565b610c8261215c565b73ffffffffffffffffffffffffffffffffffffffff16610ca0611337565b73ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90612eb0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601861012c610d4991906129f1565b610d5e60035443611e6790919063ffffffff16565b11610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590612a7f565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60088460048110610dd357610dd2612a9f565b5b600402016001015414610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290612f1c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610e8d9190612330565b602060405180830381865afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612f88565b60405180910390fd5b60008282604051602001610f39929190612fea565b60405160208183030381529060405280519060200120905060088460048110610f6557610f64612a9f565b5b60040201600301548114610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590613062565b60405180910390fd5b4360088560048110610fc357610fc2612a9f565b5b60040201600201819055508260088560048110610fe357610fe2612a9f565b5b600402016001018190555050505050565b60045481565b61100261223e565b6008826004811061101657611015612a9f565b5b600402016040518060800160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820154815250509050919050565b61106d61215c565b73ffffffffffffffffffffffffffffffffffffffff1661108b611337565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612eb0565b60405180910390fd5b6110eb6000612164565b565b600060048210611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990612c52565b60405180910390fd5b6008826004811061114657611145612a9f565b5b60040201600101549050919050565b6019805490506018541061116857600080fd5b43601b600060196018548154811061118357611182612a9f565b5b9060005260206000200154815260200190815260200160002060030154106111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906130ce565b60405180910390fd5b5b6019805490506018541015611335576000601b600060196018548154811061120c5761120b612a9f565b5b906000526020600020015481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506001151581602001511515036112e85750611318565b438160800151106112f95750611335565b80604001516001600082825461130f91906122ed565b92505081905550505b6018600081548092919061132b906130ee565b91905055506111e1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156113eb57602002820191906000526020600020905b8154815260200190600101908083116113d7575b50505050509050919050565b6113ff61215c565b73ffffffffffffffffffffffffffffffffffffffff1661141d611337565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90612eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114ce57600080fd5b4360086000600481106114e4576114e3612a9f565b5b600402016002018190555043600860016004811061150557611504612a9f565b5b600402016002018190555043600860026004811061152657611525612a9f565b5b600402016002018190555043600860036004811061154757611546612a9f565b5b60040201600201819055506001600060146101000a81548160ff021916908315150217905550565b601b600082815260200190815260200160002060000160009054906101000a900460ff1680156115c05750601b600082815260200190815260200160002060000160019054906101000a900460ff16155b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613182565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601b600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a906131ee565b60405180910390fd5b43601b60008381526020019081526020016000206003015410156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f39061325a565b60405180910390fd5b6001601b600083815260200190815260200160002060000160016101000a81548160ff0219169083151502179055506000601b600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601b60008481526020019081526020016000206001015460405161179d906132ab565b60006040518083038185875af1925050503d80600081146117da576040519150601f19603f3d011682016040523d82523d6000602084013e6117df565b606091505b5050905080611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a9061330c565b60405180910390fd5b5050565b60015481565b61183561226b565b601b60008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509050919050565b600060149054906101000a900460ff16611949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611940906129d1565b60405180910390fd5b601861012c61195891906129f1565b61196d60035443611e6790919063ffffffff16565b116119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490612a7f565b60405180910390fd5b6000600154116119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613378565b60405180910390fd5b60006001549050600060018190555060005b60048160ff161015611b81573373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e60088460ff1660048110611a7c57611a7b612a9f565b5b60040201600101546040518263ffffffff1660e01b8152600401611aa09190612330565b602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906133e4565b60405180910390fd5b600160088260ff1660048110611b5057611b4f612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055508080611b7990613411565b915050611a04565b50611b8c8133611ea9565b50565b611b9761215c565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611337565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290612eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c71906134ac565b60405180910390fd5b611c8381612164565b50565b6002548203611e6357600081600081518110611ca557611ca4612a9f565b5b6020026020010151905060005b60048160ff161015611e295760088160ff1660048110611cd557611cd4612a9f565b5b6004020160000160009054906101000a900460ff1615611e1657611d92600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906134e1565b8361222890919063ffffffff16565b60088260ff1660048110611da957611da8612a9f565b5b6004020160010181905550601082901c9150600060088260ff1660048110611dd457611dd3612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055504360088260ff1660048110611e0a57611e09612a9f565b5b60040201600201819055505b8080611e2190613411565b915050611cb2565b506001601b600085815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600381905550505b5050565b60008183611e759190612bd2565b905092915050565b60008183611e8b919061353d565b905092915050565b60008183611ea191906129f1565b905092915050565b600060055411611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906135ba565b60405180910390fd5b43600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600454600554600362030d4060016040518663ffffffff1660e01b8152600401611f619594939291906136d6565b6020604051808303816000875af1158015611f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa491906134e1565b6002819055506040518060a001604052806000151581526020016000151581526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016007601861012c611ffa91906129f1565b61200491906129f1565b4361200f91906122ed565b815250601b6000600254815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030155905050601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002549080600181540180825580915050600190039060005260206000200160009091909190915055601960025490806001815401808255809150506001900390600052602060002001600090919091909150555050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122369190613729565b905092915050565b60405180608001604052806000151581526020016000815260200160008152602001600080191681525090565b6040518060a0016040528060001515815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122f8826122b4565b9150612303836122b4565b925082820190508082111561231b5761231a6122be565b5b92915050565b61232a816122b4565b82525050565b60006020820190506123456000830184612321565b92915050565b6000604051905090565b600080fd5b600080fd5b612368816122b4565b811461237357600080fd5b50565b6000813590506123858161235f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123d982612390565b810181811067ffffffffffffffff821117156123f8576123f76123a1565b5b80604052505050565b600061240b61234b565b905061241782826123d0565b919050565b600067ffffffffffffffff821115612437576124366123a1565b5b602082029050602081019050919050565b600080fd5b600061246061245b8461241c565b612401565b9050808382526020820190506020840283018581111561248357612482612448565b5b835b818110156124ac57806124988882612376565b845260208401935050602081019050612485565b5050509392505050565b600082601f8301126124cb576124ca61238b565b5b81356124db84826020860161244d565b91505092915050565b600080604083850312156124fb576124fa612355565b5b600061250985828601612376565b925050602083013567ffffffffffffffff81111561252a5761252961235a565b5b612536858286016124b6565b9150509250929050565b60008115159050919050565b61255581612540565b82525050565b6000602082019050612570600083018461254c565b92915050565b6000806040838503121561258d5761258c612355565b5b600061259b85828601612376565b92505060206125ac85828601612376565b9150509250929050565b6000602082840312156125cc576125cb612355565b5b60006125da84828501612376565b91505092915050565b6000819050919050565b6125f6816125e3565b82525050565b600060208201905061261160008301846125ed565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061264282612617565b9050919050565b61265281612637565b811461265d57600080fd5b50565b60008135905061266f81612649565b92915050565b60006020828403121561268b5761268a612355565b5b600061269984828501612660565b91505092915050565b6126ab816125e3565b81146126b657600080fd5b50565b6000813590506126c8816126a2565b92915050565b6000806000606084860312156126e7576126e6612355565b5b60006126f586828701612376565b935050602061270686828701612376565b9250506040612717868287016126b9565b9150509250925092565b61272a81612540565b82525050565b612739816122b4565b82525050565b612748816125e3565b82525050565b6080820160008201516127646000850182612721565b5060208201516127776020850182612730565b50604082015161278a6040850182612730565b50606082015161279d606085018261273f565b50505050565b60006080820190506127b8600083018461274e565b92915050565b6127c781612637565b82525050565b60006020820190506127e260008301846127be565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006128208383612730565b60208301905092915050565b6000602082019050919050565b6000612844826127e8565b61284e81856127f3565b935061285983612804565b8060005b8381101561288a5781516128718882612814565b975061287c8361282c565b92505060018101905061285d565b5085935050505092915050565b600060208201905081810360008301526128b18184612839565b905092915050565b6128c281612637565b82525050565b60a0820160008201516128de6000850182612721565b5060208201516128f16020850182612721565b5060408201516129046040850182612730565b50606082015161291760608501826128b9565b50608082015161292a6080850182612730565b50505050565b600060a08201905061294560008301846128c8565b92915050565b600060408201905061296060008301856127be565b61296d60208301846127be565b9392505050565b600082825260208201905092915050565b7f6e6f742072756e6e696e67000000000000000000000000000000000000000000600082015250565b60006129bb600b83612974565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b60006129fc826122b4565b9150612a07836122b4565b9250828202612a15816122b4565b91508282048414831517612a2c57612a2b6122be565b5b5092915050565b7f73687566666c696e670000000000000000000000000000000000000000000000600082015250565b6000612a69600983612974565b9150612a7482612a33565b602082019050919050565b60006020820190508181036000830152612a9881612a5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006fffffffffffffffffffffffffffffffff82169050919050565b6000612af582612ace565b9150612b0083612ace565b925082820190506fffffffffffffffffffffffffffffffff811115612b2857612b276122be565b5b92915050565b6000612b3982612ace565b91506fffffffffffffffffffffffffffffffff8203612b5b57612b5a6122be565b5b600182019050919050565b7f6e6f206b65797320746f2073687566666c650000000000000000000000000000600082015250565b6000612b9c601283612974565b9150612ba782612b66565b602082019050919050565b60006020820190508181036000830152612bcb81612b8f565b9050919050565b6000612bdd826122b4565b9150612be8836122b4565b9250828203905081811115612c0057612bff6122be565b5b92915050565b7f696e76616c6964206b6579496400000000000000000000000000000000000000600082015250565b6000612c3c600d83612974565b9150612c4782612c06565b602082019050919050565b60006020820190508181036000830152612c6b81612c2f565b9050919050565b600081519050612c8181612649565b92915050565b600060208284031215612c9d57612c9c612355565b5b6000612cab84828501612c72565b91505092915050565b7f6b6579206f776e6572206572726f720000000000000000000000000000000000600082015250565b6000612cea600f83612974565b9150612cf582612cb4565b602082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b7f746f546f6b656e4964206572726f720000000000000000000000000000000000600082015250565b6000612d56600f83612974565b9150612d6182612d20565b602082019050919050565b60006020820190508181036000830152612d8581612d49565b9050919050565b7f6f6e65207472616e73666572207820686f757200000000000000000000000000600082015250565b6000612dc2601383612974565b9150612dcd82612d8c565b602082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f616c7265616479206f776e20746865206b657900000000000000000000000000600082015250565b6000612e2e601383612974565b9150612e3982612df8565b602082019050919050565b60006020820190508181036000830152612e5d81612e21565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e9a602083612974565b9150612ea582612e64565b602082019050919050565b60006020820190508181036000830152612ec981612e8d565b9050919050565b7f6b657920616c7265616479206f776e6564000000000000000000000000000000600082015250565b6000612f06601183612974565b9150612f1182612ed0565b602082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f6e6f7420746f6b656e4964206f776e6572000000000000000000000000000000600082015250565b6000612f72601183612974565b9150612f7d82612f3c565b602082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000819050919050565b612fc3612fbe826122b4565b612fa8565b82525050565b6000819050919050565b612fe4612fdf826125e3565b612fc9565b82525050565b6000612ff68285612fb2565b6020820191506130068284612fd3565b6020820191508190509392505050565b7f77726f6e67207369676e61747565000000000000000000000000000000000000600082015250565b600061304c600e83612974565b915061305782613016565b602082019050919050565b6000602082019050818103600083015261307b8161303f565b9050919050565b7f6e6f2065787069726564207061796d656e747300000000000000000000000000600082015250565b60006130b8601383612974565b91506130c382613082565b602082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b60006130f9826122b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361312b5761312a6122be565b5b600182019050919050565b7f6e6f7420617070726f766564206f7220616c7265616479207061696400000000600082015250565b600061316c601c83612974565b915061317782613136565b602082019050919050565b6000602082019050818103600083015261319b8161315f565b9050919050565b7f7061796d656e74206f776e6572206572726f7200000000000000000000000000600082015250565b60006131d8601383612974565b91506131e3826131a2565b602082019050919050565b60006020820190508181036000830152613207816131cb565b9050919050565b7f65787069726564207061796d656e740000000000000000000000000000000000600082015250565b6000613244600f83612974565b915061324f8261320e565b602082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b600081905092915050565b50565b600061329560008361327a565b91506132a082613285565b600082019050919050565b60006132b682613288565b9150819050919050565b7f7472616e73616374696f6e206572726f72000000000000000000000000000000600082015250565b60006132f6601183612974565b9150613301826132c0565b602082019050919050565b60006020820190508181036000830152613325816132e9565b9050919050565b7f6e6f2062616c616e636520746f20636c61696d00000000000000000000000000600082015250565b6000613362601383612974565b915061336d8261332c565b602082019050919050565b6000602082019050818103600083015261339181613355565b9050919050565b7f6e6f74206b6579206f776e657200000000000000000000000000000000000000600082015250565b60006133ce600d83612974565b91506133d982613398565b602082019050919050565b600060208201905081810360008301526133fd816133c1565b9050919050565b600060ff82169050919050565b600061341c82613404565b915060ff820361342f5761342e6122be565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613496602683612974565b91506134a18261343a565b604082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b6000815190506134db8161235f565b92915050565b6000602082840312156134f7576134f6612355565b5b6000613505848285016134cc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613548826122b4565b9150613553836122b4565b9250826135635761356261350e565b5b828204905092915050565b7f565246206e6f2073657420757000000000000000000000000000000000000000600082015250565b60006135a4600d83612974565b91506135af8261356e565b602082019050919050565b600060208201905081810360008301526135d381613597565b9050919050565b600067ffffffffffffffff82169050919050565b6135f7816135da565b82525050565b6000819050919050565b600061ffff82169050919050565b6000819050919050565b600061363a613635613630846135fd565b613615565b613607565b9050919050565b61364a8161361f565b82525050565b6000819050919050565b600063ffffffff82169050919050565b600061368561368061367b84613650565b613615565b61365a565b9050919050565b6136958161366a565b82525050565b6000819050919050565b60006136c06136bb6136b68461369b565b613615565b61365a565b9050919050565b6136d0816136a5565b82525050565b600060a0820190506136eb60008301886125ed565b6136f860208301876135ee565b6137056040830186613641565b613712606083018561368c565b61371f60808301846136c7565b9695505050505050565b6000613734826122b4565b915061373f836122b4565b92508261374f5761374e61350e565b5b82820690509291505056fea26469706673582212205bc1cc59bd232d7a471983c4eb9ea0c949c3401f2658cafd4913daa2e19cb28864736f6c63430008120033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909ff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f9200000000000000000000000000000000000000000000000000000000000001bd
Deployed Bytecode
0x60806040526004361061012e5760003560e01c8063715018a6116100ab578063be9a65551161006f578063be9a6555146103db578063c63fdcc7146103f2578063d03b41a91461041b578063d810ff0f14610446578063ee4be28814610483578063f2fde38b1461049a5761014d565b8063715018a6146103085780637390020b1461031f57806381dff4e51461035c5780638da5cb5b146103735780639d7dadeb1461039e5761014d565b806335dad1e8116100f257806335dad1e8146102115780633ded33bc1461024e5780635be94c781461027757806361728f39146102a05780636294f462146102cb5761014d565b806309c1ba2e146101525780631fe543e31461017d5780632014e5d1146101a65780632520bf04146101d1578063343890e2146101e85761014d565b3661014d57346001600082825461014591906122ed565b925050819055005b600080fd5b34801561015e57600080fd5b506101676104c3565b6040516101749190612330565b60405180910390f35b34801561018957600080fd5b506101a4600480360381019061019f91906124e4565b6104c9565b005b3480156101b257600080fd5b506101bb610589565b6040516101c8919061255b565b60405180910390f35b3480156101dd57600080fd5b506101e661059c565b005b3480156101f457600080fd5b5061020f600480360381019061020a9190612576565b61082c565b005b34801561021d57600080fd5b50610238600480360381019061023391906125b6565b610c12565b60405161024591906125fc565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190612675565b610c7a565b005b34801561028357600080fd5b5061029e600480360381019061029991906126ce565b610d3a565b005b3480156102ac57600080fd5b506102b5610ff4565b6040516102c291906125fc565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed91906125b6565b610ffa565b6040516102ff91906127a3565b60405180910390f35b34801561031457600080fd5b5061031d611065565b005b34801561032b57600080fd5b50610346600480360381019061034191906125b6565b6110ed565b6040516103539190612330565b60405180910390f35b34801561036857600080fd5b50610371611155565b005b34801561037f57600080fd5b50610388611337565b60405161039591906127cd565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190612675565b611360565b6040516103d29190612897565b60405180910390f35b3480156103e757600080fd5b506103f06113f7565b005b3480156103fe57600080fd5b50610419600480360381019061041491906125b6565b61156f565b005b34801561042757600080fd5b50610430611827565b60405161043d9190612330565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906125b6565b61182d565b60405161047a9190612930565b60405180910390f35b34801561048f57600080fd5b506104986118fa565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190612675565b611b8f565b005b60055481565b7f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057b57337f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699096040517f1cf993f400000000000000000000000000000000000000000000000000000000815260040161057292919061294b565b60405180910390fd5b6105858282611c86565b5050565b600060149054906101000a900460ff1681565b600060149054906101000a900460ff166105eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e2906129d1565b60405180910390fd5b601861012c6105fa91906129f1565b61060f60035443611e6790919063ffffffff16565b1161064f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064690612a7f565b60405180910390fd5b60008060005b6004826fffffffffffffffffffffffffffffffff16101561077357601e601861012c61068191906129f1565b61068b91906129f1565b6106cb6008846fffffffffffffffffffffffffffffffff16600481106106b4576106b3612a9f565b5b600402016002015443611e6790919063ffffffff16565b116008836fffffffffffffffffffffffffffffffff16600481106106f2576106f1612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055506008826fffffffffffffffffffffffffffffffff166004811061073657610735612a9f565b5b6004020160000160009054906101000a900460ff16156107605760018361075d9190612aea565b92505b818061076b90612b2e565b925050610655565b6000836fffffffffffffffffffffffffffffffff16036107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bb2565b60405180910390fd5b610802836fffffffffffffffffffffffffffffffff166107f46064600154611e7d90919063ffffffff16565b611e9390919063ffffffff16565b905080600160008282546108169190612bd2565b925050819055506108278133611ea9565b505050565b601861012c61083b91906129f1565b61085060035443611e6790919063ffffffff16565b11610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088790612a7f565b60405180910390fd5b600482106108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90612c52565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6008856004811061093c5761093b612a9f565b5b60040201600101546040518263ffffffff1660e01b81526004016109609190612330565b602060405180830381865afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190612c87565b73ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90612d00565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610a699190612330565b602060405180830381865afa158015610a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaa9190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af790612d6c565b60405180910390fd5b61012c610b3160088460048110610b1a57610b19612a9f565b5b600402016002015443611e6790919063ffffffff16565b11610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890612dd8565b60405180910390fd5b8060088360048110610b8657610b85612a9f565b5b600402016001015403610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590612e44565b60405180910390fd5b4360088360048110610be357610be2612a9f565b5b60040201600201819055508060088360048110610c0357610c02612a9f565b5b60040201600101819055505050565b600060048210610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e90612c52565b60405180910390fd5b60088260048110610c6b57610c6a612a9f565b5b60040201600301549050919050565b610c8261215c565b73ffffffffffffffffffffffffffffffffffffffff16610ca0611337565b73ffffffffffffffffffffffffffffffffffffffff1614610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90612eb0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601861012c610d4991906129f1565b610d5e60035443611e6790919063ffffffff16565b11610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590612a7f565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60088460048110610dd357610dd2612a9f565b5b600402016001015414610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290612f1c565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610e8d9190612330565b602060405180830381865afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612f88565b60405180910390fd5b60008282604051602001610f39929190612fea565b60405160208183030381529060405280519060200120905060088460048110610f6557610f64612a9f565b5b60040201600301548114610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590613062565b60405180910390fd5b4360088560048110610fc357610fc2612a9f565b5b60040201600201819055508260088560048110610fe357610fe2612a9f565b5b600402016001018190555050505050565b60045481565b61100261223e565b6008826004811061101657611015612a9f565b5b600402016040518060800160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820154815250509050919050565b61106d61215c565b73ffffffffffffffffffffffffffffffffffffffff1661108b611337565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612eb0565b60405180910390fd5b6110eb6000612164565b565b600060048210611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990612c52565b60405180910390fd5b6008826004811061114657611145612a9f565b5b60040201600101549050919050565b6019805490506018541061116857600080fd5b43601b600060196018548154811061118357611182612a9f565b5b9060005260206000200154815260200190815260200160002060030154106111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906130ce565b60405180910390fd5b5b6019805490506018541015611335576000601b600060196018548154811061120c5761120b612a9f565b5b906000526020600020015481526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505090506001151581602001511515036112e85750611318565b438160800151106112f95750611335565b80604001516001600082825461130f91906122ed565b92505081905550505b6018600081548092919061132b906130ee565b91905055506111e1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156113eb57602002820191906000526020600020905b8154815260200190600101908083116113d7575b50505050509050919050565b6113ff61215c565b73ffffffffffffffffffffffffffffffffffffffff1661141d611337565b73ffffffffffffffffffffffffffffffffffffffff1614611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90612eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114ce57600080fd5b4360086000600481106114e4576114e3612a9f565b5b600402016002018190555043600860016004811061150557611504612a9f565b5b600402016002018190555043600860026004811061152657611525612a9f565b5b600402016002018190555043600860036004811061154757611546612a9f565b5b60040201600201819055506001600060146101000a81548160ff021916908315150217905550565b601b600082815260200190815260200160002060000160009054906101000a900460ff1680156115c05750601b600082815260200190815260200160002060000160019054906101000a900460ff16155b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613182565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601b600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a906131ee565b60405180910390fd5b43601b60008381526020019081526020016000206003015410156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f39061325a565b60405180910390fd5b6001601b600083815260200190815260200160002060000160016101000a81548160ff0219169083151502179055506000601b600083815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601b60008481526020019081526020016000206001015460405161179d906132ab565b60006040518083038185875af1925050503d80600081146117da576040519150601f19603f3d011682016040523d82523d6000602084013e6117df565b606091505b5050905080611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a9061330c565b60405180910390fd5b5050565b60015481565b61183561226b565b601b60008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff16151515158152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509050919050565b600060149054906101000a900460ff16611949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611940906129d1565b60405180910390fd5b601861012c61195891906129f1565b61196d60035443611e6790919063ffffffff16565b116119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490612a7f565b60405180910390fd5b6000600154116119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613378565b60405180910390fd5b60006001549050600060018190555060005b60048160ff161015611b81573373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e60088460ff1660048110611a7c57611a7b612a9f565b5b60040201600101546040518263ffffffff1660e01b8152600401611aa09190612330565b602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190612c87565b73ffffffffffffffffffffffffffffffffffffffff1614611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906133e4565b60405180910390fd5b600160088260ff1660048110611b5057611b4f612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055508080611b7990613411565b915050611a04565b50611b8c8133611ea9565b50565b611b9761215c565b73ffffffffffffffffffffffffffffffffffffffff16611bb5611337565b73ffffffffffffffffffffffffffffffffffffffff1614611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290612eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c71906134ac565b60405180910390fd5b611c8381612164565b50565b6002548203611e6357600081600081518110611ca557611ca4612a9f565b5b6020026020010151905060005b60048160ff161015611e295760088160ff1660048110611cd557611cd4612a9f565b5b6004020160000160009054906101000a900460ff1615611e1657611d92600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8391906134e1565b8361222890919063ffffffff16565b60088260ff1660048110611da957611da8612a9f565b5b6004020160010181905550601082901c9150600060088260ff1660048110611dd457611dd3612a9f565b5b6004020160000160006101000a81548160ff0219169083151502179055504360088260ff1660048110611e0a57611e09612a9f565b5b60040201600201819055505b8080611e2190613411565b915050611cb2565b506001601b600085815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600381905550505b5050565b60008183611e759190612bd2565b905092915050565b60008183611e8b919061353d565b905092915050565b60008183611ea191906129f1565b905092915050565b600060055411611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906135ba565b60405180910390fd5b43600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600454600554600362030d4060016040518663ffffffff1660e01b8152600401611f619594939291906136d6565b6020604051808303816000875af1158015611f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa491906134e1565b6002819055506040518060a001604052806000151581526020016000151581526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016007601861012c611ffa91906129f1565b61200491906129f1565b4361200f91906122ed565b815250601b6000600254815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160030155905050601a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002549080600181540180825580915050600190039060005260206000200160009091909190915055601960025490806001815401808255809150506001900390600052602060002001600090919091909150555050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122369190613729565b905092915050565b60405180608001604052806000151581526020016000815260200160008152602001600080191681525090565b6040518060a0016040528060001515815260200160001515815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122f8826122b4565b9150612303836122b4565b925082820190508082111561231b5761231a6122be565b5b92915050565b61232a816122b4565b82525050565b60006020820190506123456000830184612321565b92915050565b6000604051905090565b600080fd5b600080fd5b612368816122b4565b811461237357600080fd5b50565b6000813590506123858161235f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123d982612390565b810181811067ffffffffffffffff821117156123f8576123f76123a1565b5b80604052505050565b600061240b61234b565b905061241782826123d0565b919050565b600067ffffffffffffffff821115612437576124366123a1565b5b602082029050602081019050919050565b600080fd5b600061246061245b8461241c565b612401565b9050808382526020820190506020840283018581111561248357612482612448565b5b835b818110156124ac57806124988882612376565b845260208401935050602081019050612485565b5050509392505050565b600082601f8301126124cb576124ca61238b565b5b81356124db84826020860161244d565b91505092915050565b600080604083850312156124fb576124fa612355565b5b600061250985828601612376565b925050602083013567ffffffffffffffff81111561252a5761252961235a565b5b612536858286016124b6565b9150509250929050565b60008115159050919050565b61255581612540565b82525050565b6000602082019050612570600083018461254c565b92915050565b6000806040838503121561258d5761258c612355565b5b600061259b85828601612376565b92505060206125ac85828601612376565b9150509250929050565b6000602082840312156125cc576125cb612355565b5b60006125da84828501612376565b91505092915050565b6000819050919050565b6125f6816125e3565b82525050565b600060208201905061261160008301846125ed565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061264282612617565b9050919050565b61265281612637565b811461265d57600080fd5b50565b60008135905061266f81612649565b92915050565b60006020828403121561268b5761268a612355565b5b600061269984828501612660565b91505092915050565b6126ab816125e3565b81146126b657600080fd5b50565b6000813590506126c8816126a2565b92915050565b6000806000606084860312156126e7576126e6612355565b5b60006126f586828701612376565b935050602061270686828701612376565b9250506040612717868287016126b9565b9150509250925092565b61272a81612540565b82525050565b612739816122b4565b82525050565b612748816125e3565b82525050565b6080820160008201516127646000850182612721565b5060208201516127776020850182612730565b50604082015161278a6040850182612730565b50606082015161279d606085018261273f565b50505050565b60006080820190506127b8600083018461274e565b92915050565b6127c781612637565b82525050565b60006020820190506127e260008301846127be565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006128208383612730565b60208301905092915050565b6000602082019050919050565b6000612844826127e8565b61284e81856127f3565b935061285983612804565b8060005b8381101561288a5781516128718882612814565b975061287c8361282c565b92505060018101905061285d565b5085935050505092915050565b600060208201905081810360008301526128b18184612839565b905092915050565b6128c281612637565b82525050565b60a0820160008201516128de6000850182612721565b5060208201516128f16020850182612721565b5060408201516129046040850182612730565b50606082015161291760608501826128b9565b50608082015161292a6080850182612730565b50505050565b600060a08201905061294560008301846128c8565b92915050565b600060408201905061296060008301856127be565b61296d60208301846127be565b9392505050565b600082825260208201905092915050565b7f6e6f742072756e6e696e67000000000000000000000000000000000000000000600082015250565b60006129bb600b83612974565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b60006129fc826122b4565b9150612a07836122b4565b9250828202612a15816122b4565b91508282048414831517612a2c57612a2b6122be565b5b5092915050565b7f73687566666c696e670000000000000000000000000000000000000000000000600082015250565b6000612a69600983612974565b9150612a7482612a33565b602082019050919050565b60006020820190508181036000830152612a9881612a5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006fffffffffffffffffffffffffffffffff82169050919050565b6000612af582612ace565b9150612b0083612ace565b925082820190506fffffffffffffffffffffffffffffffff811115612b2857612b276122be565b5b92915050565b6000612b3982612ace565b91506fffffffffffffffffffffffffffffffff8203612b5b57612b5a6122be565b5b600182019050919050565b7f6e6f206b65797320746f2073687566666c650000000000000000000000000000600082015250565b6000612b9c601283612974565b9150612ba782612b66565b602082019050919050565b60006020820190508181036000830152612bcb81612b8f565b9050919050565b6000612bdd826122b4565b9150612be8836122b4565b9250828203905081811115612c0057612bff6122be565b5b92915050565b7f696e76616c6964206b6579496400000000000000000000000000000000000000600082015250565b6000612c3c600d83612974565b9150612c4782612c06565b602082019050919050565b60006020820190508181036000830152612c6b81612c2f565b9050919050565b600081519050612c8181612649565b92915050565b600060208284031215612c9d57612c9c612355565b5b6000612cab84828501612c72565b91505092915050565b7f6b6579206f776e6572206572726f720000000000000000000000000000000000600082015250565b6000612cea600f83612974565b9150612cf582612cb4565b602082019050919050565b60006020820190508181036000830152612d1981612cdd565b9050919050565b7f746f546f6b656e4964206572726f720000000000000000000000000000000000600082015250565b6000612d56600f83612974565b9150612d6182612d20565b602082019050919050565b60006020820190508181036000830152612d8581612d49565b9050919050565b7f6f6e65207472616e73666572207820686f757200000000000000000000000000600082015250565b6000612dc2601383612974565b9150612dcd82612d8c565b602082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f616c7265616479206f776e20746865206b657900000000000000000000000000600082015250565b6000612e2e601383612974565b9150612e3982612df8565b602082019050919050565b60006020820190508181036000830152612e5d81612e21565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e9a602083612974565b9150612ea582612e64565b602082019050919050565b60006020820190508181036000830152612ec981612e8d565b9050919050565b7f6b657920616c7265616479206f776e6564000000000000000000000000000000600082015250565b6000612f06601183612974565b9150612f1182612ed0565b602082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f6e6f7420746f6b656e4964206f776e6572000000000000000000000000000000600082015250565b6000612f72601183612974565b9150612f7d82612f3c565b602082019050919050565b60006020820190508181036000830152612fa181612f65565b9050919050565b6000819050919050565b612fc3612fbe826122b4565b612fa8565b82525050565b6000819050919050565b612fe4612fdf826125e3565b612fc9565b82525050565b6000612ff68285612fb2565b6020820191506130068284612fd3565b6020820191508190509392505050565b7f77726f6e67207369676e61747565000000000000000000000000000000000000600082015250565b600061304c600e83612974565b915061305782613016565b602082019050919050565b6000602082019050818103600083015261307b8161303f565b9050919050565b7f6e6f2065787069726564207061796d656e747300000000000000000000000000600082015250565b60006130b8601383612974565b91506130c382613082565b602082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b60006130f9826122b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361312b5761312a6122be565b5b600182019050919050565b7f6e6f7420617070726f766564206f7220616c7265616479207061696400000000600082015250565b600061316c601c83612974565b915061317782613136565b602082019050919050565b6000602082019050818103600083015261319b8161315f565b9050919050565b7f7061796d656e74206f776e6572206572726f7200000000000000000000000000600082015250565b60006131d8601383612974565b91506131e3826131a2565b602082019050919050565b60006020820190508181036000830152613207816131cb565b9050919050565b7f65787069726564207061796d656e740000000000000000000000000000000000600082015250565b6000613244600f83612974565b915061324f8261320e565b602082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b600081905092915050565b50565b600061329560008361327a565b91506132a082613285565b600082019050919050565b60006132b682613288565b9150819050919050565b7f7472616e73616374696f6e206572726f72000000000000000000000000000000600082015250565b60006132f6601183612974565b9150613301826132c0565b602082019050919050565b60006020820190508181036000830152613325816132e9565b9050919050565b7f6e6f2062616c616e636520746f20636c61696d00000000000000000000000000600082015250565b6000613362601383612974565b915061336d8261332c565b602082019050919050565b6000602082019050818103600083015261339181613355565b9050919050565b7f6e6f74206b6579206f776e657200000000000000000000000000000000000000600082015250565b60006133ce600d83612974565b91506133d982613398565b602082019050919050565b600060208201905081810360008301526133fd816133c1565b9050919050565b600060ff82169050919050565b600061341c82613404565b915060ff820361342f5761342e6122be565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613496602683612974565b91506134a18261343a565b604082019050919050565b600060208201905081810360008301526134c581613489565b9050919050565b6000815190506134db8161235f565b92915050565b6000602082840312156134f7576134f6612355565b5b6000613505848285016134cc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613548826122b4565b9150613553836122b4565b9250826135635761356261350e565b5b828204905092915050565b7f565246206e6f2073657420757000000000000000000000000000000000000000600082015250565b60006135a4600d83612974565b91506135af8261356e565b602082019050919050565b600060208201905081810360008301526135d381613597565b9050919050565b600067ffffffffffffffff82169050919050565b6135f7816135da565b82525050565b6000819050919050565b600061ffff82169050919050565b6000819050919050565b600061363a613635613630846135fd565b613615565b613607565b9050919050565b61364a8161361f565b82525050565b6000819050919050565b600063ffffffff82169050919050565b600061368561368061367b84613650565b613615565b61365a565b9050919050565b6136958161366a565b82525050565b6000819050919050565b60006136c06136bb6136b68461369b565b613615565b61365a565b9050919050565b6136d0816136a5565b82525050565b600060a0820190506136eb60008301886125ed565b6136f860208301876135ee565b6137056040830186613641565b613712606083018561368c565b61371f60808301846136c7565b9695505050505050565b6000613734826122b4565b915061373f836122b4565b92508261374f5761374e61350e565b5b82820690509291505056fea26469706673582212205bc1cc59bd232d7a471983c4eb9ea0c949c3401f2658cafd4913daa2e19cb28864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909ff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f9200000000000000000000000000000000000000000000000000000000000001bd
-----Decoded View---------------
Arg [0] : _vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [1] : _keyHash (bytes32): 0xff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
Arg [2] : _subscriptionId (uint256): 445
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [1] : ff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001bd
Deployed Bytecode Sourcemap
20470:8940:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23038:9;23021:13;;:26;;;;;;;:::i;:::-;;;;;;;;20470:8940;;;;21237:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18266:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21013:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26602:710;;;;;;;;;;;;;:::i;:::-;;24584:626;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23556:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23063:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24046:530;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21208:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23902:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19839:94;;;;;;;;;;;;;:::i;:::-;;23733:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28618:789;;;;;;;;;;;;;:::i;:::-;;19188:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27813:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23216:332;;;;;;;;;;;;;:::i;:::-;;28077:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21041:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27944:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27320:485;;;;;;;;;;;;;:::i;:::-;;20088:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21237:29;;;;:::o;18266:261::-;18380:14;18366:28;;:10;:28;;;18362:111;;18438:10;18450:14;18412:53;;;;;;;;;;;;:::i;:::-;;;;;;;;18362:111;18479:42;18498:9;18509:11;18479:18;:42::i;:::-;18266:261;;:::o;21013:21::-;;;;;;;;;;;;;:::o;26602:710::-;21720:9;;;;;;;;;;;21712:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;21877:2:::1;20988:3;21859:20;;;;:::i;:::-;21820:35;21837:17;;21820:12;:16;;:35;;;;:::i;:::-;:60;21812:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26668:21:::2;26704:13:::0;26732:21:::2;26766:229;26780:1;26772:5;:9;;;26766:229;;;26904:2;26899;20988:3;26881:20;;;;:::i;:::-;:25;;;;:::i;:::-;26830:47;26847:4;26852:5;26847:11;;;;;;;;;:::i;:::-;;;;;:29;;;26830:12;:16;;:47;;;;:::i;:::-;:77;26807:4;26812:5;26807:11;;;;;;;;;:::i;:::-;;;;;:19;;;:101;;;;;;;;;;;;;;;;;;26927:4;26932:5;26927:11;;;;;;;;;:::i;:::-;;;;;:19;;;;;;;;;;;;26923:60;;;26982:1;26965:18;;;;;:::i;:::-;;;26923:60;26783:7;;;;;:::i;:::-;;;;26766:229;;;27028:1;27011:13;:18;;::::0;27007:65:::2;;27044:28;;;;;;;;;;:::i;:::-;;;;;;;;27007:65;27101:41;27128:13;27101:41;;:22;27119:3;27101:13;;:17;;:22;;;;:::i;:::-;:26;;:41;;;;:::i;:::-;27085:57;;27227:13;27210;;:30;;;;;;;:::i;:::-;;;;;;;;27253:51;27269:13;27292:10;27253:15;:51::i;:::-;26657:655;;;26602:710::o:0;24584:626::-;21877:2;20988:3;21859:20;;;;:::i;:::-;21820:35;21837:17;;21820:12;:16;;:35;;;;:::i;:::-;:60;21812:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;24690:1:::1;24682:5;:9;24674:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:10;24728:69;;:12;;;;;;;;;;;:20;;;24749:4;24754:5;24749:11;;;;;;;:::i;:::-;;;;;:24;;;24728:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;;24720:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:10;24836:54;;:12;;;;;;;;;;;:20;;;24857:9;24836:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;24828:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;20988:3;24929:47;24946:4;24951:5;24946:11;;;;;;;:::i;:::-;;;;;:29;;;24929:12;:16;;:47;;;;:::i;:::-;:65;24921:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25065:9;25037:4;25042:5;25037:11;;;;;;;:::i;:::-;;;;;:24;;;:37:::0;25029:69:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:12;25111:4;25116:5;25111:11;;;;;;;:::i;:::-;;;;;:29;;:44;;;;25193:9;25166:4;25171:5;25166:11;;;;;;;:::i;:::-;;;;;:24;;:36;;;;24584:626:::0;;:::o;23556:169::-;23618:7;23654:1;23646:5;:9;23638:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;23691:4;23696:5;23691:11;;;;;;;:::i;:::-;;;;;:26;;;23684:33;;23556:169;;;:::o;23063:145::-;19419:12;:10;:12::i;:::-;19408:23;;:7;:5;:7::i;:::-;:23;;;19400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:20:::1;23146:12;;:54;;;;;;;;;;;;;;;;;;23063:145:::0;:::o;24046:530::-;21877:2;20988:3;21859:20;;;;:::i;:::-;21820:35;21837:17;;21820:12;:16;;:35;;;;:::i;:::-;:60;21812:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;20921:17:::1;24155:4;24160:5;24155:11;;;;;;;:::i;:::-;;;;;:24;;;:44;24147:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:10;24240:52;;:12;;;;;;;;;;;:20;;;24261:7;24240:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;24232:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;24327:16;24373:7;24382:6;24356:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24346:44;;;;;;24327:63;;24421:4;24426:5;24421:11;;;;;;;:::i;:::-;;;;;:26;;;24409:8;:38;24401:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24511:12;24479:4;24484:5;24479:11;;;;;;;:::i;:::-;;;;;:29;;:44;;;;24561:7;24534:4;24539:5;24534:11;;;;;;;:::i;:::-;;;;;:24;;:34;;;;24136:440;24046:530:::0;;;:::o;21208:22::-;;;;:::o;23902:109::-;23958:14;;:::i;:::-;23992:4;23997:5;23992:11;;;;;;;:::i;:::-;;;;;23985:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23902:109;;;:::o;19839:94::-;19419:12;:10;:12::i;:::-;19408:23;;:7;:5;:7::i;:::-;:23;;;19400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19904:21:::1;19922:1;19904:9;:21::i;:::-;19839:94::o:0;23733:161::-;23789:7;23825:1;23817:5;:9;23809:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;23862:4;23867:5;23862:11;;;;;;;:::i;:::-;;;;;:24;;;23855:31;;23733:161;;;:::o;28618:789::-;28690:13;:20;;;;28669:18;;:41;28661:50;;;;;;28806:12;28744:8;:43;28753:13;28767:18;;28753:33;;;;;;;;:::i;:::-;;;;;;;;;;28744:43;;;;;;;;;;;:59;;;:74;28722:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;28878:522;28905:13;:20;;;;28884:18;;:41;28878:522;;;28964:23;28990:8;:43;28999:13;29013:18;;28999:33;;;;;;;;:::i;:::-;;;;;;;;;;28990:43;;;;;;;;;;;28964:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29070:4;29053:21;;:8;:13;;;:21;;;29050:69;;29095:8;;;29050:69;29201:12;29173:8;:24;;;:40;29170:85;;29234:5;;;29170:85;29373:8;:15;;;29356:13;;:32;;;;;;;:::i;:::-;;;;;;;;28949:451;28878:522;28927:18;;:20;;;;;;;;;:::i;:::-;;;;;;28878:522;;;28618:789::o;19188:87::-;19234:7;19261:6;;;;;;;;;;;19254:13;;19188:87;:::o;27813:123::-;27872:16;27908:14;:20;27923:4;27908:20;;;;;;;;;;;;;;;27901:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27813:123;;;:::o;23216:332::-;19419:12;:10;:12::i;:::-;19408:23;;:7;:5;:7::i;:::-;:23;;;19400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23302:1:::1;23269:35;;23277:12;;;;;;;;;;;23269:35;;::::0;23261:44:::1;;;::::0;::::1;;23346:12;23318:4;23323:1;23318:7;;;;;;;:::i;:::-;;;;;:25;;:40;;;;23397:12;23369:4;23374:1;23369:7;;;;;;;:::i;:::-;;;;;:25;;:40;;;;23448:12;23420:4;23425:1;23420:7;;;;;;;:::i;:::-;;;;;:25;;:40;;;;23499:12;23471:4;23476:1;23471:7;;;;;;;:::i;:::-;;;;;:25;;:40;;;;23536:4;23524:9;;:16;;;;;;;;;;;;;;;;;;23216:332::o:0;28077:533::-;28144:8;:19;28153:9;28144:19;;;;;;;;;;;:28;;;;;;;;;;;;:57;;;;;28177:8;:19;28186:9;28177:19;;;;;;;;;;;:24;;;;;;;;;;;;28176:25;28144:57;28136:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;28287:10;28253:45;;:8;:19;28262:9;28253:19;;;;;;;;;;;:22;;;;;;;;;;;;:45;;;28245:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28380:12;28341:8;:19;28350:9;28341:19;;;;;;;;;;;:35;;;:51;;28333:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28452:4;28425:8;:19;28434:9;28425:19;;;;;;;;;;;:24;;;:31;;;;;;;;;;;;;;;;;;28470:12;28488:8;:19;28497:9;28488:19;;;;;;;;;;;:22;;;;;;;;;;;;:27;;28523:8;:19;28532:9;28523:19;;;;;;;;;;;:26;;;28488:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28469:85;;;28573:7;28565:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;28125:485;28077:533;:::o;21041:28::-;;;;:::o;27944:125::-;28008:14;;:::i;:::-;28042:8;:19;28051:9;28042:19;;;;;;;;;;;28035:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27944:125;;;:::o;27320:485::-;21720:9;;;;;;;;;;;21712:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;21877:2:::1;20988:3;21859:20;;;;:::i;:::-;21820:35;21837:17;;21820:12;:16;;:35;;;;:::i;:::-;:60;21812:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;27414:1:::2;27398:13;;:17;27390:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;27452:21;27476:13;;27452:37;;27516:1;27500:13;:17;;;;27534:11;27530:204;27559:1;27551:5;:9;;;27530:204;;;27652:10;27594:69;;:12;;;;;;;;;;;:20;;;27615:4;27620:5;27615:11;;;;;;;;;:::i;:::-;;;;;:24;;;27594:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;;27586:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;27718:4;27696;27701:5;27696:11;;;;;;;;;:::i;:::-;;;;;:19;;;:26;;;;;;;;;;;;;;;;;;27562:7;;;;;:::i;:::-;;;;27530:204;;;;27746:51;27762:13;27785:10;27746:15;:51::i;:::-;27379:426;27320:485::o:0;20088:192::-;19419:12;:10;:12::i;:::-;19408:23;;:7;:5;:7::i;:::-;:23;;;19400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20197:1:::1;20177:22;;:8;:22;;::::0;20169:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20253:19;20263:8;20253:9;:19::i;:::-;20088:192:::0;:::o;25218:661::-;25341:16;;25328:9;:29;25372:7;25324:55;25391:18;25412:11;25424:1;25412:14;;;;;;;;:::i;:::-;;;;;;;;25391:35;;25443:11;25439:353;25468:1;25460:5;:9;;;25439:353;;;25499:4;25504:5;25499:11;;;;;;;;;:::i;:::-;;;;;:19;;;;;;;;;;;;25495:286;;;25566:42;25581:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25566:10;:14;;:42;;;;:::i;:::-;25539:4;25544:5;25539:11;;;;;;;;;:::i;:::-;;;;;:24;;:69;;;;25654:2;25640:10;:16;;25627:29;;25697:5;25675:4;25680:5;25675:11;;;;;;;;;:::i;:::-;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;25753:12;25721:4;25726:5;25721:11;;;;;;;;;:::i;:::-;;;;;:29;;:44;;;;25495:286;25471:7;;;;;:::i;:::-;;;;25439:353;;;;25835:4;25804:8;:19;25813:9;25804:19;;;;;;;;;;;:28;;;:35;;;;;;;;;;;;;;;;;;25870:1;25850:17;:21;;;;25313:566;25218:661;;;:::o;2801:98::-;2859:7;2890:1;2886;:5;;;;:::i;:::-;2879:12;;2801:98;;;;:::o;3557:::-;3615:7;3646:1;3642;:5;;;;:::i;:::-;3635:12;;3557:98;;;;:::o;3158:::-;3216:7;3247:1;3243;:5;;;;:::i;:::-;3236:12;;3158:98;;;;:::o;25887:707::-;25986:1;25969:14;;:18;25961:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;26036:12;26016:17;:32;;;;26080:19;;;;;;;;;;;:38;;;26133:7;;26162:14;;26192:1;26208:6;26229:1;26080:161;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26061:16;:180;;;;26283:203;;;;;;;;26316:5;26283:203;;;;;;26342:5;26283:203;;;;;;26370:7;26283:203;;;;26396:3;26283:203;;;;;;26471:1;26466:2;20988:3;26448:20;;;;:::i;:::-;:24;;;;:::i;:::-;26432:12;:41;;;;:::i;:::-;26283:203;;;26254:8;:26;26263:16;;26254:26;;;;;;;;;;;:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26497:14;:19;26512:3;26497:19;;;;;;;;;;;;;;;26522:16;;26497:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26550:13;26569:16;;26550:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25887:707;;:::o;18569:98::-;18622:7;18649:10;18642:17;;18569:98;:::o;20288:173::-;20344:16;20363:6;;;;;;;;;;;20344:25;;20389:8;20380:6;;:17;;;;;;;;;;;;;;;;;;20444:8;20413:40;;20434:8;20413:40;;;;;;;;;;;;20333:128;20288:173;:::o;4122:98::-;4180:7;4211:1;4207;:5;;;;:::i;:::-;4200:12;;4122:98;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:191;316:3;335:20;353:1;335:20;:::i;:::-;330:25;;369:20;387:1;369:20;:::i;:::-;364:25;;412:1;409;405:9;398:16;;433:3;430:1;427:10;424:36;;;440:18;;:::i;:::-;424:36;276:191;;;;:::o;473:118::-;560:24;578:5;560:24;:::i;:::-;555:3;548:37;473:118;;:::o;597:222::-;690:4;728:2;717:9;713:18;705:26;;741:71;809:1;798:9;794:17;785:6;741:71;:::i;:::-;597:222;;;;:::o;825:75::-;858:6;891:2;885:9;875:19;;825:75;:::o;906:117::-;1015:1;1012;1005:12;1029:117;1138:1;1135;1128:12;1152:122;1225:24;1243:5;1225:24;:::i;:::-;1218:5;1215:35;1205:63;;1264:1;1261;1254:12;1205:63;1152:122;:::o;1280:139::-;1326:5;1364:6;1351:20;1342:29;;1380:33;1407:5;1380:33;:::i;:::-;1280:139;;;;:::o;1425:117::-;1534:1;1531;1524:12;1548:102;1589:6;1640:2;1636:7;1631:2;1624:5;1620:14;1616:28;1606:38;;1548:102;;;:::o;1656:180::-;1704:77;1701:1;1694:88;1801:4;1798:1;1791:15;1825:4;1822:1;1815:15;1842:281;1925:27;1947:4;1925:27;:::i;:::-;1917:6;1913:40;2055:6;2043:10;2040:22;2019:18;2007:10;2004:34;2001:62;1998:88;;;2066:18;;:::i;:::-;1998:88;2106:10;2102:2;2095:22;1885:238;1842:281;;:::o;2129:129::-;2163:6;2190:20;;:::i;:::-;2180:30;;2219:33;2247:4;2239:6;2219:33;:::i;:::-;2129:129;;;:::o;2264:311::-;2341:4;2431:18;2423:6;2420:30;2417:56;;;2453:18;;:::i;:::-;2417:56;2503:4;2495:6;2491:17;2483:25;;2563:4;2557;2553:15;2545:23;;2264:311;;;:::o;2581:117::-;2690:1;2687;2680:12;2721:710;2817:5;2842:81;2858:64;2915:6;2858:64;:::i;:::-;2842:81;:::i;:::-;2833:90;;2943:5;2972:6;2965:5;2958:21;3006:4;2999:5;2995:16;2988:23;;3059:4;3051:6;3047:17;3039:6;3035:30;3088:3;3080:6;3077:15;3074:122;;;3107:79;;:::i;:::-;3074:122;3222:6;3205:220;3239:6;3234:3;3231:15;3205:220;;;3314:3;3343:37;3376:3;3364:10;3343:37;:::i;:::-;3338:3;3331:50;3410:4;3405:3;3401:14;3394:21;;3281:144;3265:4;3260:3;3256:14;3249:21;;3205:220;;;3209:21;2823:608;;2721:710;;;;;:::o;3454:370::-;3525:5;3574:3;3567:4;3559:6;3555:17;3551:27;3541:122;;3582:79;;:::i;:::-;3541:122;3699:6;3686:20;3724:94;3814:3;3806:6;3799:4;3791:6;3787:17;3724:94;:::i;:::-;3715:103;;3531:293;3454:370;;;;:::o;3830:684::-;3923:6;3931;3980:2;3968:9;3959:7;3955:23;3951:32;3948:119;;;3986:79;;:::i;:::-;3948:119;4106:1;4131:53;4176:7;4167:6;4156:9;4152:22;4131:53;:::i;:::-;4121:63;;4077:117;4261:2;4250:9;4246:18;4233:32;4292:18;4284:6;4281:30;4278:117;;;4314:79;;:::i;:::-;4278:117;4419:78;4489:7;4480:6;4469:9;4465:22;4419:78;:::i;:::-;4409:88;;4204:303;3830:684;;;;;:::o;4520:90::-;4554:7;4597:5;4590:13;4583:21;4572:32;;4520:90;;;:::o;4616:109::-;4697:21;4712:5;4697:21;:::i;:::-;4692:3;4685:34;4616:109;;:::o;4731:210::-;4818:4;4856:2;4845:9;4841:18;4833:26;;4869:65;4931:1;4920:9;4916:17;4907:6;4869:65;:::i;:::-;4731:210;;;;:::o;4947:474::-;5015:6;5023;5072:2;5060:9;5051:7;5047:23;5043:32;5040:119;;;5078:79;;:::i;:::-;5040:119;5198:1;5223:53;5268:7;5259:6;5248:9;5244:22;5223:53;:::i;:::-;5213:63;;5169:117;5325:2;5351:53;5396:7;5387:6;5376:9;5372:22;5351:53;:::i;:::-;5341:63;;5296:118;4947:474;;;;;:::o;5427:329::-;5486:6;5535:2;5523:9;5514:7;5510:23;5506:32;5503:119;;;5541:79;;:::i;:::-;5503:119;5661:1;5686:53;5731:7;5722:6;5711:9;5707:22;5686:53;:::i;:::-;5676:63;;5632:117;5427:329;;;;:::o;5762:77::-;5799:7;5828:5;5817:16;;5762:77;;;:::o;5845:118::-;5932:24;5950:5;5932:24;:::i;:::-;5927:3;5920:37;5845:118;;:::o;5969:222::-;6062:4;6100:2;6089:9;6085:18;6077:26;;6113:71;6181:1;6170:9;6166:17;6157:6;6113:71;:::i;:::-;5969:222;;;;:::o;6197:126::-;6234:7;6274:42;6267:5;6263:54;6252:65;;6197:126;;;:::o;6329:96::-;6366:7;6395:24;6413:5;6395:24;:::i;:::-;6384:35;;6329:96;;;:::o;6431:122::-;6504:24;6522:5;6504:24;:::i;:::-;6497:5;6494:35;6484:63;;6543:1;6540;6533:12;6484:63;6431:122;:::o;6559:139::-;6605:5;6643:6;6630:20;6621:29;;6659:33;6686:5;6659:33;:::i;:::-;6559:139;;;;:::o;6704:329::-;6763:6;6812:2;6800:9;6791:7;6787:23;6783:32;6780:119;;;6818:79;;:::i;:::-;6780:119;6938:1;6963:53;7008:7;6999:6;6988:9;6984:22;6963:53;:::i;:::-;6953:63;;6909:117;6704:329;;;;:::o;7039:122::-;7112:24;7130:5;7112:24;:::i;:::-;7105:5;7102:35;7092:63;;7151:1;7148;7141:12;7092:63;7039:122;:::o;7167:139::-;7213:5;7251:6;7238:20;7229:29;;7267:33;7294:5;7267:33;:::i;:::-;7167:139;;;;:::o;7312:619::-;7389:6;7397;7405;7454:2;7442:9;7433:7;7429:23;7425:32;7422:119;;;7460:79;;:::i;:::-;7422:119;7580:1;7605:53;7650:7;7641:6;7630:9;7626:22;7605:53;:::i;:::-;7595:63;;7551:117;7707:2;7733:53;7778:7;7769:6;7758:9;7754:22;7733:53;:::i;:::-;7723:63;;7678:118;7835:2;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7806:118;7312:619;;;;;:::o;7937:99::-;8008:21;8023:5;8008:21;:::i;:::-;8003:3;7996:34;7937:99;;:::o;8042:108::-;8119:24;8137:5;8119:24;:::i;:::-;8114:3;8107:37;8042:108;;:::o;8156:::-;8233:24;8251:5;8233:24;:::i;:::-;8228:3;8221:37;8156:108;;:::o;8340:881::-;8485:4;8480:3;8476:14;8575:4;8568:5;8564:16;8558:23;8594:57;8645:4;8640:3;8636:14;8622:12;8594:57;:::i;:::-;8500:161;8751:4;8744:5;8740:16;8734:23;8770:63;8827:4;8822:3;8818:14;8804:12;8770:63;:::i;:::-;8671:172;8938:4;8931:5;8927:16;8921:23;8957:63;9014:4;9009:3;9005:14;8991:12;8957:63;:::i;:::-;8853:177;9122:4;9115:5;9111:16;9105:23;9141:63;9198:4;9193:3;9189:14;9175:12;9141:63;:::i;:::-;9040:174;8454:767;8340:881;;:::o;9227:319::-;9368:4;9406:3;9395:9;9391:19;9383:27;;9420:119;9536:1;9525:9;9521:17;9512:6;9420:119;:::i;:::-;9227:319;;;;:::o;9552:118::-;9639:24;9657:5;9639:24;:::i;:::-;9634:3;9627:37;9552:118;;:::o;9676:222::-;9769:4;9807:2;9796:9;9792:18;9784:26;;9820:71;9888:1;9877:9;9873:17;9864:6;9820:71;:::i;:::-;9676:222;;;;:::o;9904:114::-;9971:6;10005:5;9999:12;9989:22;;9904:114;;;:::o;10024:184::-;10123:11;10157:6;10152:3;10145:19;10197:4;10192:3;10188:14;10173:29;;10024:184;;;;:::o;10214:132::-;10281:4;10304:3;10296:11;;10334:4;10329:3;10325:14;10317:22;;10214:132;;;:::o;10352:179::-;10421:10;10442:46;10484:3;10476:6;10442:46;:::i;:::-;10520:4;10515:3;10511:14;10497:28;;10352:179;;;;:::o;10537:113::-;10607:4;10639;10634:3;10630:14;10622:22;;10537:113;;;:::o;10686:732::-;10805:3;10834:54;10882:5;10834:54;:::i;:::-;10904:86;10983:6;10978:3;10904:86;:::i;:::-;10897:93;;11014:56;11064:5;11014:56;:::i;:::-;11093:7;11124:1;11109:284;11134:6;11131:1;11128:13;11109:284;;;11210:6;11204:13;11237:63;11296:3;11281:13;11237:63;:::i;:::-;11230:70;;11323:60;11376:6;11323:60;:::i;:::-;11313:70;;11169:224;11156:1;11153;11149:9;11144:14;;11109:284;;;11113:14;11409:3;11402:10;;10810:608;;;10686:732;;;;:::o;11424:373::-;11567:4;11605:2;11594:9;11590:18;11582:26;;11654:9;11648:4;11644:20;11640:1;11629:9;11625:17;11618:47;11682:108;11785:4;11776:6;11682:108;:::i;:::-;11674:116;;11424:373;;;;:::o;11803:108::-;11880:24;11898:5;11880:24;:::i;:::-;11875:3;11868:37;11803:108;;:::o;11987:1030::-;12132:4;12127:3;12123:14;12223:4;12216:5;12212:16;12206:23;12242:57;12293:4;12288:3;12284:14;12270:12;12242:57;:::i;:::-;12147:162;12391:4;12384:5;12380:16;12374:23;12410:57;12461:4;12456:3;12452:14;12438:12;12410:57;:::i;:::-;12319:158;12561:4;12554:5;12550:16;12544:23;12580:63;12637:4;12632:3;12628:14;12614:12;12580:63;:::i;:::-;12487:166;12733:4;12726:5;12722:16;12716:23;12752:63;12809:4;12804:3;12800:14;12786:12;12752:63;:::i;:::-;12663:162;12918:4;12911:5;12907:16;12901:23;12937:63;12994:4;12989:3;12985:14;12971:12;12937:63;:::i;:::-;12835:175;12101:916;11987:1030;;:::o;13023:319::-;13164:4;13202:3;13191:9;13187:19;13179:27;;13216:119;13332:1;13321:9;13317:17;13308:6;13216:119;:::i;:::-;13023:319;;;;:::o;13348:332::-;13469:4;13507:2;13496:9;13492:18;13484:26;;13520:71;13588:1;13577:9;13573:17;13564:6;13520:71;:::i;:::-;13601:72;13669:2;13658:9;13654:18;13645:6;13601:72;:::i;:::-;13348:332;;;;;:::o;13686:169::-;13770:11;13804:6;13799:3;13792:19;13844:4;13839:3;13835:14;13820:29;;13686:169;;;;:::o;13861:161::-;14001:13;13997:1;13989:6;13985:14;13978:37;13861:161;:::o;14028:366::-;14170:3;14191:67;14255:2;14250:3;14191:67;:::i;:::-;14184:74;;14267:93;14356:3;14267:93;:::i;:::-;14385:2;14380:3;14376:12;14369:19;;14028:366;;;:::o;14400:419::-;14566:4;14604:2;14593:9;14589:18;14581:26;;14653:9;14647:4;14643:20;14639:1;14628:9;14624:17;14617:47;14681:131;14807:4;14681:131;:::i;:::-;14673:139;;14400:419;;;:::o;14825:410::-;14865:7;14888:20;14906:1;14888:20;:::i;:::-;14883:25;;14922:20;14940:1;14922:20;:::i;:::-;14917:25;;14977:1;14974;14970:9;14999:30;15017:11;14999:30;:::i;:::-;14988:41;;15178:1;15169:7;15165:15;15162:1;15159:22;15139:1;15132:9;15112:83;15089:139;;15208:18;;:::i;:::-;15089:139;14873:362;14825:410;;;;:::o;15241:159::-;15381:11;15377:1;15369:6;15365:14;15358:35;15241:159;:::o;15406:365::-;15548:3;15569:66;15633:1;15628:3;15569:66;:::i;:::-;15562:73;;15644:93;15733:3;15644:93;:::i;:::-;15762:2;15757:3;15753:12;15746:19;;15406:365;;;:::o;15777:419::-;15943:4;15981:2;15970:9;15966:18;15958:26;;16030:9;16024:4;16020:20;16016:1;16005:9;16001:17;15994:47;16058:131;16184:4;16058:131;:::i;:::-;16050:139;;15777:419;;;:::o;16202:180::-;16250:77;16247:1;16240:88;16347:4;16344:1;16337:15;16371:4;16368:1;16361:15;16388:118;16425:7;16465:34;16458:5;16454:46;16443:57;;16388:118;;;:::o;16512:224::-;16552:3;16571:20;16589:1;16571:20;:::i;:::-;16566:25;;16605:20;16623:1;16605:20;:::i;:::-;16600:25;;16648:1;16645;16641:9;16634:16;;16671:34;16666:3;16663:43;16660:69;;;16709:18;;:::i;:::-;16660:69;16512:224;;;;:::o;16742:201::-;16781:3;16804:24;16822:5;16804:24;:::i;:::-;16795:33;;16850:34;16843:5;16840:45;16837:71;;16888:18;;:::i;:::-;16837:71;16935:1;16928:5;16924:13;16917:20;;16742:201;;;:::o;16949:168::-;17089:20;17085:1;17077:6;17073:14;17066:44;16949:168;:::o;17123:366::-;17265:3;17286:67;17350:2;17345:3;17286:67;:::i;:::-;17279:74;;17362:93;17451:3;17362:93;:::i;:::-;17480:2;17475:3;17471:12;17464:19;;17123:366;;;:::o;17495:419::-;17661:4;17699:2;17688:9;17684:18;17676:26;;17748:9;17742:4;17738:20;17734:1;17723:9;17719:17;17712:47;17776:131;17902:4;17776:131;:::i;:::-;17768:139;;17495:419;;;:::o;17920:194::-;17960:4;17980:20;17998:1;17980:20;:::i;:::-;17975:25;;18014:20;18032:1;18014:20;:::i;:::-;18009:25;;18058:1;18055;18051:9;18043:17;;18082:1;18076:4;18073:11;18070:37;;;18087:18;;:::i;:::-;18070:37;17920:194;;;;:::o;18120:163::-;18260:15;18256:1;18248:6;18244:14;18237:39;18120:163;:::o;18289:366::-;18431:3;18452:67;18516:2;18511:3;18452:67;:::i;:::-;18445:74;;18528:93;18617:3;18528:93;:::i;:::-;18646:2;18641:3;18637:12;18630:19;;18289:366;;;:::o;18661:419::-;18827:4;18865:2;18854:9;18850:18;18842:26;;18914:9;18908:4;18904:20;18900:1;18889:9;18885:17;18878:47;18942:131;19068:4;18942:131;:::i;:::-;18934:139;;18661:419;;;:::o;19086:143::-;19143:5;19174:6;19168:13;19159:22;;19190:33;19217:5;19190:33;:::i;:::-;19086:143;;;;:::o;19235:351::-;19305:6;19354:2;19342:9;19333:7;19329:23;19325:32;19322:119;;;19360:79;;:::i;:::-;19322:119;19480:1;19505:64;19561:7;19552:6;19541:9;19537:22;19505:64;:::i;:::-;19495:74;;19451:128;19235:351;;;;:::o;19592:165::-;19732:17;19728:1;19720:6;19716:14;19709:41;19592:165;:::o;19763:366::-;19905:3;19926:67;19990:2;19985:3;19926:67;:::i;:::-;19919:74;;20002:93;20091:3;20002:93;:::i;:::-;20120:2;20115:3;20111:12;20104:19;;19763:366;;;:::o;20135:419::-;20301:4;20339:2;20328:9;20324:18;20316:26;;20388:9;20382:4;20378:20;20374:1;20363:9;20359:17;20352:47;20416:131;20542:4;20416:131;:::i;:::-;20408:139;;20135:419;;;:::o;20560:165::-;20700:17;20696:1;20688:6;20684:14;20677:41;20560:165;:::o;20731:366::-;20873:3;20894:67;20958:2;20953:3;20894:67;:::i;:::-;20887:74;;20970:93;21059:3;20970:93;:::i;:::-;21088:2;21083:3;21079:12;21072:19;;20731:366;;;:::o;21103:419::-;21269:4;21307:2;21296:9;21292:18;21284:26;;21356:9;21350:4;21346:20;21342:1;21331:9;21327:17;21320:47;21384:131;21510:4;21384:131;:::i;:::-;21376:139;;21103:419;;;:::o;21528:169::-;21668:21;21664:1;21656:6;21652:14;21645:45;21528:169;:::o;21703:366::-;21845:3;21866:67;21930:2;21925:3;21866:67;:::i;:::-;21859:74;;21942:93;22031:3;21942:93;:::i;:::-;22060:2;22055:3;22051:12;22044:19;;21703:366;;;:::o;22075:419::-;22241:4;22279:2;22268:9;22264:18;22256:26;;22328:9;22322:4;22318:20;22314:1;22303:9;22299:17;22292:47;22356:131;22482:4;22356:131;:::i;:::-;22348:139;;22075:419;;;:::o;22500:169::-;22640:21;22636:1;22628:6;22624:14;22617:45;22500:169;:::o;22675:366::-;22817:3;22838:67;22902:2;22897:3;22838:67;:::i;:::-;22831:74;;22914:93;23003:3;22914:93;:::i;:::-;23032:2;23027:3;23023:12;23016:19;;22675:366;;;:::o;23047:419::-;23213:4;23251:2;23240:9;23236:18;23228:26;;23300:9;23294:4;23290:20;23286:1;23275:9;23271:17;23264:47;23328:131;23454:4;23328:131;:::i;:::-;23320:139;;23047:419;;;:::o;23472:182::-;23612:34;23608:1;23600:6;23596:14;23589:58;23472:182;:::o;23660:366::-;23802:3;23823:67;23887:2;23882:3;23823:67;:::i;:::-;23816:74;;23899:93;23988:3;23899:93;:::i;:::-;24017:2;24012:3;24008:12;24001:19;;23660:366;;;:::o;24032:419::-;24198:4;24236:2;24225:9;24221:18;24213:26;;24285:9;24279:4;24275:20;24271:1;24260:9;24256:17;24249:47;24313:131;24439:4;24313:131;:::i;:::-;24305:139;;24032:419;;;:::o;24457:167::-;24597:19;24593:1;24585:6;24581:14;24574:43;24457:167;:::o;24630:366::-;24772:3;24793:67;24857:2;24852:3;24793:67;:::i;:::-;24786:74;;24869:93;24958:3;24869:93;:::i;:::-;24987:2;24982:3;24978:12;24971:19;;24630:366;;;:::o;25002:419::-;25168:4;25206:2;25195:9;25191:18;25183:26;;25255:9;25249:4;25245:20;25241:1;25230:9;25226:17;25219:47;25283:131;25409:4;25283:131;:::i;:::-;25275:139;;25002:419;;;:::o;25427:167::-;25567:19;25563:1;25555:6;25551:14;25544:43;25427:167;:::o;25600:366::-;25742:3;25763:67;25827:2;25822:3;25763:67;:::i;:::-;25756:74;;25839:93;25928:3;25839:93;:::i;:::-;25957:2;25952:3;25948:12;25941:19;;25600:366;;;:::o;25972:419::-;26138:4;26176:2;26165:9;26161:18;26153:26;;26225:9;26219:4;26215:20;26211:1;26200:9;26196:17;26189:47;26253:131;26379:4;26253:131;:::i;:::-;26245:139;;25972:419;;;:::o;26397:79::-;26436:7;26465:5;26454:16;;26397:79;;;:::o;26482:157::-;26587:45;26607:24;26625:5;26607:24;:::i;:::-;26587:45;:::i;:::-;26582:3;26575:58;26482:157;;:::o;26645:79::-;26684:7;26713:5;26702:16;;26645:79;;;:::o;26730:157::-;26835:45;26855:24;26873:5;26855:24;:::i;:::-;26835:45;:::i;:::-;26830:3;26823:58;26730:157;;:::o;26893:397::-;27033:3;27048:75;27119:3;27110:6;27048:75;:::i;:::-;27148:2;27143:3;27139:12;27132:19;;27161:75;27232:3;27223:6;27161:75;:::i;:::-;27261:2;27256:3;27252:12;27245:19;;27281:3;27274:10;;26893:397;;;;;:::o;27296:164::-;27436:16;27432:1;27424:6;27420:14;27413:40;27296:164;:::o;27466:366::-;27608:3;27629:67;27693:2;27688:3;27629:67;:::i;:::-;27622:74;;27705:93;27794:3;27705:93;:::i;:::-;27823:2;27818:3;27814:12;27807:19;;27466:366;;;:::o;27838:419::-;28004:4;28042:2;28031:9;28027:18;28019:26;;28091:9;28085:4;28081:20;28077:1;28066:9;28062:17;28055:47;28119:131;28245:4;28119:131;:::i;:::-;28111:139;;27838:419;;;:::o;28263:169::-;28403:21;28399:1;28391:6;28387:14;28380:45;28263:169;:::o;28438:366::-;28580:3;28601:67;28665:2;28660:3;28601:67;:::i;:::-;28594:74;;28677:93;28766:3;28677:93;:::i;:::-;28795:2;28790:3;28786:12;28779:19;;28438:366;;;:::o;28810:419::-;28976:4;29014:2;29003:9;28999:18;28991:26;;29063:9;29057:4;29053:20;29049:1;29038:9;29034:17;29027:47;29091:131;29217:4;29091:131;:::i;:::-;29083:139;;28810:419;;;:::o;29235:233::-;29274:3;29297:24;29315:5;29297:24;:::i;:::-;29288:33;;29343:66;29336:5;29333:77;29330:103;;29413:18;;:::i;:::-;29330:103;29460:1;29453:5;29449:13;29442:20;;29235:233;;;:::o;29474:178::-;29614:30;29610:1;29602:6;29598:14;29591:54;29474:178;:::o;29658:366::-;29800:3;29821:67;29885:2;29880:3;29821:67;:::i;:::-;29814:74;;29897:93;29986:3;29897:93;:::i;:::-;30015:2;30010:3;30006:12;29999:19;;29658:366;;;:::o;30030:419::-;30196:4;30234:2;30223:9;30219:18;30211:26;;30283:9;30277:4;30273:20;30269:1;30258:9;30254:17;30247:47;30311:131;30437:4;30311:131;:::i;:::-;30303:139;;30030:419;;;:::o;30455:169::-;30595:21;30591:1;30583:6;30579:14;30572:45;30455:169;:::o;30630:366::-;30772:3;30793:67;30857:2;30852:3;30793:67;:::i;:::-;30786:74;;30869:93;30958:3;30869:93;:::i;:::-;30987:2;30982:3;30978:12;30971:19;;30630:366;;;:::o;31002:419::-;31168:4;31206:2;31195:9;31191:18;31183:26;;31255:9;31249:4;31245:20;31241:1;31230:9;31226:17;31219:47;31283:131;31409:4;31283:131;:::i;:::-;31275:139;;31002:419;;;:::o;31427:165::-;31567:17;31563:1;31555:6;31551:14;31544:41;31427:165;:::o;31598:366::-;31740:3;31761:67;31825:2;31820:3;31761:67;:::i;:::-;31754:74;;31837:93;31926:3;31837:93;:::i;:::-;31955:2;31950:3;31946:12;31939:19;;31598:366;;;:::o;31970:419::-;32136:4;32174:2;32163:9;32159:18;32151:26;;32223:9;32217:4;32213:20;32209:1;32198:9;32194:17;32187:47;32251:131;32377:4;32251:131;:::i;:::-;32243:139;;31970:419;;;:::o;32395:147::-;32496:11;32533:3;32518:18;;32395:147;;;;:::o;32548:114::-;;:::o;32668:398::-;32827:3;32848:83;32929:1;32924:3;32848:83;:::i;:::-;32841:90;;32940:93;33029:3;32940:93;:::i;:::-;33058:1;33053:3;33049:11;33042:18;;32668:398;;;:::o;33072:379::-;33256:3;33278:147;33421:3;33278:147;:::i;:::-;33271:154;;33442:3;33435:10;;33072:379;;;:::o;33457:167::-;33597:19;33593:1;33585:6;33581:14;33574:43;33457:167;:::o;33630:366::-;33772:3;33793:67;33857:2;33852:3;33793:67;:::i;:::-;33786:74;;33869:93;33958:3;33869:93;:::i;:::-;33987:2;33982:3;33978:12;33971:19;;33630:366;;;:::o;34002:419::-;34168:4;34206:2;34195:9;34191:18;34183:26;;34255:9;34249:4;34245:20;34241:1;34230:9;34226:17;34219:47;34283:131;34409:4;34283:131;:::i;:::-;34275:139;;34002:419;;;:::o;34427:169::-;34567:21;34563:1;34555:6;34551:14;34544:45;34427:169;:::o;34602:366::-;34744:3;34765:67;34829:2;34824:3;34765:67;:::i;:::-;34758:74;;34841:93;34930:3;34841:93;:::i;:::-;34959:2;34954:3;34950:12;34943:19;;34602:366;;;:::o;34974:419::-;35140:4;35178:2;35167:9;35163:18;35155:26;;35227:9;35221:4;35217:20;35213:1;35202:9;35198:17;35191:47;35255:131;35381:4;35255:131;:::i;:::-;35247:139;;34974:419;;;:::o;35399:163::-;35539:15;35535:1;35527:6;35523:14;35516:39;35399:163;:::o;35568:366::-;35710:3;35731:67;35795:2;35790:3;35731:67;:::i;:::-;35724:74;;35807:93;35896:3;35807:93;:::i;:::-;35925:2;35920:3;35916:12;35909:19;;35568:366;;;:::o;35940:419::-;36106:4;36144:2;36133:9;36129:18;36121:26;;36193:9;36187:4;36183:20;36179:1;36168:9;36164:17;36157:47;36221:131;36347:4;36221:131;:::i;:::-;36213:139;;35940:419;;;:::o;36365:86::-;36400:7;36440:4;36433:5;36429:16;36418:27;;36365:86;;;:::o;36457:167::-;36494:3;36517:22;36533:5;36517:22;:::i;:::-;36508:31;;36561:4;36554:5;36551:15;36548:41;;36569:18;;:::i;:::-;36548:41;36616:1;36609:5;36605:13;36598:20;;36457:167;;;:::o;36630:225::-;36770:34;36766:1;36758:6;36754:14;36747:58;36839:8;36834:2;36826:6;36822:15;36815:33;36630:225;:::o;36861:366::-;37003:3;37024:67;37088:2;37083:3;37024:67;:::i;:::-;37017:74;;37100:93;37189:3;37100:93;:::i;:::-;37218:2;37213:3;37209:12;37202:19;;36861:366;;;:::o;37233:419::-;37399:4;37437:2;37426:9;37422:18;37414:26;;37486:9;37480:4;37476:20;37472:1;37461:9;37457:17;37450:47;37514:131;37640:4;37514:131;:::i;:::-;37506:139;;37233:419;;;:::o;37658:143::-;37715:5;37746:6;37740:13;37731:22;;37762:33;37789:5;37762:33;:::i;:::-;37658:143;;;;:::o;37807:351::-;37877:6;37926:2;37914:9;37905:7;37901:23;37897:32;37894:119;;;37932:79;;:::i;:::-;37894:119;38052:1;38077:64;38133:7;38124:6;38113:9;38109:22;38077:64;:::i;:::-;38067:74;;38023:128;37807:351;;;;:::o;38164:180::-;38212:77;38209:1;38202:88;38309:4;38306:1;38299:15;38333:4;38330:1;38323:15;38350:185;38390:1;38407:20;38425:1;38407:20;:::i;:::-;38402:25;;38441:20;38459:1;38441:20;:::i;:::-;38436:25;;38480:1;38470:35;;38485:18;;:::i;:::-;38470:35;38527:1;38524;38520:9;38515:14;;38350:185;;;;:::o;38541:163::-;38681:15;38677:1;38669:6;38665:14;38658:39;38541:163;:::o;38710:366::-;38852:3;38873:67;38937:2;38932:3;38873:67;:::i;:::-;38866:74;;38949:93;39038:3;38949:93;:::i;:::-;39067:2;39062:3;39058:12;39051:19;;38710:366;;;:::o;39082:419::-;39248:4;39286:2;39275:9;39271:18;39263:26;;39335:9;39329:4;39325:20;39321:1;39310:9;39306:17;39299:47;39363:131;39489:4;39363:131;:::i;:::-;39355:139;;39082:419;;;:::o;39507:101::-;39543:7;39583:18;39576:5;39572:30;39561:41;;39507:101;;;:::o;39614:115::-;39699:23;39716:5;39699:23;:::i;:::-;39694:3;39687:36;39614:115;;:::o;39735:85::-;39780:7;39809:5;39798:16;;39735:85;;;:::o;39826:89::-;39862:7;39902:6;39895:5;39891:18;39880:29;;39826:89;;;:::o;39921:60::-;39949:3;39970:5;39963:12;;39921:60;;;:::o;39987:156::-;40044:9;40077:60;40094:42;40103:32;40129:5;40103:32;:::i;:::-;40094:42;:::i;:::-;40077:60;:::i;:::-;40064:73;;39987:156;;;:::o;40149:145::-;40243:44;40281:5;40243:44;:::i;:::-;40238:3;40231:57;40149:145;;:::o;40300:90::-;40350:7;40379:5;40368:16;;40300:90;;;:::o;40396:93::-;40432:7;40472:10;40465:5;40461:22;40450:33;;40396:93;;;:::o;40495:166::-;40557:9;40590:65;40607:47;40616:37;40647:5;40616:37;:::i;:::-;40607:47;:::i;:::-;40590:65;:::i;:::-;40577:78;;40495:166;;;:::o;40667:155::-;40766:49;40809:5;40766:49;:::i;:::-;40761:3;40754:62;40667:155;;:::o;40828:85::-;40873:7;40902:5;40891:16;;40828:85;;;:::o;40919:156::-;40976:9;41009:60;41026:42;41035:32;41061:5;41035:32;:::i;:::-;41026:42;:::i;:::-;41009:60;:::i;:::-;40996:73;;40919:156;;;:::o;41081:145::-;41175:44;41213:5;41175:44;:::i;:::-;41170:3;41163:57;41081:145;;:::o;41232:712::-;41461:4;41499:3;41488:9;41484:19;41476:27;;41513:71;41581:1;41570:9;41566:17;41557:6;41513:71;:::i;:::-;41594:70;41660:2;41649:9;41645:18;41636:6;41594:70;:::i;:::-;41674:79;41749:2;41738:9;41734:18;41725:6;41674:79;:::i;:::-;41763:84;41843:2;41832:9;41828:18;41819:6;41763:84;:::i;:::-;41857:80;41932:3;41921:9;41917:19;41908:6;41857:80;:::i;:::-;41232:712;;;;;;;;:::o;41950:176::-;41982:1;41999:20;42017:1;41999:20;:::i;:::-;41994:25;;42033:20;42051:1;42033:20;:::i;:::-;42028:25;;42072:1;42062:35;;42077:18;;:::i;:::-;42062:35;42118:1;42115;42111:9;42106:14;;41950:176;;;;:::o
Swarm Source
ipfs://5bc1cc59bd232d7a471983c4eb9ea0c949c3401f2658cafd4913daa2e19cb288
Loading...
Loading
Loading...
Loading
Net Worth in USD
$12.37
Net Worth in ETH
0.006
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,062.41 | 0.006 | $12.37 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.