Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 113 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 16522658 | 1125 days ago | IN | 0 ETH | 0.00068013 | ||||
| Owner Mint | 16447511 | 1135 days ago | IN | 0 ETH | 0.01450476 | ||||
| Owner Mint | 16447510 | 1135 days ago | IN | 0 ETH | 0.0626033 | ||||
| Owner Mint | 16447509 | 1135 days ago | IN | 0 ETH | 0.06030307 | ||||
| Owner Mint | 16447508 | 1135 days ago | IN | 0 ETH | 0.0621779 | ||||
| Owner Mint | 16447507 | 1135 days ago | IN | 0 ETH | 0.06082653 | ||||
| Owner Mint | 16447506 | 1135 days ago | IN | 0 ETH | 0.05945509 | ||||
| Owner Mint | 16447505 | 1135 days ago | IN | 0 ETH | 0.05727565 | ||||
| Owner Mint | 16447502 | 1135 days ago | IN | 0 ETH | 0.05843444 | ||||
| Owner Mint | 16447501 | 1135 days ago | IN | 0 ETH | 0.05966625 | ||||
| Owner Mint | 16447500 | 1135 days ago | IN | 0 ETH | 0.0590519 | ||||
| Owner Mint | 16447499 | 1135 days ago | IN | 0 ETH | 0.05766836 | ||||
| Owner Mint | 16447498 | 1135 days ago | IN | 0 ETH | 0.05738994 | ||||
| Owner Mint | 16447497 | 1135 days ago | IN | 0 ETH | 0.05922643 | ||||
| Owner Mint | 16447496 | 1135 days ago | IN | 0 ETH | 0.05950892 | ||||
| Owner Mint | 16447495 | 1135 days ago | IN | 0 ETH | 0.05892104 | ||||
| Owner Mint | 16447494 | 1135 days ago | IN | 0 ETH | 0.06009112 | ||||
| Owner Mint | 16447493 | 1135 days ago | IN | 0 ETH | 0.05948504 | ||||
| Owner Mint | 16447492 | 1135 days ago | IN | 0 ETH | 0.06169494 | ||||
| Owner Mint | 16447491 | 1135 days ago | IN | 0 ETH | 0.06279438 | ||||
| Owner Mint | 16447490 | 1135 days ago | IN | 0 ETH | 0.06313768 | ||||
| Owner Mint | 16447489 | 1135 days ago | IN | 0 ETH | 0.06073288 | ||||
| Owner Mint | 16447488 | 1135 days ago | IN | 0 ETH | 0.05903944 | ||||
| Owner Mint | 16447486 | 1135 days ago | IN | 0 ETH | 0.0589479 | ||||
| Owner Mint | 16447485 | 1135 days ago | IN | 0 ETH | 0.05899277 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RuniverseLandMinter
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IRuniverseLand.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol";
import "@openzeppelin/contracts/utils/Address.sol";
contract RuniverseLandMinter is Ownable, ReentrancyGuard {
using Address for address payable;
/// @notice Address to the ERC721 RuniverseLand contract
IRuniverseLand public runiverseLand;
/// @notice Address to the vault where we can withdraw
address payable public vault;
uint256[] plotsAvailablePerSize = [
52500, // 8x8
16828, // 16x16
560, // 32x32
105, // 64x64
7 // 128x128
];
uint256[] public plotSizeLocalOffset = [
1, // 8x8
1, // 16x16
1, // 32x32
1, // 64x64
1 // 128x128
];
uint256 public plotGlobalOffset = 1;
uint256[] public plotPrices = [
type(uint256).max,
type(uint256).max,
type(uint256).max,
type(uint256).max,
type(uint256).max
];
uint256 public publicMintStartTime = type(uint256).max;
uint256 public mintlistStartTime = type(uint256).max;
uint256 public claimsStartTime = type(uint256).max;
/// @notice The primary merkle root
bytes32 public mintlistMerkleRoot1;
/// @notice The secondary Merkle root
bytes32 public mintlistMerkleRoot2;
/// @notice The claimslist Merkle root
bytes32 public claimlistMerkleRoot;
/// @notice stores the number actually minted per plot size
mapping(uint256 => uint256) public plotsMinted;
/// @notice stores the number minted by this address in the mintlist by size
mapping(address => mapping(uint256 => uint256))
public mintlistMintedPerSize;
/// @notice stores the number minted by this address in the claimslist by size
mapping(address => mapping(uint256 => uint256))
public claimlistMintedPerSize;
/**
* @dev Create the contract and set the initial baseURI
* @param _runiverseLand address the initial base URI for the token metadata URL
*/
constructor(IRuniverseLand _runiverseLand) {
setRuniverseLand(_runiverseLand);
setVaultAddress(payable(msg.sender));
}
/**
* @dev returns true if the whitelisted mintlist started.
* @return mintlistStarted true if mintlist started.
*/
function mintlistStarted() public view returns (bool) {
return block.timestamp >= mintlistStartTime;
}
/**
* @dev returns true if the whitelisted claimlist started.
* @return mintlistStarted true if claimlist started.
*/
function claimsStarted() public view returns (bool) {
return block.timestamp >= claimsStartTime;
}
/**
* @dev returns true if the public minting started.
* @return mintlistStarted true if public minting started.
*/
function publicStarted() public view returns (bool) {
return block.timestamp >= publicMintStartTime;
}
/**
* @dev returns how many plots were avialable since the begining.
* @return getPlotsAvailablePerSize array uint256 of 5 elements.
*/
function getPlotsAvailablePerSize() external view returns (uint256[] memory) {
return plotsAvailablePerSize;
}
/**
* @dev returns the eth cost of each plot.
* @return getPlotPrices array uint256 of 5 elements.
*/
function getPlotPrices() external view returns (uint256[] memory) {
return plotPrices;
}
/**
* @dev returns the plot type of a token id.
* @param tokenId uint256 token id.
* @return getPlotPrices uint256 plot type.
*/
function getTokenIdPlotType(uint256 tokenId) external pure returns (uint256) {
return tokenId&255;
}
/**
* @dev return the total number of minted plots
* @return getTotalMintedLands uint256 number of minted plots.
*/
function getTotalMintedLands() external view returns (uint256) {
uint256 totalMintedLands;
totalMintedLands = plotsMinted[0] +
plotsMinted[1] +
plotsMinted[2] +
plotsMinted[3] +
plotsMinted[4];
return totalMintedLands;
}
/**
* @dev return the total number of minted plots of each size.
* @return getTotalMintedLandsBySize array uint256 number of minted plots of each size.
*/
function getTotalMintedLandsBySize() external view returns (uint256[] memory) {
uint256[] memory plotsMintedBySize = new uint256[](5);
plotsMintedBySize[0] = plotsMinted[0];
plotsMintedBySize[1] = plotsMinted[1];
plotsMintedBySize[2] = plotsMinted[2];
plotsMintedBySize[3] = plotsMinted[3];
plotsMintedBySize[4] = plotsMinted[4];
return plotsMintedBySize;
}
/**
* @dev returns the number of plots left of each size.
* @return getAvailableLands array uint256 of 5 elements.
*/
function getAvailableLands() external view returns (uint256[] memory) {
uint256[] memory plotsAvailableBySize = new uint256[](5);
plotsAvailableBySize[0] = plotsAvailablePerSize[0] - plotsMinted[0];
plotsAvailableBySize[1] = plotsAvailablePerSize[1] - plotsMinted[1];
plotsAvailableBySize[2] = plotsAvailablePerSize[2] - plotsMinted[2];
plotsAvailableBySize[3] = plotsAvailablePerSize[3] - plotsMinted[3];
plotsAvailableBySize[4] = plotsAvailablePerSize[4] - plotsMinted[4];
return plotsAvailableBySize;
}
/**
* @dev mint public method to mint when the whitelist (mintlist) is active.
* @param _who address address that is minting.
* @param _leaf bytes32 merkle leaf.
* @param _merkleProof bytes32[] merkle proof.
* @return mintlisted bool success mint.
*/
function mintlisted(
address _who,
bytes32 _leaf,
bytes32[] calldata _merkleProof
) external view returns (bool) {
bytes32 node = keccak256(abi.encodePacked(_who));
if (node != _leaf) return false;
if (
MerkleProof.verify(_merkleProof, mintlistMerkleRoot1, _leaf) ||
MerkleProof.verify(_merkleProof, mintlistMerkleRoot2, _leaf)
) {
return true;
}
return false;
}
/**
* @dev public method for public minting.
* @param plotSize PlotSize enum with plot size.
* @param numPlots uint256 number of plots to be minted.
*/
function mint(IRuniverseLand.PlotSize plotSize, uint256 numPlots)
external
payable
nonReentrant
{
if(!publicStarted()){
revert WrongDateForProcess({
correct_date: publicMintStartTime,
current_date: block.timestamp
});
}
if(numPlots <= 0 && numPlots > 20){
revert IncorrectPurchaseLimit();
}
_mintTokensCheckingValue(plotSize, numPlots, msg.sender);
}
/**
* @dev public method to mint when the whitelist (mintlist) is active.
* @param plotSize PlotSize enum with plot size.
* @param numPlots uint256 number of plots to be minted.
* @param claimedMaxPlots uint256 maximum number of plots of plotSize size that the address mint.
* @param _merkleProof bytes32[] merkle proof.
*/
function mintlistMint(
IRuniverseLand.PlotSize plotSize,
uint256 numPlots,
uint256 claimedMaxPlots,
bytes32[] calldata _merkleProof
) external payable nonReentrant {
if(!mintlistStarted()){
revert WrongDateForProcess({
correct_date:mintlistStartTime,
current_date: block.timestamp
});
}
if(numPlots <= 0 && numPlots > 20){
revert IncorrectPurchaseLimit();
}
// verify allowlist
bytes32 _leaf = keccak256(
abi.encodePacked(
msg.sender,
":",
uint256(plotSize),
":",
claimedMaxPlots
)
);
require(
MerkleProof.verify(_merkleProof, mintlistMerkleRoot1, _leaf) ||
MerkleProof.verify(_merkleProof, mintlistMerkleRoot2, _leaf),
"Invalid proof."
);
mapping(uint256 => uint256) storage mintedPerSize = mintlistMintedPerSize[msg.sender];
require(
mintedPerSize[uint256(plotSize)] + numPlots <=
claimedMaxPlots, // this is verified by the merkle proof
"Minting more than allowed"
);
mintedPerSize[uint256(plotSize)] += numPlots;
_mintTokensCheckingValue(plotSize, numPlots, msg.sender);
}
/**
* @dev public method to claim a plot, only when (claimlist) is active.
* @param plotSize PlotSize enum with plot size.
* @param numPlots uint256 number of plots to be minted.
* @param claimedMaxPlots uint256 maximum number of plots of plotSize size that the address mint.
* @param _merkleProof bytes32[] merkle proof.
*/
function claimlistMint(
IRuniverseLand.PlotSize plotSize,
uint256 numPlots,
uint256 claimedMaxPlots,
bytes32[] calldata _merkleProof
) external payable nonReentrant {
if(!claimsStarted()){
revert WrongDateForProcess({
correct_date:claimsStartTime,
current_date: block.timestamp
});
}
// verify allowlist
bytes32 _leaf = keccak256(
abi.encodePacked(
msg.sender,
":",
uint256(plotSize),
":",
claimedMaxPlots
)
);
require(
MerkleProof.verify(_merkleProof, claimlistMerkleRoot, _leaf),
"Invalid proof."
);
mapping(uint256 => uint256) storage mintedPerSize = claimlistMintedPerSize[msg.sender];
require(
mintedPerSize[uint256(plotSize)] + numPlots <=
claimedMaxPlots, // this is verified by the merkle proof
"Claiming more than allowed"
);
mintedPerSize[uint256(plotSize)] += numPlots;
_mintTokens(plotSize, numPlots, msg.sender);
}
/**
* @dev checks if the amount sent is correct. Continue minting if it is correct.
* @param plotSize PlotSize enum with plot size.
* @param numPlots uint256 number of plots to be minted.
* @param recipient address address that sent the mint.
*/
function _mintTokensCheckingValue(
IRuniverseLand.PlotSize plotSize,
uint256 numPlots,
address recipient
) private {
if(plotPrices[uint256(plotSize)] <= 0){
revert MisconfiguredPrices();
}
require(
msg.value == plotPrices[uint256(plotSize)] * numPlots,
"Ether value sent is not accurate"
);
_mintTokens(plotSize, numPlots, recipient);
}
/**
* @dev checks if there are plots available. Final step before sending it to RuniverseLand contract.
* @param plotSize PlotSize enum with plot size.
* @param numPlots uint256 number of plots to be minted.
* @param recipient address address that sent the mint.
*/
function _mintTokens(
IRuniverseLand.PlotSize plotSize,
uint256 numPlots,
address recipient
) private {
require(
plotsMinted[uint256(plotSize)] + numPlots <=
plotsAvailablePerSize[uint256(plotSize)],
"Trying to mint too many plots"
);
for (uint256 i; i < numPlots; ++i) {
uint256 tokenId = ownerGetNextTokenId(plotSize);
++plotsMinted[uint256(plotSize)];
runiverseLand.mintTokenId(recipient, tokenId, plotSize);
}
}
/**
* @dev Method to mint many plot and assign it to an addresses without any requirement. Used for private minting.
* @param plotSizes PlotSize[] enums with plot sizes.
* @param recipients address[] addresses where the token will be transferred.
*/
function ownerMint(
IRuniverseLand.PlotSize[] calldata plotSizes,
address[] calldata recipients
) external onlyOwner {
require(
plotSizes.length == recipients.length,
"Arrays should have the same size"
);
for (uint256 i; i < recipients.length; ++i) {
_mintTokens(plotSizes[i], 1, recipients[i]);
}
}
/**
* @dev Encodes the next token id.
* @param plotSize PlotSize enum with plot size.
* @return ownerGetNextTokenId uint256 encoded next toknId.
*/
function ownerGetNextTokenId(IRuniverseLand.PlotSize plotSize) private view returns (uint256) {
uint256 globalCounter = plotsMinted[0] + plotsMinted[1] + plotsMinted[2] + plotsMinted[3] + plotsMinted[4] + plotGlobalOffset;
uint256 localCounter = plotsMinted[uint256(plotSize)] + plotSizeLocalOffset[uint256(plotSize)];
require( localCounter <= 4294967295, "Local index overflow" );
require( uint256(plotSize) <= 255, "Plot index overflow" );
return (globalCounter<<40) + (localCounter<<8) + uint256(plotSize);
}
/**
* Owner Controls
*/
/**
* @dev Assigns a new public start minting time.
* @param _newPublicMintStartTime uint256 echo time in seconds.
*/
function setPublicMintStartTime(uint256 _newPublicMintStartTime)
external
onlyOwner
{
publicMintStartTime = _newPublicMintStartTime;
}
/**
* @dev Assigns a new mintlist start minting time.
* @param _newAllowlistMintStartTime uint256 echo time in seconds.
*/
function setMintlistStartTime(uint256 _newAllowlistMintStartTime)
external
onlyOwner
{
mintlistStartTime = _newAllowlistMintStartTime;
}
/**
* @dev Assigns a new claimlist start minting time.
* @param _newClaimsStartTime uint256 echo time in seconds.
*/
function setClaimsStartTime(uint256 _newClaimsStartTime) external onlyOwner {
claimsStartTime = _newClaimsStartTime;
}
/**
* @dev Assigns a merkle root to the main tree for mintlist.
* @param newMerkleRoot bytes32 merkle root
*/
function setMintlistMerkleRoot1(bytes32 newMerkleRoot) external onlyOwner {
mintlistMerkleRoot1 = newMerkleRoot;
}
/**
* @dev Assigns a merkle root to the second tree for mintlist. Used for double buffer.
* @param newMerkleRoot bytes32 merkle root
*/
function setMintlistMerkleRoot2(bytes32 newMerkleRoot) external onlyOwner {
mintlistMerkleRoot2 = newMerkleRoot;
}
/**
* @dev Assigns a merkle root to the main tree for claimlist.
* @param newMerkleRoot bytes32 merkle root
*/
function setClaimlistMerkleRoot(bytes32 newMerkleRoot) external onlyOwner {
claimlistMerkleRoot = newMerkleRoot;
}
/**
* @dev Assigns the main contract.
* @param _newRuniverseLandAddress IRuniverseLand Main contract.
*/
function setRuniverseLand(IRuniverseLand _newRuniverseLandAddress)
public
onlyOwner
{
runiverseLand = _newRuniverseLandAddress;
}
/**
* @dev Assigns the vault address.
* @param _newVaultAddress address vault address.
*/
function setVaultAddress(address payable _newVaultAddress)
public
onlyOwner
{
vault = _newVaultAddress;
}
/**
* @dev Assigns the offset to the global ids. This value will be added to the global id when a token is generated.
* @param _newGlobalIdOffset uint256 offset
*/
function setGlobalIdOffset(uint256 _newGlobalIdOffset) external onlyOwner {
if(mintlistStarted()){
revert DeniedProcessDuringMinting();
}
plotGlobalOffset = _newGlobalIdOffset;
}
/**
* @dev Assigns the offset to the local ids. This value will be added to the local id of each plot size when a token of some size is generated.
* @param _newPlotSizeLocalOffset uint256[] offsets
*/
function setLocalIdOffsets(uint256[] calldata _newPlotSizeLocalOffset) external onlyOwner {
if(_newPlotSizeLocalOffset.length != 5){
revert GivedValuesNotValid({
sended_values: _newPlotSizeLocalOffset.length,
expected: 5
});
}
if(mintlistStarted()){
revert DeniedProcessDuringMinting();
}
plotSizeLocalOffset = _newPlotSizeLocalOffset;
}
/**
* @dev Assigns the new plot prices for each plot size.
* @param _newPrices uint256[] plots prices.
*/
function setPrices(uint256[] calldata _newPrices) external onlyOwner {
if(mintlistStarted()){
revert DeniedProcessDuringMinting();
}
if(_newPrices.length < 5){
revert GivedValuesNotValid({
sended_values: _newPrices.length,
expected: 5
});
}
plotPrices = _newPrices;
}
/**
* @notice Withdraw funds to the vault using sendValue
* @param _amount uint256 the amount to withdraw
*/
function withdraw(uint256 _amount) external onlyOwner {
(bool success, ) = vault.call{value: _amount}("");
require(success, "withdraw was not succesfull");
}
/**
* @notice Withdraw all the funds to the vault using sendValue
*/
function withdrawAll() external onlyOwner {
(bool success, ) = vault.call{value: address(this).balance}("");
require(success, "withdraw all was not succesfull");
}
/**
* @notice Transfer amount to a token.
* @param _token IERC20 token to transfer
* @param _amount uint256 amount to transfer
*/
function forwardERC20s(IERC20 _token, uint256 _amount) external onlyOwner {
if(address(msg.sender) == address(0)){
revert Address0Error();
}
_token.transfer(msg.sender, _amount);
}
/// Wrong date for process, Come back on `correct_data` for complete this successfully
/// @param correct_date date when the public/ mint is on.
/// @param current_date date when the process was executed.
error WrongDateForProcess(uint256 correct_date, uint256 current_date);
/// Denied Process During Minting
error DeniedProcessDuringMinting();
/// Incorrect Purchase Limit, the limits are from 1 to 20 plots
error IncorrectPurchaseLimit();
/// MisconfiguredPrices, the price of that land-size is not configured yet
error MisconfiguredPrices();
/// Configured Prices Error, please send exactly 5 values
/// @param sended_values Total gived values.
/// @param expected Total needed values.
error GivedValuesNotValid(uint256 sended_values, uint256 expected);
error Address0Error();
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
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);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./ECDSA.sol";
/**
* @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
*
* The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
* thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
* they need in their contracts using a combination of `abi.encode` and `keccak256`.
*
* This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
* ({_hashTypedDataV4}).
*
* The implementation of the domain separator was designed to be as efficient as possible while still properly updating
* the chain id to protect against replay attacks on an eventual fork of the chain.
*
* NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
*
* _Available since v3.4._
*/
abstract contract EIP712 {
/* solhint-disable var-name-mixedcase */
// Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
// invalidate the cached domain separator if the chain id changes.
bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
uint256 private immutable _CACHED_CHAIN_ID;
bytes32 private immutable _HASHED_NAME;
bytes32 private immutable _HASHED_VERSION;
bytes32 private immutable _TYPE_HASH;
/* solhint-enable var-name-mixedcase */
/**
* @dev Initializes the domain separator and parameter caches.
*
* The meaning of `name` and `version` is specified in
* https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
*
* - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
* - `version`: the current major version of the signing domain.
*
* NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
* contract upgrade].
*/
constructor(string memory name, string memory version) {
bytes32 hashedName = keccak256(bytes(name));
bytes32 hashedVersion = keccak256(bytes(version));
bytes32 typeHash = keccak256(
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
);
_HASHED_NAME = hashedName;
_HASHED_VERSION = hashedVersion;
_CACHED_CHAIN_ID = block.chainid;
_CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
_TYPE_HASH = typeHash;
}
/**
* @dev Returns the domain separator for the current chain.
*/
function _domainSeparatorV4() internal view returns (bytes32) {
if (block.chainid == _CACHED_CHAIN_ID) {
return _CACHED_DOMAIN_SEPARATOR;
} else {
return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
}
}
function _buildDomainSeparator(
bytes32 typeHash,
bytes32 nameHash,
bytes32 versionHash
) private view returns (bytes32) {
return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
}
/**
* @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
* function returns the hash of the fully encoded EIP712 message for this domain.
*
* This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
*
* ```solidity
* bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
* keccak256("Mail(address to,string contents)"),
* mailTo,
* keccak256(bytes(mailContents))
* )));
* address signer = ECDSA.recover(digest, signature);
* ```
*/
function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
// Check the signature length
// - case 65: r,s,v signature (standard)
// - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return recover(hash, v, r, s);
} else if (signature.length == 64) {
bytes32 r;
bytes32 vs;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
vs := mload(add(signature, 0x40))
}
return recover(hash, r, vs);
} else {
revert("ECDSA: invalid signature length");
}
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
*
* _Available since v4.2._
*/
function recover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address) {
bytes32 s;
uint8 v;
assembly {
s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
v := add(shr(255, vs), 27)
}
return recover(hash, v, r, s);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`, `r` and `s` signature fields separately.
*/
function recover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address) {
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
require(
uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,
"ECDSA: invalid signature 's' value"
);
require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
require(signer != address(0), "ECDSA: invalid signature");
return signer;
}
/**
* @dev Returns an Ethereum Signed Message, created from a `hash`. This
* produces hash corresponding to the one signed with the
* https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
* JSON-RPC method as part of EIP-191.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
/**
* @dev Returns an Ethereum Signed Typed Data, created from a
* `domainSeparator` and a `structHash`. This produces hash corresponding
* to the one signed with the
* https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
* JSON-RPC method as part of EIP-712.
*
* See {recover}.
*/
function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Trees proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
} else {
// Hash(current element of the proof + current computed hash)
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
}
}
// Check if the computed hash (root) is equal to the provided root
return computedHash == root;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IRuniverseLand {
enum PlotSize {
_8,
_16,
_32,
_64,
_128,
_256,
_512,
_1024,
_2048,
_4096
}
event LandMinted(address to, uint256 tokenId, IRuniverseLand.PlotSize size);
function mintTokenId(
address recipient,
uint256 tokenId,
PlotSize size
) external;
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IRuniverseLand","name":"_runiverseLand","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Address0Error","type":"error"},{"inputs":[],"name":"DeniedProcessDuringMinting","type":"error"},{"inputs":[{"internalType":"uint256","name":"sended_values","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"GivedValuesNotValid","type":"error"},{"inputs":[],"name":"IncorrectPurchaseLimit","type":"error"},{"inputs":[],"name":"MisconfiguredPrices","type":"error"},{"inputs":[{"internalType":"uint256","name":"correct_date","type":"uint256"},{"internalType":"uint256","name":"current_date","type":"uint256"}],"name":"WrongDateForProcess","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"},{"inputs":[],"name":"claimlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IRuniverseLand.PlotSize","name":"plotSize","type":"uint8"},{"internalType":"uint256","name":"numPlots","type":"uint256"},{"internalType":"uint256","name":"claimedMaxPlots","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claimlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimlistMintedPerSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimsStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimsStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"forwardERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAvailableLands","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlotPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlotsAvailablePerSize","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenIdPlotType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTotalMintedLands","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMintedLandsBySize","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IRuniverseLand.PlotSize","name":"plotSize","type":"uint8"},{"internalType":"uint256","name":"numPlots","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintlistMerkleRoot1","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintlistMerkleRoot2","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IRuniverseLand.PlotSize","name":"plotSize","type":"uint8"},{"internalType":"uint256","name":"numPlots","type":"uint256"},{"internalType":"uint256","name":"claimedMaxPlots","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintlistMintedPerSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintlistStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintlistStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IRuniverseLand.PlotSize[]","name":"plotSizes","type":"uint8[]"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"plotGlobalOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"plotPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"plotSizeLocalOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"plotsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"runiverseLand","outputs":[{"internalType":"contract IRuniverseLand","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"setClaimlistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newClaimsStartTime","type":"uint256"}],"name":"setClaimsStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newGlobalIdOffset","type":"uint256"}],"name":"setGlobalIdOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newPlotSizeLocalOffset","type":"uint256[]"}],"name":"setLocalIdOffsets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"setMintlistMerkleRoot1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot","type":"bytes32"}],"name":"setMintlistMerkleRoot2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAllowlistMintStartTime","type":"uint256"}],"name":"setMintlistStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newPrices","type":"uint256[]"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPublicMintStartTime","type":"uint256"}],"name":"setPublicMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IRuniverseLand","name":"_newRuniverseLandAddress","type":"address"}],"name":"setRuniverseLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newVaultAddress","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060a0016040528061cd1461ffff1681526020016141bc61ffff16815260200161023061ffff168152602001606961ffff168152602001600761ffff1681525060049060056200005992919062000511565b506040518060a00160405280600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152602001600160ff168152506005906005620000a792919062000569565b5060016006556040518060a001604052807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81526020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff815250600790600562000186929190620005c0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6008557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6009557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a553480156200020057600080fd5b50604051620047f7380380620047f7833981810160405281019062000226919062000648565b620002466200023a6200027660201b60201c565b6200027e60201b60201c565b600180819055506200025e816200034260201b60201c565b6200026f336200041560201b60201c565b5062000764565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003526200027660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000378620004e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c890620006a1565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004256200027660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200044b620004e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049b90620006a1565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805482825590600052602060002090810192821562000556579160200282015b8281111562000555578251829061ffff1690559160200191906001019062000532565b5b50905062000565919062000612565b5090565b828054828255906000526020600020908101928215620005ad579160200282015b82811115620005ac578251829060ff169055916020019190600101906200058a565b5b509050620005bc919062000612565b5090565b828054828255906000526020600020908101928215620005ff579160200282015b82811115620005fe578251825591602001919060010190620005e1565b5b5090506200060e919062000612565b5090565b5b808211156200062d57600081600090555060010162000613565b5090565b60008151905062000642816200074a565b92915050565b6000602082840312156200066157620006606200071c565b5b6000620006718482850162000631565b91505092915050565b600062000689602083620006c3565b9150620006968262000721565b602082019050919050565b60006020820190508181036000830152620006bc816200067a565b9050919050565b600082825260208201905092915050565b6000620006e182620006fc565b9050919050565b6000620006f582620006d4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200075581620006e8565b81146200076157600080fd5b50565b61408380620007746000396000f3fe6080604052600436106102725760003560e01c8063853828b61161014f578063a65e6c0d116100c1578063cef582831161007a578063cef5828314610922578063d3cf00a31461094b578063f26748e214610976578063f2fde38b14610992578063f4cde4c0146109bb578063fbfa77cf146109e657610272565b8063a65e6c0d14610802578063ae1507f01461083f578063bf76a3051461087c578063c2774dac146108a7578063c72d2328146108d0578063cc644fd2146108f957610272565b80638da5cb5b116101135780638da5cb5b14610706578063914a15fd1461073157806393cb41471461075c5780639727151a146107875780639f0664b5146107b0578063a637f973146107d957610272565b8063853828b61461064557806385535cc51461065c5780638c6d8ef6146106855780638d56a17b146106b05780638d61a156146106db57610272565b8063411d13f7116101e85780636e1a1a60116101ac5780636e1a1a6014610525578063715018a61461054e57806377a63a6814610565578063792a77d9146105a257806379cf92d3146105df57806384c545dc1461060857610272565b8063411d13f7146104615780634e054c391461048a5780634ed1eb24146104a657806350a99405146104d15780635fcd80a6146104fc57610272565b8063260c08861161023a578063260c08861461034e5780632b7b4aef146103775780632e1a7d4d146103b457806332e9646e146103dd57806333a5a99f1461041a5780633e97414f1461043657610272565b80630b230a15146102775780630e1757b8146102a25780631c504365146102cd5780631c7f4a02146102f85780632560e37614610323575b600080fd5b34801561028357600080fd5b5061028c610a11565b6040516102999190613717565b60405180910390f35b3480156102ae57600080fd5b506102b7610b70565b6040516102c4919061376f565b60405180910390f35b3480156102d957600080fd5b506102e2610b96565b6040516102ef919061392a565b60405180910390f35b34801561030457600080fd5b5061030d610c32565b60405161031a9190613754565b60405180910390f35b34801561032f57600080fd5b50610338610c38565b6040516103459190613754565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613256565b610c3e565b005b34801561038357600080fd5b5061039e60048036038101906103999190613256565b610cc4565b6040516103ab919061392a565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190613256565b610cd1565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613256565b610e1f565b604051610411919061392a565b60405180910390f35b610434600480360381019061042f91906131ce565b610e37565b005b34801561044257600080fd5b5061044b6110ab565b6040516104589190613739565b60405180910390f35b34801561046d57600080fd5b50610488600480360381019061048391906130c7565b6110b8565b005b6104a4600480360381019061049f91906131ce565b61113e565b005b3480156104b257600080fd5b506104bb61144f565b6040516104c89190613754565b60405180910390f35b3480156104dd57600080fd5b506104e6611455565b6040516104f39190613717565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613256565b6114ad565b005b34801561053157600080fd5b5061054c60048036038101906105479190613256565b611533565b005b34801561055a57600080fd5b506105636115b9565b005b34801561057157600080fd5b5061058c60048036038101906105879190613256565b611641565b604051610599919061392a565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190612f18565b611665565b6040516105d69190613739565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061304d565b611762565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612f8c565b611882565b60405161063c919061392a565b60405180910390f35b34801561065157600080fd5b5061065a6118a7565b005b34801561066857600080fd5b50610683600480360381019061067e9190612eeb565b6119f4565b005b34801561069157600080fd5b5061069a611ab4565b6040516106a79190613739565b60405180910390f35b3480156106bc57600080fd5b506106c5611ac1565b6040516106d2919061392a565b60405180910390f35b3480156106e757600080fd5b506106f0611ac7565b6040516106fd9190613717565b60405180910390f35b34801561071257600080fd5b5061071b611cf7565b6040516107289190613681565b60405180910390f35b34801561073d57600080fd5b50610746611d20565b6040516107539190613717565b60405180910390f35b34801561076857600080fd5b50610771611d78565b60405161077e9190613739565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a991906130f4565b611d85565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190612fcc565b611efa565b005b3480156107e557600080fd5b5061080060048036038101906107fb9190613256565b61203e565b005b34801561080e57600080fd5b5061082960048036038101906108249190613256565b612103565b604051610836919061392a565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612f8c565b612127565b604051610873919061392a565b60405180910390f35b34801561088857600080fd5b5061089161214c565b60405161089e919061392a565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906130c7565b612152565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190613134565b6121d8565b005b34801561090557600080fd5b50610920600480360381019061091b919061304d565b612298565b005b34801561092e57600080fd5b50610949600480360381019061094491906130c7565b6123b7565b005b34801561095757600080fd5b5061096061243d565b60405161096d919061392a565b60405180910390f35b610990600480360381019061098b919061318e565b612443565b005b34801561099e57600080fd5b506109b960048036038101906109b49190612ebe565b61253c565b005b3480156109c757600080fd5b506109d0612634565b6040516109dd919061392a565b60405180910390f35b3480156109f257600080fd5b506109fb61263a565b604051610a08919061369c565b60405180910390f35b60606000600567ffffffffffffffff811115610a3057610a2f613ccc565b5b604051908082528060200260200182016040528015610a5e5781602001602082028036833780820191505090505b509050600e60008081526020019081526020016000205481600081518110610a8957610a88613c9d565b5b602002602001018181525050600e6000600181526020019081526020016000205481600181518110610abe57610abd613c9d565b5b602002602001018181525050600e6000600281526020019081526020016000205481600281518110610af357610af2613c9d565b5b602002602001018181525050600e6000600381526020019081526020016000205481600381518110610b2857610b27613c9d565b5b602002602001018181525050600e6000600481526020019081526020016000205481600481518110610b5d57610b5c613c9d565b5b6020026020010181815250508091505090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600e60006004815260200190815260200160002054600e60006003815260200190815260200160002054600e60006002815260200190815260200160002054600e60006001815260200190815260200160002054600e600080815260200190815260200160002054610c0b91906139f7565b610c1591906139f7565b610c1f91906139f7565b610c2991906139f7565b90508091505090565b600c5481565b600d5481565b610c46612660565b73ffffffffffffffffffffffffffffffffffffffff16610c64611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb19061382a565b60405180910390fd5b80600a8190555050565b600060ff82169050919050565b610cd9612660565b73ffffffffffffffffffffffffffffffffffffffff16610cf7611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d449061382a565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d959061366c565b60006040518083038185875af1925050503d8060008114610dd2576040519150601f19603f3d011682016040523d82523d6000602084013e610dd7565b606091505b5050905080610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e129061386a565b60405180910390fd5b5050565b600e6020528060005260406000206000915090505481565b60026001541415610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061390a565b60405180910390fd5b6002600181905550610e8d6110ab565b610ed257600a54426040517f66803fc1000000000000000000000000000000000000000000000000000000008152600401610ec992919061396e565b60405180910390fd5b600033866009811115610ee857610ee7613c6e565b5b85604051602001610efb939291906135ed565b604051602081830303815290604052805190602001209050610f61838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d5483612668565b610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906138ea565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905084868260008a6009811115610ffb57610ffa613c6e565b5b81526020019081526020016000205461101491906139f7565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906137ea565b60405180910390fd5b8581600089600981111561106c5761106b613c6e565b5b8152602001908152602001600020600082825461108991906139f7565b9250508190555061109b87873361271e565b5050600180819055505050505050565b6000600a54421015905090565b6110c0612660565b73ffffffffffffffffffffffffffffffffffffffff166110de611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b9061382a565b60405180910390fd5b80600d8190555050565b60026001541415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b9061390a565b60405180910390fd5b6002600181905550611194611d78565b6111d957600954426040517f66803fc10000000000000000000000000000000000000000000000000000000081526004016111d092919061396e565b60405180910390fd5b600084111580156111ea5750601484115b15611221576040517fca02d6eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003386600981111561123757611236613c6e565b5b8560405160200161124a939291906135ed565b6040516020818303038152906040528051906020012090506112b0838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612668565b806113055750611304838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612668565b5b611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906138ea565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905084868260008a600981111561139f5761139e613c6e565b5b8152602001908152602001600020546113b891906139f7565b11156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f0906138ca565b60405180910390fd5b858160008960098111156114105761140f613c6e565b5b8152602001908152602001600020600082825461142d91906139f7565b9250508190555061143f8787336128bb565b5050600180819055505050505050565b600b5481565b606060048054806020026020016040519081016040528092919081815260200182805480156114a357602002820191906000526020600020905b81548152602001906001019080831161148f575b5050505050905090565b6114b5612660565b73ffffffffffffffffffffffffffffffffffffffff166114d3611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061382a565b60405180910390fd5b8060088190555050565b61153b612660565b73ffffffffffffffffffffffffffffffffffffffff16611559611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061382a565b60405180910390fd5b8060098190555050565b6115c1612660565b73ffffffffffffffffffffffffffffffffffffffff166115df611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061382a565b60405180910390fd5b61163f60006129b2565b565b6005818154811061165157600080fd5b906000526020600020016000915090505481565b6000808560405160200161167991906135d2565b6040516020818303038152906040528051906020012090508481146116a257600091505061175a565b6116f0848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5487612668565b806117455750611744848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5487612668565b5b1561175457600191505061175a565b60009150505b949350505050565b61176a612660565b73ffffffffffffffffffffffffffffffffffffffff16611788611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061382a565b60405180910390fd5b6117e6611d78565b1561181d576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600582829050101561186c578181905060056040517f6aab761a000000000000000000000000000000000000000000000000000000008152600401611863929190613945565b60405180910390fd5b81816007919061187d929190612c54565b505050565b6010602052816000526040600020602052806000526040600020600091509150505481565b6118af612660565b73ffffffffffffffffffffffffffffffffffffffff166118cd611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a9061382a565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161196b9061366c565b60006040518083038185875af1925050503d80600081146119a8576040519150601f19603f3d011682016040523d82523d6000602084013e6119ad565b606091505b50509050806119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061380a565b60405180910390fd5b50565b6119fc612660565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061382a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854421015905090565b600a5481565b60606000600567ffffffffffffffff811115611ae657611ae5613ccc565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b509050600e6000808152602001908152602001600020546004600081548110611b4057611b3f613c9d565b5b9060005260206000200154611b559190613aa7565b81600081518110611b6957611b68613c9d565b5b602002602001018181525050600e600060018152602001908152602001600020546004600181548110611b9f57611b9e613c9d565b5b9060005260206000200154611bb49190613aa7565b81600181518110611bc857611bc7613c9d565b5b602002602001018181525050600e600060028152602001908152602001600020546004600281548110611bfe57611bfd613c9d565b5b9060005260206000200154611c139190613aa7565b81600281518110611c2757611c26613c9d565b5b602002602001018181525050600e600060038152602001908152602001600020546004600381548110611c5d57611c5c613c9d565b5b9060005260206000200154611c729190613aa7565b81600381518110611c8657611c85613c9d565b5b602002602001018181525050600e6000600481526020019081526020016000205460048081548110611cbb57611cba613c9d565b5b9060005260206000200154611cd09190613aa7565b81600481518110611ce457611ce3613c9d565b5b6020026020010181815250508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b5050505050905090565b6000600954421015905090565b611d8d612660565b73ffffffffffffffffffffffffffffffffffffffff16611dab611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df89061382a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e68576040517f48ac165200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ea39291906136b7565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef5919061309a565b505050565b611f02612660565b73ffffffffffffffffffffffffffffffffffffffff16611f20611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d9061382a565b60405180910390fd5b818190508484905014611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb5906137ca565b60405180910390fd5b60005b8282905081101561203757612026858583818110611fe257611fe1613c9d565b5b9050602002016020810190611ff79190613161565b600185858581811061200c5761200b613c9d565b5b90506020020160208101906120219190612ebe565b61271e565b8061203090613bbe565b9050611fc1565b5050505050565b612046612660565b73ffffffffffffffffffffffffffffffffffffffff16612064611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b19061382a565b60405180910390fd5b6120c2611d78565b156120f9576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b6007818154811061211357600080fd5b906000526020600020016000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b60065481565b61215a612660565b73ffffffffffffffffffffffffffffffffffffffff16612178611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c59061382a565b60405180910390fd5b80600c8190555050565b6121e0612660565b73ffffffffffffffffffffffffffffffffffffffff166121fe611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061382a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a0612660565b73ffffffffffffffffffffffffffffffffffffffff166122be611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b9061382a565b60405180910390fd5b60058282905014612362578181905060056040517f6aab761a000000000000000000000000000000000000000000000000000000008152600401612359929190613945565b60405180910390fd5b61236a611d78565b156123a1576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600591906123b2929190612c54565b505050565b6123bf612660565b73ffffffffffffffffffffffffffffffffffffffff166123dd611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a9061382a565b60405180910390fd5b80600b8190555050565b60085481565b60026001541415612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061390a565b60405180910390fd5b6002600181905550612499611ab4565b6124de57600854426040517f66803fc10000000000000000000000000000000000000000000000000000000081526004016124d592919061396e565b60405180910390fd5b600081111580156124ef5750601481115b15612526576040517fca02d6eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125318282336128bb565b600180819055505050565b612544612660565b73ffffffffffffffffffffffffffffffffffffffff16612562611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af9061382a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f906137aa565b60405180910390fd5b612631816129b2565b50565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008082905060005b855181101561271057600086828151811061268f5761268e613c9d565b5b602002602001015190508083116126d05782816040516020016126b3929190613640565b6040516020818303038152906040528051906020012092506126fc565b80836040516020016126e3929190613640565b6040516020818303038152906040528051906020012092505b50808061270890613bbe565b915050612671565b508381149150509392505050565b600483600981111561273357612732613c6e565b5b8154811061274457612743613c9d565b5b906000526020600020015482600e600086600981111561276757612766613c6e565b5b81526020019081526020016000205461278091906139f7565b11156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b8906138aa565b60405180910390fd5b60005b828110156128b55760006127d785612a76565b9050600e60008660098111156127f0576127ef613c6e565b5b81526020019081526020016000206000815461280b90613bbe565b91905081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386ebf0108483886040518463ffffffff1660e01b8152600401612871939291906136e0565b600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b5050505050806128ae90613bbe565b90506127c4565b50505050565b600060078460098111156128d2576128d1613c6e565b5b815481106128e3576128e2613c9d565b5b906000526020600020015411612925576040517fc5fadba600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600784600981111561293b5761293a613c6e565b5b8154811061294c5761294b613c9d565b5b90600052602060002001546129619190613a4d565b34146129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129999061384a565b60405180910390fd5b6129ad83838361271e565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600654600e60006004815260200190815260200160002054600e60006003815260200190815260200160002054600e60006002815260200190815260200160002054600e60006001815260200190815260200160002054600e600080815260200190815260200160002054612aee91906139f7565b612af891906139f7565b612b0291906139f7565b612b0c91906139f7565b612b1691906139f7565b905060006005846009811115612b2f57612b2e613c6e565b5b81548110612b4057612b3f613c9d565b5b9060005260206000200154600e6000866009811115612b6257612b61613c6e565b5b815260200190815260200160002054612b7b91906139f7565b905063ffffffff811115612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb9061388a565b60405180910390fd5b60ff846009811115612bd957612bd8613c6e565b5b1115612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c119061378a565b60405180910390fd5b836009811115612c2d57612c2c613c6e565b5b600882901b602884901b612c4191906139f7565b612c4b91906139f7565b92505050919050565b828054828255906000526020600020908101928215612c90579160200282015b82811115612c8f578235825591602001919060010190612c74565b5b509050612c9d9190612ca1565b5090565b5b80821115612cba576000816000905550600101612ca2565b5090565b600081359050612ccd81613f9c565b92915050565b600081359050612ce281613fb3565b92915050565b60008083601f840112612cfe57612cfd613d00565b5b8235905067ffffffffffffffff811115612d1b57612d1a613cfb565b5b602083019150836020820283011115612d3757612d36613d05565b5b9250929050565b60008083601f840112612d5457612d53613d00565b5b8235905067ffffffffffffffff811115612d7157612d70613cfb565b5b602083019150836020820283011115612d8d57612d8c613d05565b5b9250929050565b60008083601f840112612daa57612da9613d00565b5b8235905067ffffffffffffffff811115612dc757612dc6613cfb565b5b602083019150836020820283011115612de357612de2613d05565b5b9250929050565b60008083601f840112612e0057612dff613d00565b5b8235905067ffffffffffffffff811115612e1d57612e1c613cfb565b5b602083019150836020820283011115612e3957612e38613d05565b5b9250929050565b600081519050612e4f81613fca565b92915050565b600081359050612e6481613fe1565b92915050565b600081359050612e7981613ff8565b92915050565b600081359050612e8e8161400f565b92915050565b600081359050612ea381614026565b92915050565b600081359050612eb881614036565b92915050565b600060208284031215612ed457612ed3613d0f565b5b6000612ee284828501612cbe565b91505092915050565b600060208284031215612f0157612f00613d0f565b5b6000612f0f84828501612cd3565b91505092915050565b60008060008060608587031215612f3257612f31613d0f565b5b6000612f4087828801612cbe565b9450506020612f5187828801612e55565b935050604085013567ffffffffffffffff811115612f7257612f71613d0a565b5b612f7e87828801612d3e565b925092505092959194509250565b60008060408385031215612fa357612fa2613d0f565b5b6000612fb185828601612cbe565b9250506020612fc285828601612ea9565b9150509250929050565b60008060008060408587031215612fe657612fe5613d0f565b5b600085013567ffffffffffffffff81111561300457613003613d0a565b5b61301087828801612d94565b9450945050602085013567ffffffffffffffff81111561303357613032613d0a565b5b61303f87828801612ce8565b925092505092959194509250565b6000806020838503121561306457613063613d0f565b5b600083013567ffffffffffffffff81111561308257613081613d0a565b5b61308e85828601612dea565b92509250509250929050565b6000602082840312156130b0576130af613d0f565b5b60006130be84828501612e40565b91505092915050565b6000602082840312156130dd576130dc613d0f565b5b60006130eb84828501612e55565b91505092915050565b6000806040838503121561310b5761310a613d0f565b5b600061311985828601612e6a565b925050602061312a85828601612ea9565b9150509250929050565b60006020828403121561314a57613149613d0f565b5b600061315884828501612e7f565b91505092915050565b60006020828403121561317757613176613d0f565b5b600061318584828501612e94565b91505092915050565b600080604083850312156131a5576131a4613d0f565b5b60006131b385828601612e94565b92505060206131c485828601612ea9565b9150509250929050565b6000806000806000608086880312156131ea576131e9613d0f565b5b60006131f888828901612e94565b955050602061320988828901612ea9565b945050604061321a88828901612ea9565b935050606086013567ffffffffffffffff81111561323b5761323a613d0a565b5b61324788828901612d3e565b92509250509295509295909350565b60006020828403121561326c5761326b613d0f565b5b600061327a84828501612ea9565b91505092915050565b600061328f838361359d565b60208301905092915050565b6132a481613aed565b82525050565b6132b381613adb565b82525050565b6132ca6132c582613adb565b613c07565b82525050565b60006132db826139a7565b6132e581856139bf565b93506132f083613997565b8060005b838110156133215781516133088882613283565b9750613313836139b2565b9250506001810190506132f4565b5085935050505092915050565b61333781613aff565b82525050565b61334681613b0b565b82525050565b61335d61335882613b0b565b613c19565b82525050565b61336c81613b76565b82525050565b61337b81613b9a565b82525050565b61338a81613bac565b82525050565b600061339d6013836139db565b91506133a882613d21565b602082019050919050565b60006133c06026836139db565b91506133cb82613d4a565b604082019050919050565b60006133e36020836139db565b91506133ee82613d99565b602082019050919050565b6000613406601a836139db565b915061341182613dc2565b602082019050919050565b6000613429601f836139db565b915061343482613deb565b602082019050919050565b600061344c6001836139ec565b915061345782613e14565b600182019050919050565b600061346f6020836139db565b915061347a82613e3d565b602082019050919050565b60006134926020836139db565b915061349d82613e66565b602082019050919050565b60006134b5601b836139db565b91506134c082613e8f565b602082019050919050565b60006134d86014836139db565b91506134e382613eb8565b602082019050919050565b60006134fb601d836139db565b915061350682613ee1565b602082019050919050565b600061351e6000836139d0565b915061352982613f0a565b600082019050919050565b60006135416019836139db565b915061354c82613f0d565b602082019050919050565b6000613564600e836139db565b915061356f82613f36565b602082019050919050565b6000613587601f836139db565b915061359282613f5f565b602082019050919050565b6135a681613b6c565b82525050565b6135b581613b6c565b82525050565b6135cc6135c782613b6c565b613c35565b82525050565b60006135de82846132b9565b60148201915081905092915050565b60006135f982866132b9565b6014820191506136088261343f565b915061361482856135bb565b6020820191506136238261343f565b915061362f82846135bb565b602082019150819050949350505050565b600061364c828561334c565b60208201915061365c828461334c565b6020820191508190509392505050565b600061367782613511565b9150819050919050565b600060208201905061369660008301846132aa565b92915050565b60006020820190506136b1600083018461329b565b92915050565b60006040820190506136cc60008301856132aa565b6136d960208301846135ac565b9392505050565b60006060820190506136f560008301866132aa565b61370260208301856135ac565b61370f6040830184613372565b949350505050565b6000602082019050818103600083015261373181846132d0565b905092915050565b600060208201905061374e600083018461332e565b92915050565b6000602082019050613769600083018461333d565b92915050565b60006020820190506137846000830184613363565b92915050565b600060208201905081810360008301526137a381613390565b9050919050565b600060208201905081810360008301526137c3816133b3565b9050919050565b600060208201905081810360008301526137e3816133d6565b9050919050565b60006020820190508181036000830152613803816133f9565b9050919050565b600060208201905081810360008301526138238161341c565b9050919050565b6000602082019050818103600083015261384381613462565b9050919050565b6000602082019050818103600083015261386381613485565b9050919050565b60006020820190508181036000830152613883816134a8565b9050919050565b600060208201905081810360008301526138a3816134cb565b9050919050565b600060208201905081810360008301526138c3816134ee565b9050919050565b600060208201905081810360008301526138e381613534565b9050919050565b6000602082019050818103600083015261390381613557565b9050919050565b600060208201905081810360008301526139238161357a565b9050919050565b600060208201905061393f60008301846135ac565b92915050565b600060408201905061395a60008301856135ac565b6139676020830184613381565b9392505050565b600060408201905061398360008301856135ac565b61399060208301846135ac565b9392505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a0282613b6c565b9150613a0d83613b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a4257613a41613c3f565b5b828201905092915050565b6000613a5882613b6c565b9150613a6383613b6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a9c57613a9b613c3f565b5b828202905092915050565b6000613ab282613b6c565b9150613abd83613b6c565b925082821015613ad057613acf613c3f565b5b828203905092915050565b6000613ae682613b4c565b9050919050565b6000613af882613b4c565b9050919050565b60008115159050919050565b6000819050919050565b6000613b2082613adb565b9050919050565b6000613b3282613adb565b9050919050565b6000819050613b4782613f88565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613b8182613b88565b9050919050565b6000613b9382613b4c565b9050919050565b6000613ba582613b39565b9050919050565b6000613bb782613b6c565b9050919050565b6000613bc982613b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bfc57613bfb613c3f565b5b600182019050919050565b6000613c1282613c23565b9050919050565b6000819050919050565b6000613c2e82613d14565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008160601b9050919050565b7f506c6f7420696e646578206f766572666c6f7700000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4172726179732073686f756c642068617665207468652073616d652073697a65600082015250565b7f436c61696d696e67206d6f7265207468616e20616c6c6f776564000000000000600082015250565b7f776974686472617720616c6c20776173206e6f742073756363657366756c6c00600082015250565b7f3a00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45746865722076616c75652073656e74206973206e6f74206163637572617465600082015250565b7f776974686472617720776173206e6f742073756363657366756c6c0000000000600082015250565b7f4c6f63616c20696e646578206f766572666c6f77000000000000000000000000600082015250565b7f547279696e6720746f206d696e7420746f6f206d616e7920706c6f7473000000600082015250565b50565b7f4d696e74696e67206d6f7265207468616e20616c6c6f77656400000000000000600082015250565b7f496e76616c69642070726f6f662e000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600a8110613f9957613f98613c6e565b5b50565b613fa581613adb565b8114613fb057600080fd5b50565b613fbc81613aed565b8114613fc757600080fd5b50565b613fd381613aff565b8114613fde57600080fd5b50565b613fea81613b0b565b8114613ff557600080fd5b50565b61400181613b15565b811461400c57600080fd5b50565b61401881613b27565b811461402357600080fd5b50565b600a811061403357600080fd5b50565b61403f81613b6c565b811461404a57600080fd5b5056fea26469706673582212200316f03d52b323fff983f8a45baac45a26cae927cf9666283f117cb3c3cc9d5964736f6c63430008060033000000000000000000000000d5c7e6257d264ede9cc7a2e74e52df65e727eb4e
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063853828b61161014f578063a65e6c0d116100c1578063cef582831161007a578063cef5828314610922578063d3cf00a31461094b578063f26748e214610976578063f2fde38b14610992578063f4cde4c0146109bb578063fbfa77cf146109e657610272565b8063a65e6c0d14610802578063ae1507f01461083f578063bf76a3051461087c578063c2774dac146108a7578063c72d2328146108d0578063cc644fd2146108f957610272565b80638da5cb5b116101135780638da5cb5b14610706578063914a15fd1461073157806393cb41471461075c5780639727151a146107875780639f0664b5146107b0578063a637f973146107d957610272565b8063853828b61461064557806385535cc51461065c5780638c6d8ef6146106855780638d56a17b146106b05780638d61a156146106db57610272565b8063411d13f7116101e85780636e1a1a60116101ac5780636e1a1a6014610525578063715018a61461054e57806377a63a6814610565578063792a77d9146105a257806379cf92d3146105df57806384c545dc1461060857610272565b8063411d13f7146104615780634e054c391461048a5780634ed1eb24146104a657806350a99405146104d15780635fcd80a6146104fc57610272565b8063260c08861161023a578063260c08861461034e5780632b7b4aef146103775780632e1a7d4d146103b457806332e9646e146103dd57806333a5a99f1461041a5780633e97414f1461043657610272565b80630b230a15146102775780630e1757b8146102a25780631c504365146102cd5780631c7f4a02146102f85780632560e37614610323575b600080fd5b34801561028357600080fd5b5061028c610a11565b6040516102999190613717565b60405180910390f35b3480156102ae57600080fd5b506102b7610b70565b6040516102c4919061376f565b60405180910390f35b3480156102d957600080fd5b506102e2610b96565b6040516102ef919061392a565b60405180910390f35b34801561030457600080fd5b5061030d610c32565b60405161031a9190613754565b60405180910390f35b34801561032f57600080fd5b50610338610c38565b6040516103459190613754565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613256565b610c3e565b005b34801561038357600080fd5b5061039e60048036038101906103999190613256565b610cc4565b6040516103ab919061392a565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190613256565b610cd1565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613256565b610e1f565b604051610411919061392a565b60405180910390f35b610434600480360381019061042f91906131ce565b610e37565b005b34801561044257600080fd5b5061044b6110ab565b6040516104589190613739565b60405180910390f35b34801561046d57600080fd5b50610488600480360381019061048391906130c7565b6110b8565b005b6104a4600480360381019061049f91906131ce565b61113e565b005b3480156104b257600080fd5b506104bb61144f565b6040516104c89190613754565b60405180910390f35b3480156104dd57600080fd5b506104e6611455565b6040516104f39190613717565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613256565b6114ad565b005b34801561053157600080fd5b5061054c60048036038101906105479190613256565b611533565b005b34801561055a57600080fd5b506105636115b9565b005b34801561057157600080fd5b5061058c60048036038101906105879190613256565b611641565b604051610599919061392a565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190612f18565b611665565b6040516105d69190613739565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061304d565b611762565b005b34801561061457600080fd5b5061062f600480360381019061062a9190612f8c565b611882565b60405161063c919061392a565b60405180910390f35b34801561065157600080fd5b5061065a6118a7565b005b34801561066857600080fd5b50610683600480360381019061067e9190612eeb565b6119f4565b005b34801561069157600080fd5b5061069a611ab4565b6040516106a79190613739565b60405180910390f35b3480156106bc57600080fd5b506106c5611ac1565b6040516106d2919061392a565b60405180910390f35b3480156106e757600080fd5b506106f0611ac7565b6040516106fd9190613717565b60405180910390f35b34801561071257600080fd5b5061071b611cf7565b6040516107289190613681565b60405180910390f35b34801561073d57600080fd5b50610746611d20565b6040516107539190613717565b60405180910390f35b34801561076857600080fd5b50610771611d78565b60405161077e9190613739565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a991906130f4565b611d85565b005b3480156107bc57600080fd5b506107d760048036038101906107d29190612fcc565b611efa565b005b3480156107e557600080fd5b5061080060048036038101906107fb9190613256565b61203e565b005b34801561080e57600080fd5b5061082960048036038101906108249190613256565b612103565b604051610836919061392a565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612f8c565b612127565b604051610873919061392a565b60405180910390f35b34801561088857600080fd5b5061089161214c565b60405161089e919061392a565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906130c7565b612152565b005b3480156108dc57600080fd5b506108f760048036038101906108f29190613134565b6121d8565b005b34801561090557600080fd5b50610920600480360381019061091b919061304d565b612298565b005b34801561092e57600080fd5b50610949600480360381019061094491906130c7565b6123b7565b005b34801561095757600080fd5b5061096061243d565b60405161096d919061392a565b60405180910390f35b610990600480360381019061098b919061318e565b612443565b005b34801561099e57600080fd5b506109b960048036038101906109b49190612ebe565b61253c565b005b3480156109c757600080fd5b506109d0612634565b6040516109dd919061392a565b60405180910390f35b3480156109f257600080fd5b506109fb61263a565b604051610a08919061369c565b60405180910390f35b60606000600567ffffffffffffffff811115610a3057610a2f613ccc565b5b604051908082528060200260200182016040528015610a5e5781602001602082028036833780820191505090505b509050600e60008081526020019081526020016000205481600081518110610a8957610a88613c9d565b5b602002602001018181525050600e6000600181526020019081526020016000205481600181518110610abe57610abd613c9d565b5b602002602001018181525050600e6000600281526020019081526020016000205481600281518110610af357610af2613c9d565b5b602002602001018181525050600e6000600381526020019081526020016000205481600381518110610b2857610b27613c9d565b5b602002602001018181525050600e6000600481526020019081526020016000205481600481518110610b5d57610b5c613c9d565b5b6020026020010181815250508091505090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600e60006004815260200190815260200160002054600e60006003815260200190815260200160002054600e60006002815260200190815260200160002054600e60006001815260200190815260200160002054600e600080815260200190815260200160002054610c0b91906139f7565b610c1591906139f7565b610c1f91906139f7565b610c2991906139f7565b90508091505090565b600c5481565b600d5481565b610c46612660565b73ffffffffffffffffffffffffffffffffffffffff16610c64611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb19061382a565b60405180910390fd5b80600a8190555050565b600060ff82169050919050565b610cd9612660565b73ffffffffffffffffffffffffffffffffffffffff16610cf7611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d449061382a565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d959061366c565b60006040518083038185875af1925050503d8060008114610dd2576040519150601f19603f3d011682016040523d82523d6000602084013e610dd7565b606091505b5050905080610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e129061386a565b60405180910390fd5b5050565b600e6020528060005260406000206000915090505481565b60026001541415610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e749061390a565b60405180910390fd5b6002600181905550610e8d6110ab565b610ed257600a54426040517f66803fc1000000000000000000000000000000000000000000000000000000008152600401610ec992919061396e565b60405180910390fd5b600033866009811115610ee857610ee7613c6e565b5b85604051602001610efb939291906135ed565b604051602081830303815290604052805190602001209050610f61838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d5483612668565b610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906138ea565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905084868260008a6009811115610ffb57610ffa613c6e565b5b81526020019081526020016000205461101491906139f7565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906137ea565b60405180910390fd5b8581600089600981111561106c5761106b613c6e565b5b8152602001908152602001600020600082825461108991906139f7565b9250508190555061109b87873361271e565b5050600180819055505050505050565b6000600a54421015905090565b6110c0612660565b73ffffffffffffffffffffffffffffffffffffffff166110de611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b9061382a565b60405180910390fd5b80600d8190555050565b60026001541415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b9061390a565b60405180910390fd5b6002600181905550611194611d78565b6111d957600954426040517f66803fc10000000000000000000000000000000000000000000000000000000081526004016111d092919061396e565b60405180910390fd5b600084111580156111ea5750601484115b15611221576040517fca02d6eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003386600981111561123757611236613c6e565b5b8560405160200161124a939291906135ed565b6040516020818303038152906040528051906020012090506112b0838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612668565b806113055750611304838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612668565b5b611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906138ea565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905084868260008a600981111561139f5761139e613c6e565b5b8152602001908152602001600020546113b891906139f7565b11156113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f0906138ca565b60405180910390fd5b858160008960098111156114105761140f613c6e565b5b8152602001908152602001600020600082825461142d91906139f7565b9250508190555061143f8787336128bb565b5050600180819055505050505050565b600b5481565b606060048054806020026020016040519081016040528092919081815260200182805480156114a357602002820191906000526020600020905b81548152602001906001019080831161148f575b5050505050905090565b6114b5612660565b73ffffffffffffffffffffffffffffffffffffffff166114d3611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061382a565b60405180910390fd5b8060088190555050565b61153b612660565b73ffffffffffffffffffffffffffffffffffffffff16611559611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a69061382a565b60405180910390fd5b8060098190555050565b6115c1612660565b73ffffffffffffffffffffffffffffffffffffffff166115df611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061382a565b60405180910390fd5b61163f60006129b2565b565b6005818154811061165157600080fd5b906000526020600020016000915090505481565b6000808560405160200161167991906135d2565b6040516020818303038152906040528051906020012090508481146116a257600091505061175a565b6116f0848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5487612668565b806117455750611744848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5487612668565b5b1561175457600191505061175a565b60009150505b949350505050565b61176a612660565b73ffffffffffffffffffffffffffffffffffffffff16611788611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d59061382a565b60405180910390fd5b6117e6611d78565b1561181d576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600582829050101561186c578181905060056040517f6aab761a000000000000000000000000000000000000000000000000000000008152600401611863929190613945565b60405180910390fd5b81816007919061187d929190612c54565b505050565b6010602052816000526040600020602052806000526040600020600091509150505481565b6118af612660565b73ffffffffffffffffffffffffffffffffffffffff166118cd611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a9061382a565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161196b9061366c565b60006040518083038185875af1925050503d80600081146119a8576040519150601f19603f3d011682016040523d82523d6000602084013e6119ad565b606091505b50509050806119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061380a565b60405180910390fd5b50565b6119fc612660565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061382a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854421015905090565b600a5481565b60606000600567ffffffffffffffff811115611ae657611ae5613ccc565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b509050600e6000808152602001908152602001600020546004600081548110611b4057611b3f613c9d565b5b9060005260206000200154611b559190613aa7565b81600081518110611b6957611b68613c9d565b5b602002602001018181525050600e600060018152602001908152602001600020546004600181548110611b9f57611b9e613c9d565b5b9060005260206000200154611bb49190613aa7565b81600181518110611bc857611bc7613c9d565b5b602002602001018181525050600e600060028152602001908152602001600020546004600281548110611bfe57611bfd613c9d565b5b9060005260206000200154611c139190613aa7565b81600281518110611c2757611c26613c9d565b5b602002602001018181525050600e600060038152602001908152602001600020546004600381548110611c5d57611c5c613c9d565b5b9060005260206000200154611c729190613aa7565b81600381518110611c8657611c85613c9d565b5b602002602001018181525050600e6000600481526020019081526020016000205460048081548110611cbb57611cba613c9d565b5b9060005260206000200154611cd09190613aa7565b81600481518110611ce457611ce3613c9d565b5b6020026020010181815250508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b5050505050905090565b6000600954421015905090565b611d8d612660565b73ffffffffffffffffffffffffffffffffffffffff16611dab611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df89061382a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611e68576040517f48ac165200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ea39291906136b7565b602060405180830381600087803b158015611ebd57600080fd5b505af1158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef5919061309a565b505050565b611f02612660565b73ffffffffffffffffffffffffffffffffffffffff16611f20611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d9061382a565b60405180910390fd5b818190508484905014611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb5906137ca565b60405180910390fd5b60005b8282905081101561203757612026858583818110611fe257611fe1613c9d565b5b9050602002016020810190611ff79190613161565b600185858581811061200c5761200b613c9d565b5b90506020020160208101906120219190612ebe565b61271e565b8061203090613bbe565b9050611fc1565b5050505050565b612046612660565b73ffffffffffffffffffffffffffffffffffffffff16612064611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b19061382a565b60405180910390fd5b6120c2611d78565b156120f9576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b6007818154811061211357600080fd5b906000526020600020016000915090505481565b600f602052816000526040600020602052806000526040600020600091509150505481565b60065481565b61215a612660565b73ffffffffffffffffffffffffffffffffffffffff16612178611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c59061382a565b60405180910390fd5b80600c8190555050565b6121e0612660565b73ffffffffffffffffffffffffffffffffffffffff166121fe611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061382a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a0612660565b73ffffffffffffffffffffffffffffffffffffffff166122be611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b9061382a565b60405180910390fd5b60058282905014612362578181905060056040517f6aab761a000000000000000000000000000000000000000000000000000000008152600401612359929190613945565b60405180910390fd5b61236a611d78565b156123a1576040517ff2a84b6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600591906123b2929190612c54565b505050565b6123bf612660565b73ffffffffffffffffffffffffffffffffffffffff166123dd611cf7565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a9061382a565b60405180910390fd5b80600b8190555050565b60085481565b60026001541415612489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124809061390a565b60405180910390fd5b6002600181905550612499611ab4565b6124de57600854426040517f66803fc10000000000000000000000000000000000000000000000000000000081526004016124d592919061396e565b60405180910390fd5b600081111580156124ef5750601481115b15612526576040517fca02d6eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125318282336128bb565b600180819055505050565b612544612660565b73ffffffffffffffffffffffffffffffffffffffff16612562611cf7565b73ffffffffffffffffffffffffffffffffffffffff16146125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af9061382a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f906137aa565b60405180910390fd5b612631816129b2565b50565b60095481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008082905060005b855181101561271057600086828151811061268f5761268e613c9d565b5b602002602001015190508083116126d05782816040516020016126b3929190613640565b6040516020818303038152906040528051906020012092506126fc565b80836040516020016126e3929190613640565b6040516020818303038152906040528051906020012092505b50808061270890613bbe565b915050612671565b508381149150509392505050565b600483600981111561273357612732613c6e565b5b8154811061274457612743613c9d565b5b906000526020600020015482600e600086600981111561276757612766613c6e565b5b81526020019081526020016000205461278091906139f7565b11156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b8906138aa565b60405180910390fd5b60005b828110156128b55760006127d785612a76565b9050600e60008660098111156127f0576127ef613c6e565b5b81526020019081526020016000206000815461280b90613bbe565b91905081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386ebf0108483886040518463ffffffff1660e01b8152600401612871939291906136e0565b600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b5050505050806128ae90613bbe565b90506127c4565b50505050565b600060078460098111156128d2576128d1613c6e565b5b815481106128e3576128e2613c9d565b5b906000526020600020015411612925576040517fc5fadba600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600784600981111561293b5761293a613c6e565b5b8154811061294c5761294b613c9d565b5b90600052602060002001546129619190613a4d565b34146129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129999061384a565b60405180910390fd5b6129ad83838361271e565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600654600e60006004815260200190815260200160002054600e60006003815260200190815260200160002054600e60006002815260200190815260200160002054600e60006001815260200190815260200160002054600e600080815260200190815260200160002054612aee91906139f7565b612af891906139f7565b612b0291906139f7565b612b0c91906139f7565b612b1691906139f7565b905060006005846009811115612b2f57612b2e613c6e565b5b81548110612b4057612b3f613c9d565b5b9060005260206000200154600e6000866009811115612b6257612b61613c6e565b5b815260200190815260200160002054612b7b91906139f7565b905063ffffffff811115612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb9061388a565b60405180910390fd5b60ff846009811115612bd957612bd8613c6e565b5b1115612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c119061378a565b60405180910390fd5b836009811115612c2d57612c2c613c6e565b5b600882901b602884901b612c4191906139f7565b612c4b91906139f7565b92505050919050565b828054828255906000526020600020908101928215612c90579160200282015b82811115612c8f578235825591602001919060010190612c74565b5b509050612c9d9190612ca1565b5090565b5b80821115612cba576000816000905550600101612ca2565b5090565b600081359050612ccd81613f9c565b92915050565b600081359050612ce281613fb3565b92915050565b60008083601f840112612cfe57612cfd613d00565b5b8235905067ffffffffffffffff811115612d1b57612d1a613cfb565b5b602083019150836020820283011115612d3757612d36613d05565b5b9250929050565b60008083601f840112612d5457612d53613d00565b5b8235905067ffffffffffffffff811115612d7157612d70613cfb565b5b602083019150836020820283011115612d8d57612d8c613d05565b5b9250929050565b60008083601f840112612daa57612da9613d00565b5b8235905067ffffffffffffffff811115612dc757612dc6613cfb565b5b602083019150836020820283011115612de357612de2613d05565b5b9250929050565b60008083601f840112612e0057612dff613d00565b5b8235905067ffffffffffffffff811115612e1d57612e1c613cfb565b5b602083019150836020820283011115612e3957612e38613d05565b5b9250929050565b600081519050612e4f81613fca565b92915050565b600081359050612e6481613fe1565b92915050565b600081359050612e7981613ff8565b92915050565b600081359050612e8e8161400f565b92915050565b600081359050612ea381614026565b92915050565b600081359050612eb881614036565b92915050565b600060208284031215612ed457612ed3613d0f565b5b6000612ee284828501612cbe565b91505092915050565b600060208284031215612f0157612f00613d0f565b5b6000612f0f84828501612cd3565b91505092915050565b60008060008060608587031215612f3257612f31613d0f565b5b6000612f4087828801612cbe565b9450506020612f5187828801612e55565b935050604085013567ffffffffffffffff811115612f7257612f71613d0a565b5b612f7e87828801612d3e565b925092505092959194509250565b60008060408385031215612fa357612fa2613d0f565b5b6000612fb185828601612cbe565b9250506020612fc285828601612ea9565b9150509250929050565b60008060008060408587031215612fe657612fe5613d0f565b5b600085013567ffffffffffffffff81111561300457613003613d0a565b5b61301087828801612d94565b9450945050602085013567ffffffffffffffff81111561303357613032613d0a565b5b61303f87828801612ce8565b925092505092959194509250565b6000806020838503121561306457613063613d0f565b5b600083013567ffffffffffffffff81111561308257613081613d0a565b5b61308e85828601612dea565b92509250509250929050565b6000602082840312156130b0576130af613d0f565b5b60006130be84828501612e40565b91505092915050565b6000602082840312156130dd576130dc613d0f565b5b60006130eb84828501612e55565b91505092915050565b6000806040838503121561310b5761310a613d0f565b5b600061311985828601612e6a565b925050602061312a85828601612ea9565b9150509250929050565b60006020828403121561314a57613149613d0f565b5b600061315884828501612e7f565b91505092915050565b60006020828403121561317757613176613d0f565b5b600061318584828501612e94565b91505092915050565b600080604083850312156131a5576131a4613d0f565b5b60006131b385828601612e94565b92505060206131c485828601612ea9565b9150509250929050565b6000806000806000608086880312156131ea576131e9613d0f565b5b60006131f888828901612e94565b955050602061320988828901612ea9565b945050604061321a88828901612ea9565b935050606086013567ffffffffffffffff81111561323b5761323a613d0a565b5b61324788828901612d3e565b92509250509295509295909350565b60006020828403121561326c5761326b613d0f565b5b600061327a84828501612ea9565b91505092915050565b600061328f838361359d565b60208301905092915050565b6132a481613aed565b82525050565b6132b381613adb565b82525050565b6132ca6132c582613adb565b613c07565b82525050565b60006132db826139a7565b6132e581856139bf565b93506132f083613997565b8060005b838110156133215781516133088882613283565b9750613313836139b2565b9250506001810190506132f4565b5085935050505092915050565b61333781613aff565b82525050565b61334681613b0b565b82525050565b61335d61335882613b0b565b613c19565b82525050565b61336c81613b76565b82525050565b61337b81613b9a565b82525050565b61338a81613bac565b82525050565b600061339d6013836139db565b91506133a882613d21565b602082019050919050565b60006133c06026836139db565b91506133cb82613d4a565b604082019050919050565b60006133e36020836139db565b91506133ee82613d99565b602082019050919050565b6000613406601a836139db565b915061341182613dc2565b602082019050919050565b6000613429601f836139db565b915061343482613deb565b602082019050919050565b600061344c6001836139ec565b915061345782613e14565b600182019050919050565b600061346f6020836139db565b915061347a82613e3d565b602082019050919050565b60006134926020836139db565b915061349d82613e66565b602082019050919050565b60006134b5601b836139db565b91506134c082613e8f565b602082019050919050565b60006134d86014836139db565b91506134e382613eb8565b602082019050919050565b60006134fb601d836139db565b915061350682613ee1565b602082019050919050565b600061351e6000836139d0565b915061352982613f0a565b600082019050919050565b60006135416019836139db565b915061354c82613f0d565b602082019050919050565b6000613564600e836139db565b915061356f82613f36565b602082019050919050565b6000613587601f836139db565b915061359282613f5f565b602082019050919050565b6135a681613b6c565b82525050565b6135b581613b6c565b82525050565b6135cc6135c782613b6c565b613c35565b82525050565b60006135de82846132b9565b60148201915081905092915050565b60006135f982866132b9565b6014820191506136088261343f565b915061361482856135bb565b6020820191506136238261343f565b915061362f82846135bb565b602082019150819050949350505050565b600061364c828561334c565b60208201915061365c828461334c565b6020820191508190509392505050565b600061367782613511565b9150819050919050565b600060208201905061369660008301846132aa565b92915050565b60006020820190506136b1600083018461329b565b92915050565b60006040820190506136cc60008301856132aa565b6136d960208301846135ac565b9392505050565b60006060820190506136f560008301866132aa565b61370260208301856135ac565b61370f6040830184613372565b949350505050565b6000602082019050818103600083015261373181846132d0565b905092915050565b600060208201905061374e600083018461332e565b92915050565b6000602082019050613769600083018461333d565b92915050565b60006020820190506137846000830184613363565b92915050565b600060208201905081810360008301526137a381613390565b9050919050565b600060208201905081810360008301526137c3816133b3565b9050919050565b600060208201905081810360008301526137e3816133d6565b9050919050565b60006020820190508181036000830152613803816133f9565b9050919050565b600060208201905081810360008301526138238161341c565b9050919050565b6000602082019050818103600083015261384381613462565b9050919050565b6000602082019050818103600083015261386381613485565b9050919050565b60006020820190508181036000830152613883816134a8565b9050919050565b600060208201905081810360008301526138a3816134cb565b9050919050565b600060208201905081810360008301526138c3816134ee565b9050919050565b600060208201905081810360008301526138e381613534565b9050919050565b6000602082019050818103600083015261390381613557565b9050919050565b600060208201905081810360008301526139238161357a565b9050919050565b600060208201905061393f60008301846135ac565b92915050565b600060408201905061395a60008301856135ac565b6139676020830184613381565b9392505050565b600060408201905061398360008301856135ac565b61399060208301846135ac565b9392505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a0282613b6c565b9150613a0d83613b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a4257613a41613c3f565b5b828201905092915050565b6000613a5882613b6c565b9150613a6383613b6c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a9c57613a9b613c3f565b5b828202905092915050565b6000613ab282613b6c565b9150613abd83613b6c565b925082821015613ad057613acf613c3f565b5b828203905092915050565b6000613ae682613b4c565b9050919050565b6000613af882613b4c565b9050919050565b60008115159050919050565b6000819050919050565b6000613b2082613adb565b9050919050565b6000613b3282613adb565b9050919050565b6000819050613b4782613f88565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613b8182613b88565b9050919050565b6000613b9382613b4c565b9050919050565b6000613ba582613b39565b9050919050565b6000613bb782613b6c565b9050919050565b6000613bc982613b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bfc57613bfb613c3f565b5b600182019050919050565b6000613c1282613c23565b9050919050565b6000819050919050565b6000613c2e82613d14565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008160601b9050919050565b7f506c6f7420696e646578206f766572666c6f7700000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4172726179732073686f756c642068617665207468652073616d652073697a65600082015250565b7f436c61696d696e67206d6f7265207468616e20616c6c6f776564000000000000600082015250565b7f776974686472617720616c6c20776173206e6f742073756363657366756c6c00600082015250565b7f3a00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45746865722076616c75652073656e74206973206e6f74206163637572617465600082015250565b7f776974686472617720776173206e6f742073756363657366756c6c0000000000600082015250565b7f4c6f63616c20696e646578206f766572666c6f77000000000000000000000000600082015250565b7f547279696e6720746f206d696e7420746f6f206d616e7920706c6f7473000000600082015250565b50565b7f4d696e74696e67206d6f7265207468616e20616c6c6f77656400000000000000600082015250565b7f496e76616c69642070726f6f662e000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600a8110613f9957613f98613c6e565b5b50565b613fa581613adb565b8114613fb057600080fd5b50565b613fbc81613aed565b8114613fc757600080fd5b50565b613fd381613aff565b8114613fde57600080fd5b50565b613fea81613b0b565b8114613ff557600080fd5b50565b61400181613b15565b811461400c57600080fd5b50565b61401881613b27565b811461402357600080fd5b50565b600a811061403357600080fd5b50565b61403f81613b6c565b811461404a57600080fd5b5056fea26469706673582212200316f03d52b323fff983f8a45baac45a26cae927cf9666283f117cb3c3cc9d5964736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d5c7e6257d264ede9cc7a2e74e52df65e727eb4e
-----Decoded View---------------
Arg [0] : _runiverseLand (address): 0xD5C7E6257d264EDe9Cc7A2e74e52Df65e727eb4e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d5c7e6257d264ede9cc7a2e74e52df65e727eb4e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.