Source Code
Latest 25 from a total of 6,591 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 17225671 | 741 days ago | IN | 0 ETH | 0.00260423 | ||||
Set Is Open | 15999612 | 913 days ago | IN | 0 ETH | 0.0003448 | ||||
Set Is Explore O... | 15999612 | 913 days ago | IN | 0 ETH | 0.00034459 | ||||
Set Is Explore O... | 15999609 | 913 days ago | IN | 0 ETH | 0.00033708 | ||||
Set Is Open | 15999602 | 913 days ago | IN | 0 ETH | 0.00038193 | ||||
Rescue Moonruner... | 15999595 | 913 days ago | IN | 0 ETH | 0.35464361 | ||||
Set Is Open | 15735080 | 950 days ago | IN | 0 ETH | 0.00045519 | ||||
Set Is Explore O... | 15735079 | 950 days ago | IN | 0 ETH | 0.00045444 | ||||
Withdraw | 15734615 | 950 days ago | IN | 0 ETH | 0.00048722 | ||||
Set Is Open | 15734560 | 950 days ago | IN | 0 ETH | 0.00056178 | ||||
Set Is Explore O... | 15734559 | 950 days ago | IN | 0 ETH | 0.00049966 | ||||
Fight | 15421580 | 996 days ago | IN | 0 ETH | 0.00016809 | ||||
Set Is Explore O... | 15420149 | 996 days ago | IN | 0 ETH | 0.00015341 | ||||
Set Is Open | 15420149 | 996 days ago | IN | 0 ETH | 0.00015351 | ||||
Fight | 15418258 | 997 days ago | IN | 0 ETH | 0.00152773 | ||||
Explore | 15418086 | 997 days ago | IN | 0 ETH | 0.00075403 | ||||
Explore | 15417436 | 997 days ago | IN | 0 ETH | 0.00083185 | ||||
Fight | 15417429 | 997 days ago | IN | 0 ETH | 0.00132366 | ||||
Explore | 15417176 | 997 days ago | IN | 0 ETH | 0.0008007 | ||||
Fight | 15417173 | 997 days ago | IN | 0 ETH | 0.0016033 | ||||
Fight | 15417142 | 997 days ago | IN | 0 ETH | 0.00149395 | ||||
Explore | 15417131 | 997 days ago | IN | 0 ETH | 0.00123907 | ||||
Fight | 15417124 | 997 days ago | IN | 0 ETH | 0.00164882 | ||||
Fight | 15416874 | 997 days ago | IN | 0 ETH | 0.0019143 | ||||
Fight | 15416030 | 997 days ago | IN | 0 ETH | 0.00172196 |
Latest 22 internal transactions
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 15734615 | 950 days ago | 5.66 ETH | ||||
Transfer | 15401915 | 999 days ago | 0.1 ETH | ||||
Transfer | 15318913 | 1013 days ago | 0.1 ETH | ||||
Transfer | 15275393 | 1019 days ago | 0.1 ETH | ||||
Transfer | 15264700 | 1021 days ago | 0.1 ETH | ||||
Transfer | 15252700 | 1023 days ago | 0.42 ETH | ||||
Transfer | 15252676 | 1023 days ago | 0.1 ETH | ||||
Transfer | 15245520 | 1024 days ago | 0.42 ETH | ||||
Transfer | 15243651 | 1024 days ago | 0.1 ETH | ||||
Transfer | 15242972 | 1024 days ago | 0.42 ETH | ||||
Transfer | 15242752 | 1024 days ago | 0.42 ETH | ||||
Transfer | 15241327 | 1025 days ago | 0.42 ETH | ||||
Transfer | 15240201 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15240133 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15239948 | 1025 days ago | 0.42 ETH | ||||
Transfer | 15239600 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15239522 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15239293 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15239251 | 1025 days ago | 0.42 ETH | ||||
Transfer | 15238927 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15238904 | 1025 days ago | 0.1 ETH | ||||
Transfer | 15238477 | 1025 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
MoonrunnersS1
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%&&&&&&&&&&&&&&%%%%%%%%%%%%%%%&&&&&&&&&%%%%%%%&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&%%%%%%%%%%%%&&&&&&&%%%%%%%&&&&&&&&&&&& // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%&&&&&&&&&&&&&&&&&%%%%%%%%%%%%&&&&&&&%%%%%&&&&&&&&&&&&%% // &&&&&&&&&&&&&&&&&&&&&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%&&&&&&&&&&&&&&&%% // &&&&&&&&&&&&&&&&&&&@@@ ,,,,,****///,,,,,*******////////////////////////////////////////////////@@%%&&&&&&&&&&&&&&&%% // &&&&&&&&&&&&&&&&&&&@@@ ########################################################################///@@&&&&&&&&&&&&&&&&&%% // &&&&&&&&&&&&&&&&&&&@@@ ###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%/////@@&&&&&&&&&&&&&&&%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######%%%#########%%%#########%%%#######%%##########%%##########/////@@&&&&&&&&&&&&&&&%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######%%%#########%%%#########%%%#######%%##########%%##########/////@@&&&&&&&&&&&&&&&%%%% // &&&&&&&&&&&&&&&&&&&@@@//###%%#######%%%#########%%%#########%%%#######%%##########%%##########**///@@&&&&&&&&&&&&%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@//###%%#######%%%#########%%%#########%%%#######%%##########%%##########**///@@&&&&&&&&&&&&%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@ ###%%#######%%%#########%%%#########%%%#######%%##########%%##########**///@@&&&&&&&&&&&&%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@ ###%%#######%%%#########%%%#########%%%#######%%##########%%##########**///@@&&&&&&&&&&%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######%%%#########%%%#########%%%#######%%##########%%##########**///@@&&&&&&&&&&%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######%%%#########%%%@@@@@@@@@@@@####&@@@@@@@#######%%##########**///@@&&&&&&&&&&%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######%%%@@@@@@@@@@@@..*******///@@@@(....///@@@@@@@%%##########**///@@&&&&&&&%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%#######@@@ ..*///////****///*******///////*****#####@@##########**///@@&&&&&&&%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**###%%##&@@@@***//**,....***....,****@@@//*******************@@@#######**///@@&&&&&&&%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**(((%%&&(,,,,*******///*****///////@@,,,@@,,*////(((,,///((##///@@%%%%%**///@@&&&&&%%%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@**#####,,,,,//***,,,,,,,/////,,**(##(((((%%%%#(((((((../////(((((##&&&&&##(((@@&&&&&%%%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&&&@@@&&,,,,,*****/////**///**/////,,**#@@**###((@@#,,,,////////**/////////(##%%&&&@@&&&%%%%%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&@@#,,*********,....***//.......***//@@#**((#####((%@@#####****,..*******//////////,,@@@%%%%%%%%%%%%%%%% // &&&&&&&&&&&&&&&&&@@#,,#####################(/////////@@#**((#####((%@@/////####(//#####////(#######,,@@@%%%%%%%%%%%%%%%% // &&&&&&&&&&&&&&&@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@**/((((&&&####(((@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#@@%%%%%%%%%%%%%% // &&&&&&&&&&&&@@@ ,,,,,,,,********* *****@@**/((##&&&&&##(((@@(((//************///////*****/////@@%%%%%%%%%%%% // &&&&&&&&&&&&@@@ ,,,,,**********///////,,,,,****@@@**#######&&&&&&&&&&&&@@@##(((//////////////////////////@@%%%%%%%%%%%% // &&&&&&&&&&&&@@@,,,,,*********///////,,,,,*******@@@@@@@&####&&&&&&&@@@@@@@@##(((//////////////////////////@@%%%%%%%%%%%% // &&&&&&&&&&&&&&&@@%%%%%%%##########%%############@@@//##&@@@@&&&@@@@@&&##@@@%%%%%%%#########%%%#####%%%%&@@%%%%%%%%%%%%%% // &&&&&&&&&&&&%%%@@///((%%((((((((((%%(((((((((((((((@@//(####@@@&&&&%##@@%%%####%%%(((((((((#%%(((((((((%@@%%%%%%%%%%%%%% // &&&&&%%%%%%%%%%@@///((##((((((((((##(((((((((((((((##@@%//##&&&&&##&@@%%#####((###(((((((((###(((((((((%@@%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%@@///((##((((((((((##(((((((((((((((##((%@@//&&&##@@&%%#####((((###(((((((((###(((((((((%@@%%%%%%%%%%%%%% // %%%%%%%&&&&&&&&@@///((##((((((((((##(((((((((((((((##(((((@@###@@%%%%%##(((((((###(((((((((###(((((((((%@@%%%%%%%%%%%%%% // %%%&&&&&&&&&&&&@@///((##((((((((((##(((((((((((((((##(((((((@@@####%%%(((((((((###(((((((((###(((((((//%@@%%%%%%%%%%%%%% // &&&&&&&%%%%%%%%@@///((##((((((((((##(((((((((((((((##((((((((((((((###(((((((((###(((((((((###(((((((//%@@%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%@@///((##((((((((((##(((((((((((((((##((((((((((((((###(((((((((###(((((((((###(((((((//%@@&&&&&%%%%%%%%% // %%%%%%%%%%%%%%%@@///((##((((((((((##(((((((((((((((##((((((((((((((###(((((((((###(((((((((###(((((((//%@@@@@@@@@&&%%%%% // %%%%%%%%%%@@%%%@@///((##((((((((((##(((((((((((((((##((((((((((((((###(((((((((###(((((((((###(((((((//%@@#######@@@@@&& // %%%%%@@@@@//@@@ .*********//////////**************************///////*****//////////////*************//@@##########@@ // %%%@@.. **///@@@@%/////////////////////////////////////////////////////////////////////////////////@@@@@@@/////#####@@ // @@@****///*****..//%@@@@@@@/////////////////////////////////////////////////////////////////////@@@@@..,**/////////%@@@@ // .....//////////////////////@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.....**********../////// // @@@....,**.....*******..***//@@@&&&&&&&@@..,**//@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@@@@(..**/////.....**//////////** // ###@@%%&&&&&*****(((###########%@@%%%%%%%@@@@@@@%%%%%%%%%%&&&&&&&&&&&&&&&&&&&%%%%%%%@@@****/((**///**///////#####@@@@@@@ // ###&&((###%%&&&&&&&@@@(((((%%@@&###################%%%%%%%%%%%%%%%%%%%%%%%%%%##########&&&&&&&((#####%%%%%%%&&&&&%%%%%%% // #####%%%%%%%########%%%%%%%&&%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%%%%%%%%%%%%%%#####%%%%%%% import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import {IERC721A} from "erc721a/contracts/IERC721A.sol"; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import {IMoonrunners} from "./interface/IMoonrunners.sol"; import {IMoonrunnersLoot} from "./interface/IMoonrunnersLoot.sol"; import {BasicRNG} from "./base/BasicRNG.sol"; error AwwoooooOnly(); error CaveIsClosed(); error CallerIsNotMoonrunnerHolder(); error CallerIsNotLootHolder(); error InvalidWeaponId(); error NotApprovedForAll(); error CantFightMore(); error InvalidLegendsIdsConfig(); error ExploreIsClosed(); error CantExploreWithoutFighting(); error CantExploreMore(); error ZeroBalance(); error AwwwwooError(); contract MoonrunnersS1 is Ownable, ERC1155Holder, BasicRNG { using EnumerableSet for EnumerableSet.UintSet; event DragonBigFiraFira(address indexed owner, uint256 moonrunnerId); event DragonWhips(address indexed owner, uint256 moonrunnerId); event DragonAttack(address indexed owner, uint256 moonrunnerId, uint256 rand); event LootItem(address indexed owner, uint256 itemId); event ExploreLucky(address indexed owner, uint256 moonrunnerId, uint256 amount); event ExploreRescue(address indexed owner, uint256 moonrunnerId, uint256 moonrunnerRescuedId); event ExploreLootItem(address indexed owner, uint256 itemId); event ExploreLootPooPoopPeeDoo(address indexed owner, uint256 moonrunnerId); IMoonrunners public moonrunners; IMoonrunnersLoot public moonrunnersLoot; bool public isOpen; bool public isExploreOpen; // allowed weaponsId EnumerableSet.UintSet private weaponsIds; // moonSpeakers & moonLegendaries EnumerableSet.UintSet private legendsIds; //lootId => maxSupply mapping(uint256 => uint256) public maxSupplyOf; //moonrunnerId => fightCount mapping(uint256 => uint256) public fightCountOf; //moonrunnerId => hasExplore mapping(uint256 => bool) public hasExplored; uint256[] public capturedMR; uint256 private constant AWWWWOO = 0x5d423c655aa0000; uint256 private constant AWO = 0x16345785D8A0000; uint256 private availableAWWWWOO = 0xA; constructor(address moonrunnersAddress, address moonrunnersLootAddress) { moonrunners = IMoonrunners(moonrunnersAddress); moonrunnersLoot = IMoonrunnersLoot(moonrunnersLootAddress); // set allowed weaponIds weaponsIds.add(0); // 0: raygun weaponsIds.add(1); // 1: scroll weaponsIds.add(2); // 2: ar15 weaponsIds.add(3); // 3: claws // loot maxSupply maxSupplyOf[4] = 10; //huge maxSupplyOf[5] = 523; //big maxSupplyOf[6] = 3100; //medium maxSupplyOf[7] = 6300; //small } /* -------------------------------------------------------------------------- */ /* Entry */ /* -------------------------------------------------------------------------- */ function fight(uint256 moonrunnerId, uint256 weaponId) external { if (tx.origin != _msgSender()) revert AwwoooooOnly(); if (!isOpen) revert CaveIsClosed(); if (!moonrunners.isApprovedForAll(_msgSender(), address(this))) revert NotApprovedForAll(); if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); if (moonrunnersLoot.balanceOf(_msgSender(), weaponId) == 0) revert CallerIsNotLootHolder(); if (!weaponsIds.contains(weaponId)) revert InvalidWeaponId(); if (fightCountOf[moonrunnerId] > 1) revert CantFightMore(); //burn weapon moonrunnersLoot.controlledBurn(_msgSender(), weaponId, 1); //awooooo uint256[] memory rand = randomUint16Array(2, 10_000); //moonrunner attack uint256 lootableId = packAttack(weaponId, rand[0]); // dragon attack bool isAlive = dragonAttack(moonrunnerId, rand[1]); if (isAlive) { //mint vial moonrunnersLoot.mint(_msgSender(), lootableId, 1); emit LootItem(_msgSender(), lootableId); } else { //mint vial for explore moonrunnersLoot.mint(address(this), lootableId, 1); } } function explore(uint256 moonrunnerId) external { if (tx.origin != _msgSender()) revert AwwoooooOnly(); if (!isExploreOpen) revert ExploreIsClosed(); if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); if (fightCountOf[moonrunnerId] < 1) revert CantExploreWithoutFighting(); if (hasExplored[moonrunnerId]) revert CantExploreMore(); hasExplored[moonrunnerId] = true; uint256[] memory rand = randomUint16Array(2, 10_000); doExplore(moonrunnerId, rand); } /* -------------------------------------------------------------------------- */ /* Logic */ /* -------------------------------------------------------------------------- */ function dragonAttack(uint256 moonrunnerId, uint256 rand) internal returns (bool) { bool isLegendary = legendsIds.contains(moonrunnerId); fightCountOf[moonrunnerId] += 1; if (rand < 420 && !isLegendary) { // RIP : big fira fira moonrunners.burn(moonrunnerId); emit DragonBigFiraFira(_msgSender(), moonrunnerId); return false; } else if (rand < 520 && !isLegendary) { // CAPTURED : dragon whips capturedMR.push(moonrunnerId); moonrunners.transferFrom(_msgSender(), address(this), moonrunnerId); emit DragonWhips(_msgSender(), moonrunnerId); return false; } emit DragonAttack(_msgSender(), moonrunnerId, rand); return true; } //4 : huge | 5 : big | 6 : medium | 7 : small function packAttack(uint256 weaponId, uint256 rand) internal returns (uint256) { uint256 lootId = 7; if (weaponId == 0) { // raygun if (rand < 169 && moonrunnersLoot.totalSupply(4) < maxSupplyOf[4]) { lootId = 4; } else if (rand < 4700 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else { lootId = 6; } } else if (weaponId == 1) { // scroll if (rand < 800 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 6300 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 2) { // ar15 if (rand < 300 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 3400 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } else if (weaponId == 3) { // claws if (rand < 100 && moonrunnersLoot.totalSupply(5) < maxSupplyOf[5]) { lootId = 5; } else if (rand < 2300 && moonrunnersLoot.totalSupply(6) < maxSupplyOf[6]) { lootId = 6; } } return lootId; } /*************************************************************/ function doExplore(uint256 moonrunnerId, uint256[] memory rand) internal { if (rand[0] < 75) { // 0.75% uint256 balance = address(this).balance; if (rand[1] < 1500 && balance >= AWWWWOO && availableAWWWWOO > 0) { // send AWWWWOO availableAWWWWOO -= 1; emit ExploreLucky(_msgSender(), moonrunnerId, AWWWWOO); (bool success, ) = payable(_msgSender()).call{value: AWWWWOO}(""); if (!success) revert AwwwwooError(); return; } else if (balance >= AWO) { // send AWO emit ExploreLucky(_msgSender(), moonrunnerId, AWO); (bool success, ) = payable(_msgSender()).call{value: AWO}(""); if (!success) revert AwwwwooError(); return; } } else if (rand[0] < 175) { // 1% if (capturedMR.length > 0) { //send random MR uint256 idx = rand[1] % capturedMR.length; uint256 id = capturedMR[idx]; capturedMR[idx] = capturedMR[capturedMR.length - 1]; capturedMR.pop(); moonrunners.transferFrom(address(this), _msgSender(), id); emit ExploreRescue(_msgSender(), moonrunnerId, id); return; } } else if (rand[0] < 675) { // 5% //4 : huge | 5 : big | 6 : medium | 7 : small uint256 lootId; if (rand[1] < 1000 && moonrunnersLoot.balanceOf(address(this), 4) > 0) { lootId = 4; } else if (rand[1] < 3000 && moonrunnersLoot.balanceOf(address(this), 5) > 0) { lootId = 5; } else if (rand[1] < 6000 && moonrunnersLoot.balanceOf(address(this), 6) > 0) { lootId = 6; } else if (moonrunnersLoot.balanceOf(address(this), 7) > 0) { lootId = 7; } if (lootId > 0) { //send lootId moonrunnersLoot.safeTransferFrom(address(this), _msgSender(), lootId, 1, bytes("")); emit ExploreLootItem(_msgSender(), lootId); return; } } emit ExploreLootPooPoopPeeDoo(_msgSender(), moonrunnerId); } /* -------------------------------------------------------------------------- */ /* Getters */ /* -------------------------------------------------------------------------- */ function getFightCountBatch(uint256[] calldata moonrunnerIds) external view returns (uint256[] memory) { uint256[] memory fightCounts = new uint256[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) fightCounts[i] = fightCountOf[moonrunnerIds[i]]; return fightCounts; } function getHasExploredBatch(uint256[] calldata moonrunnerIds) external view returns (bool[] memory) { bool[] memory _hasExplored = new bool[](moonrunnerIds.length); for (uint256 i; i < moonrunnerIds.length; ++i) _hasExplored[i] = hasExplored[moonrunnerIds[i]]; return _hasExplored; } function getCapturedMR() external view returns (uint256[] memory) { return capturedMR; } /* -------------------------------------------------------------------------- */ /* Only Owner */ /* -------------------------------------------------------------------------- */ function setMoonrunners(address newMoonrunners) external onlyOwner { moonrunners = IMoonrunners(newMoonrunners); } function setMoonrunnersLoot(address newMoonrunnersLoot) external onlyOwner { moonrunnersLoot = IMoonrunnersLoot(newMoonrunnersLoot); } function setIsOpen(bool newIsOpen) external onlyOwner { if (newIsOpen && legendsIds.length() == 0) revert InvalidLegendsIdsConfig(); isOpen = newIsOpen; } function setIsExploreOpen(bool newIsExploreOpen) external onlyOwner { isExploreOpen = newIsExploreOpen; } function captureMoonrunners(uint256[] memory moonrunnerIds) external onlyOwner { if (!moonrunners.isApprovedForAll(_msgSender(), address(this))) revert NotApprovedForAll(); for (uint256 i; i < moonrunnerIds.length; ++i) { uint256 moonrunnerId = moonrunnerIds[i]; if (moonrunners.ownerOf(moonrunnerId) != _msgSender()) revert CallerIsNotMoonrunnerHolder(); capturedMR.push(moonrunnerId); moonrunners.transferFrom(_msgSender(), address(this), moonrunnerId); } } /* -------------------------------------------------------------------------- */ /* Manage tokens holded by contract */ /* -------------------------------------------------------------------------- */ function rescueMoonruners(address account) external onlyOwner { uint256[] memory tokensIds = moonrunners.tokensOfOwner(address(this)); for (uint256 i; i < tokensIds.length; ++i) { moonrunners.transferFrom(address(this), account, tokensIds[i]); } } function burnMoonruners() external onlyOwner { uint256[] memory tokensIds = moonrunners.tokensOfOwner(address(this)); for (uint256 i; i < tokensIds.length; ++i) { moonrunners.burn(tokensIds[i]); } } function withdraw() external payable onlyOwner { uint256 balance = address(this).balance; if (balance == 0) revert ZeroBalance(); (bool success, ) = payable(_msgSender()).call{value: balance}(""); require(success, ""); } /* -------------------------------------------------------------------------- */ /* Config */ /* -------------------------------------------------------------------------- */ function setLegendsIds(uint256[] calldata ids) external onlyOwner { for (uint256 i; i < ids.length; ++i) legendsIds.add(ids[i]); } /* -------------------------------------------------------------------------- */ /* Awwoooo */ /* -------------------------------------------------------------------------- */ receive() external payable { //Awoooo } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) 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() { _transferOwnership(_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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. * * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; import {IERC721A} from "erc721a/contracts/IERC721A.sol"; import {IERC721AQueryable} from "erc721a/contracts/extensions/IERC721AQueryable.sol"; interface IMoonrunners is IERC721A, IERC721AQueryable { function burn(uint256 tokenId) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; interface IMoonrunnersLoot is IERC1155 { function totalSupply(uint256 id) external returns (uint256); function mint( address to, uint256 id, uint256 amount ) external; function mintBatch( address to, uint256[] memory ids, uint256[] memory amounts ) external; function controlledBurn( address from, uint256 id, uint256 amount ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.11; // TODO : remove import "hardhat/console.sol"; abstract contract BasicRNG { uint256 private _nonces; ///@notice generate 'random' bytes function randomBytes() internal returns (bytes32) { // console.log("coinbase ",block.coinbase); // console.log("difficulty ", block.difficulty); // console.log("_nonces ",_nonces); return keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.coinbase, _nonces++)); } ///@notice generate a 'random' number < mod function random(uint256 mod) internal returns (uint256) { bytes32 randBytes = randomBytes(); return uint256(randBytes) % mod; } ///@notice generate a 'random' array of uint16 with number < mod function randomUint16Array(uint256 size, uint256 mod) internal returns (uint256[] memory) { require(size <= 16, "Exceed max size 16"); require(mod <= type(uint16).max, "Exceed max uint16"); bytes32 randBytes = randomBytes(); uint256[] memory output = new uint256[](size); //console.logBytes32(randBytes); for (uint256 i; i < size; ++i) { output[i] = uint256(randBytes >> (i * 16)) % mod; //console.log(output[i]); } return output; } ///@notice generate a 'random' array of bool of defined size 50%/50% function randomBoolArray(uint256 size) internal returns (bool[] memory ) { require(size <= 256, "Exceed max size : 256"); bool[] memory output = new bool[](size); uint256 rand = uint256(randomBytes()); for (uint256 i; i < size; i++) output[i] = (rand >> i) & 1 == 1; return output; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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 // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; import '../IERC721A.sol'; /** * @dev Interface of an ERC721AQueryable compliant contract. */ interface IERC721AQueryable is IERC721A { /** * Invalid query range (`start` >= `stop`). */ error InvalidQueryRange(); /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory); /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory); /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory); /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory); }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "optimizer": { "enabled": true, "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":"address","name":"moonrunnersAddress","type":"address"},{"internalType":"address","name":"moonrunnersLootAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AwwoooooOnly","type":"error"},{"inputs":[],"name":"AwwwwooError","type":"error"},{"inputs":[],"name":"CallerIsNotLootHolder","type":"error"},{"inputs":[],"name":"CallerIsNotMoonrunnerHolder","type":"error"},{"inputs":[],"name":"CantExploreMore","type":"error"},{"inputs":[],"name":"CantExploreWithoutFighting","type":"error"},{"inputs":[],"name":"CantFightMore","type":"error"},{"inputs":[],"name":"CaveIsClosed","type":"error"},{"inputs":[],"name":"ExploreIsClosed","type":"error"},{"inputs":[],"name":"InvalidLegendsIdsConfig","type":"error"},{"inputs":[],"name":"InvalidWeaponId","type":"error"},{"inputs":[],"name":"NotApprovedForAll","type":"error"},{"inputs":[],"name":"ZeroBalance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rand","type":"uint256"}],"name":"DragonAttack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"DragonBigFiraFira","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"DragonWhips","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"ExploreLootItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"ExploreLootPooPoopPeeDoo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExploreLucky","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"moonrunnerRescuedId","type":"uint256"}],"name":"ExploreRescue","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"LootItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"burnMoonruners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"captureMoonrunners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"capturedMR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"moonrunnerId","type":"uint256"}],"name":"explore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"moonrunnerId","type":"uint256"},{"internalType":"uint256","name":"weaponId","type":"uint256"}],"name":"fight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fightCountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCapturedMR","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getFightCountBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"moonrunnerIds","type":"uint256[]"}],"name":"getHasExploredBatch","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hasExplored","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isExploreOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplyOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonrunners","outputs":[{"internalType":"contract IMoonrunners","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonrunnersLoot","outputs":[{"internalType":"contract IMoonrunnersLoot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rescueMoonruners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newIsExploreOpen","type":"bool"}],"name":"setIsExploreOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newIsOpen","type":"bool"}],"name":"setIsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"setLegendsIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMoonrunners","type":"address"}],"name":"setMoonrunners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMoonrunnersLoot","type":"address"}],"name":"setMoonrunnersLoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a600c553480156200001657600080fd5b506040516200312c3803806200312c833981016040819052620000399162000263565b62000044336200018d565b600280546001600160a01b03199081166001600160a01b0385811691909117909255600380549091169183169190911790556200009060046000620001dd602090811b6200160717901c565b50620000ad60016004620001dd60201b620016071790919060201c565b50620000ca60026004620001dd60201b620016071790919060201c565b50620000e760036004620001dd60201b620016071790919060201c565b5050600860205250600a7f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b85561020b7f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb55610c1c7f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc555600760005261189c7f24cd397636bedc6cf9b490d0edd57c769c19b367fb7d5c2344ae1ddc7d21c144556200029b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620001eb8383620001f4565b90505b92915050565b60008181526001830160205260408120546200023d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001ee565b506000620001ee565b80516001600160a01b03811681146200025e57600080fd5b919050565b600080604083850312156200027757600080fd5b620002828362000246565b9150620002926020840162000246565b90509250929050565b612e8180620002ab6000396000f3fe6080604052600436106101bb5760003560e01c80636457e389116100ec578063ca39e5ef1161008a578063e152124b11610064578063e152124b14610534578063ed29838214610554578063f23a6e6114610574578063f2fde38b146105a057600080fd5b8063ca39e5ef146104d4578063d32d0220146104f4578063db9ecfac1461051457600080fd5b80637faff86b116100c65780637faff86b146104175780638da5cb5b14610444578063bc197c8114610462578063c131d36f146104a757600080fd5b80636457e389146103c15780637131eb31146103e1578063715018a61461040257600080fd5b8063266eeb38116101595780633ccfd60b116101335780633ccfd60b1461034057806347535d7b146103485780634c116e3b1461036957806357ec50941461038957600080fd5b8063266eeb38146102db5780632af097561461030b5780632e9a8e7d1461032b57600080fd5b8063085a10cf11610195578063085a10cf1461024b57806311431e561461026b578063227993de146102995780632564eed7146102ae57600080fd5b80630100c04f146101c757806301ffc9a7146101e9578063071a88f91461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e2366004612768565b6105c0565b005b3480156101f557600080fd5b50610209610204366004612785565b610615565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b5061023e6102393660046127af565b61064c565b6040516102159190612824565b34801561025757600080fd5b506101e7610266366004612876565b610701565b34801561027757600080fd5b5061028b610286366004612893565b61077b565b604051908152602001610215565b3480156102a557600080fd5b506101e761079c565b3480156102ba57600080fd5b5061028b6102c9366004612893565b60086020526000908152604090205481565b3480156102e757600080fd5b506102096102f6366004612893565b600a6020526000908152604090205460ff1681565b34801561031757600080fd5b506101e7610326366004612876565b6108db565b34801561033757600080fd5b5061023e610923565b6101e761097b565b34801561035457600080fd5b5060035461020990600160a01b900460ff1681565b34801561037557600080fd5b506101e76103843660046127af565b610a36565b34801561039557600080fd5b506003546103a9906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156103cd57600080fd5b506101e76103dc366004612893565b610aad565b3480156103ed57600080fd5b5060035461020990600160a81b900460ff1681565b34801561040e57600080fd5b506101e7610c22565b34801561042357600080fd5b506104376104323660046127af565b610c58565b60405161021591906128ac565b34801561045057600080fd5b506000546001600160a01b03166103a9565b34801561046e57600080fd5b5061048e61047d366004612a2c565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610215565b3480156104b357600080fd5b5061028b6104c2366004612893565b60096020526000908152604090205481565b3480156104e057600080fd5b506101e76104ef366004612ada565b610d17565b34801561050057600080fd5b506101e761050f366004612768565b6111a6565b34801561052057600080fd5b506002546103a9906001600160a01b031681565b34801561054057600080fd5b506101e761054f366004612afc565b6111f2565b34801561056057600080fd5b506101e761056f366004612768565b61142d565b34801561058057600080fd5b5061048e61058f366004612b39565b63f23a6e6160e01b95945050505050565b3480156105ac57600080fd5b506101e76105bb366004612768565b61156c565b6000546001600160a01b031633146105f35760405162461bcd60e51b81526004016105ea90612ba2565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216630271189760e51b148061064657506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008267ffffffffffffffff811115610669576106696128e6565b604051908082528060200260200182016040528015610692578160200160208202803683370190505b50905060005b838110156106f957600960008686848181106106b6576106b6612bd7565b905060200201358152602001908152602001600020548282815181106106de576106de612bd7565b60209081029190910101526106f281612c03565b9050610698565b509392505050565b6000546001600160a01b0316331461072b5760405162461bcd60e51b81526004016105ea90612ba2565b80801561073f575061073d600661161a565b155b1561075d576040516376a40a7360e11b815260040160405180910390fd5b60038054911515600160a01b0260ff60a01b19909216919091179055565b600b818154811061078b57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146107c65760405162461bcd60e51b81526004016105ea90612ba2565b600254604051632118854760e21b81523060048201526000916001600160a01b031690638462151c90602401600060405180830381865afa15801561080f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108379190810190612c1e565b905060005b81518110156108d75760025482516001600160a01b03909116906342966c689084908490811061086e5761086e612bd7565b60200260200101516040518263ffffffff1660e01b815260040161089491815260200190565b600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b50505050806108d090612c03565b905061083c565b5050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016105ea90612ba2565b60038054911515600160a81b0260ff60a81b19909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561097157602002820191906000526020600020905b81548152602001906001019080831161095d575b5050505050905090565b6000546001600160a01b031633146109a55760405162461bcd60e51b81526004016105ea90612ba2565b47806109c45760405163334ab3f560e11b815260040160405180910390fd5b604051600090339083908381818185875af1925050503d8060008114610a06576040519150601f19603f3d011682016040523d82523d6000602084013e610a0b565b606091505b50509050806108d75760405162461bcd60e51b815260206004820152600060248201526044016105ea565b6000546001600160a01b03163314610a605760405162461bcd60e51b81526004016105ea90612ba2565b60005b81811015610aa857610a97838383818110610a8057610a80612bd7565b90506020020135600661160790919063ffffffff16565b50610aa181612c03565b9050610a63565b505050565b323314610acd57604051631003181f60e01b815260040160405180910390fd5b600354600160a81b900460ff16610af75760405163524c5e7b60e01b815260040160405180910390fd5b336002546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190612caf565b6001600160a01b031614610b9057604051631a86db5760e01b815260040160405180910390fd5b60008181526009602052604090205460011115610bc05760405163c343e5a760e01b815260040160405180910390fd5b6000818152600a602052604090205460ff1615610bf0576040516301c5072960e01b815260040160405180910390fd5b6000818152600a60205260408120805460ff19166001179055610c166002612710611624565b90506108d7828261175f565b6000546001600160a01b03163314610c4c5760405162461bcd60e51b81526004016105ea90612ba2565b610c566000611e70565b565b606060008267ffffffffffffffff811115610c7557610c756128e6565b604051908082528060200260200182016040528015610c9e578160200160208202803683370190505b50905060005b838110156106f957600a6000868684818110610cc257610cc2612bd7565b90506020020135815260200190815260200160002060009054906101000a900460ff16828281518110610cf757610cf7612bd7565b91151560209283029190910190910152610d1081612c03565b9050610ca4565b323314610d3757604051631003181f60e01b815260040160405180910390fd5b600354600160a01b900460ff16610d6157604051633cf1f5ef60e11b815260040160405180910390fd5b6002546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de19190612ccc565b610dfe5760405163cd7769ff60e01b815260040160405180910390fd5b336002546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190612caf565b6001600160a01b031614610e9757604051631a86db5760e01b815260040160405180910390fd5b6003546001600160a01b031662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612ce9565b610f345760405163108ef44360e01b815260040160405180910390fd5b610f3f600482611ec0565b610f5c576040516315140c5560e01b815260040160405180910390fd5b60008281526009602052604090205460011015610f8c5760405163d510ad4160e01b815260040160405180910390fd5b6003546001600160a01b031663ee720065336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810184905260016044820152606401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b5050505060006110146002612710611624565b9050600061103c838360008151811061102f5761102f612bd7565b6020026020010151611ed8565b90506000611064858460018151811061105757611057612bd7565b602002602001015161246a565b90508015611133576003546001600160a01b031663156e29f6336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050506110ec3390565b6001600160a01b03167f80f082e6829670ff14f0e7df5c04c45344409d5eab7155ff0668df6b60cb7fc58360405161112691815260200190565b60405180910390a261119f565b600354604051630ab714fb60e11b815230600482015260248101849052600160448201526001600160a01b039091169063156e29f690606401600060405180830381600087803b15801561118657600080fd5b505af115801561119a573d6000803e3d6000fd5b505050505b5050505050565b6000546001600160a01b031633146111d05760405162461bcd60e51b81526004016105ea90612ba2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461121c5760405162461bcd60e51b81526004016105ea90612ba2565b6002546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190612ccc565b6112b95760405163cd7769ff60e01b815260040160405180910390fd5b60005b81518110156108d75760008282815181106112d9576112d9612bd7565b602002602001015190506112ea3390565b6002546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135b9190612caf565b6001600160a01b03161461138257604051631a86db5760e01b815260040160405180910390fd5b600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018190556002546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b81526004016113e993929190612d02565b600060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50505050508061142690612c03565b90506112bc565b6000546001600160a01b031633146114575760405162461bcd60e51b81526004016105ea90612ba2565b600254604051632118854760e21b81523060048201526000916001600160a01b031690638462151c90602401600060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114c89190810190612c1e565b905060005b8151811015610aa85760025482516001600160a01b03909116906323b872dd903090869086908690811061150357611503612bd7565b60200260200101516040518463ffffffff1660e01b815260040161152993929190612d02565b600060405180830381600087803b15801561154357600080fd5b505af1158015611557573d6000803e3d6000fd5b505050508061156590612c03565b90506114cd565b6000546001600160a01b031633146115965760405162461bcd60e51b81526004016105ea90612ba2565b6001600160a01b0381166115fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b61160481611e70565b50565b6000611613838361269b565b9392505050565b6000610646825490565b6060601083111561166c5760405162461bcd60e51b815260206004820152601260248201527122bc31b2b2b21036b0bc1039b4bd3290189b60711b60448201526064016105ea565b61ffff8211156116b25760405162461bcd60e51b815260206004820152601160248201527022bc31b2b2b21036b0bc103ab4b73a189b60791b60448201526064016105ea565b60006116bc6126ea565b905060008467ffffffffffffffff8111156116d9576116d96128e6565b604051908082528060200260200182016040528015611702578160200160208202803683370190505b50905060005b85811015611756578461171c826010612d26565b611729919085901c612d45565b82828151811061173b5761173b612bd7565b602090810291909101015261174f81612c03565b9050611708565b50949350505050565b604b8160008151811061177457611774612bd7565b6020026020010151101561191e5760004790506105dc8260018151811061179d5761179d612bd7565b60200260200101511080156117ba57506705d423c655aa00008110155b80156117c857506000600c54115b156118aa576001600c60008282546117e09190612d67565b9091555050604080518481526705d423c655aa0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a26000336001600160a01b03166705d423c655aa00006040515b60006040518083038185875af1925050503d806000811461187d576040519150601f19603f3d011682016040523d82523d6000602084013e611882565b606091505b50509050806118a457604051630bf46a9b60e01b815260040160405180910390fd5b50505050565b67016345785d8a00008110611918576040805184815267016345785d8a0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a26000336001600160a01b031667016345785d8a0000604051611840565b50611e37565b60af8160008151811061193357611933612bd7565b60200260200101511015611ad257600b5415611acd576000600b805490508260018151811061196457611964612bd7565b60200260200101516119769190612d45565b90506000600b828154811061198d5761198d612bd7565b90600052602060002001549050600b6001600b805490506119ae9190612d67565b815481106119be576119be612bd7565b9060005260206000200154600b83815481106119dc576119dc612bd7565b600091825260209091200155600b8054806119f9576119f9612d7e565b6000828152602081206000199083018101919091550190556002546001600160a01b03166323b872dd3033846040518463ffffffff1660e01b8152600401611a4393929190612d02565b600060405180830381600087803b158015611a5d57600080fd5b505af1158015611a71573d6000803e3d6000fd5b50505050611a7c3390565b6001600160a01b03167f9362094d33ca93e045cffe9409f58c4caf5600ad3b845bb0f33d807d281f71e98583604051611abf929190918252602082015260400190565b60405180910390a250505050565b611e37565b6102a381600081518110611ae857611ae8612bd7565b60200260200101511015611e375760006103e882600181518110611b0e57611b0e612bd7565b6020026020010151108015611b945750600354604051627eeac760e11b81523060048083019190915260248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b929190612ce9565b115b15611ba157506004611d6b565b610bb882600181518110611bb757611bb7612bd7565b6020026020010151108015611c3b5750600354604051627eeac760e11b8152306004820152600560248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c399190612ce9565b115b15611c4857506005611d6b565b61177082600181518110611c5e57611c5e612bd7565b6020026020010151108015611ce25750600354604051627eeac760e11b8152306004820152600660248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190612ce9565b115b15611cef57506006611d6b565b600354604051627eeac760e11b8152306004820152600760248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190612ce9565b1115611d6b575060075b8015611e355760035460408051602081018252600081529051637921219560e11b81526001600160a01b039092169163f242432a91611db591309133918791600191600401612d94565b600060405180830381600087803b158015611dcf57600080fd5b505af1158015611de3573d6000803e3d6000fd5b50505050611dee3390565b6001600160a01b03167f586434e57bdc337d11df1124318c5c5314cd5c7e1826b4e47e0e65b62f4fe13982604051611e2891815260200190565b60405180910390a2505050565b505b60405182815233907f79ec8a0a6d79f8b0012bcd5c0458a35b67ec51c067bff7a8971ae34a6de98f8d9060200160405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526001830160205260408120541515611613565b60006007836120565760a983108015611f9257506004600081905260086020527f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b85460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b03991611f4d91810190815260200190565b6020604051808303816000875af1158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190612ce9565b105b15611f9f57506004611613565b61125c831080156120405750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b03991611ffb9160040190815260200190565b6020604051808303816000875af115801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e9190612ce9565b105b1561204d57506005611613565b5060065b611613565b83600114156121cd57610320831080156121005750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916120bb9160040190815260200190565b6020604051808303816000875af11580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fe9190612ce9565b105b1561210d57506005611613565b61189c831080156121c057506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b0399161217b9160040190815260200190565b6020604051808303816000875af115801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121be9190612ce9565b105b1561205157506006611613565b83600214156122f25761012c831080156122775750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916122329160040190815260200190565b6020604051808303816000875af1158015612251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122759190612ce9565b105b1561228457506005611613565b610d48831080156121c057506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b0399161217b9160040190815260200190565b83600314156116135760648310801561239b5750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916123569160040190815260200190565b6020604051808303816000875af1158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123999190612ce9565b105b156123a857506005611613565b6108fc8310801561245b57506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916124169160040190815260200190565b6020604051808303816000875af1158015612435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124599190612ce9565b105b15611613575060069392505050565b600080612478600685611ec0565b9050600160096000868152602001908152602001600020600082825461249e9190612e13565b90915550506101a4831080156124b2575080155b1561256857600254604051630852cd8d60e31b8152600481018690526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156124fd57600080fd5b505af1158015612511573d6000803e3d6000fd5b5050505061251c3390565b6001600160a01b03167f0860d763b1363254fddd5455622cc9987ea72c2282820ad9347b7ed7b57606968560405161255691815260200190565b60405180910390a26000915050610646565b61020883108015612577575080155b1561265657600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018490556002546001600160a01b03166323b872dd3330876040518463ffffffff1660e01b81526004016125e393929190612d02565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b5050505061261c3390565b6001600160a01b03167f25fecb51ab9b0f32dc8cf9de29e1dfdc9c0ff4ee392b2dcc9778505c0563778f8560405161255691815260200190565b604080518581526020810185905233917f1b99cb9eb38b218c9805217e0a152602d8310ea3e667acba2e94e5986d90ed06910160405180910390a25060019392505050565b60008181526001830160205260408120546126e257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610646565b506000610646565b60004244416001600081548092919061270290612c03565b909155506040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b6001600160a01b038116811461160457600080fd5b60006020828403121561277a57600080fd5b813561161381612753565b60006020828403121561279757600080fd5b81356001600160e01b03198116811461161357600080fd5b600080602083850312156127c257600080fd5b823567ffffffffffffffff808211156127da57600080fd5b818501915085601f8301126127ee57600080fd5b8135818111156127fd57600080fd5b8660208260051b850101111561281257600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b8181101561285c57835183529284019291840191600101612840565b50909695505050505050565b801515811461160457600080fd5b60006020828403121561288857600080fd5b813561161381612868565b6000602082840312156128a557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561285c5783511515835292840192918401916001016128c8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612925576129256128e6565b604052919050565b600067ffffffffffffffff821115612947576129476128e6565b5060051b60200190565b600082601f83011261296257600080fd5b813560206129776129728361292d565b6128fc565b82815260059290921b8401810191818101908684111561299657600080fd5b8286015b848110156129b1578035835291830191830161299a565b509695505050505050565b600082601f8301126129cd57600080fd5b813567ffffffffffffffff8111156129e7576129e76128e6565b6129fa601f8201601f19166020016128fc565b818152846020838601011115612a0f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612a4457600080fd5b8535612a4f81612753565b94506020860135612a5f81612753565b9350604086013567ffffffffffffffff80821115612a7c57600080fd5b612a8889838a01612951565b94506060880135915080821115612a9e57600080fd5b612aaa89838a01612951565b93506080880135915080821115612ac057600080fd5b50612acd888289016129bc565b9150509295509295909350565b60008060408385031215612aed57600080fd5b50508035926020909101359150565b600060208284031215612b0e57600080fd5b813567ffffffffffffffff811115612b2557600080fd5b612b3184828501612951565b949350505050565b600080600080600060a08688031215612b5157600080fd5b8535612b5c81612753565b94506020860135612b6c81612753565b93506040860135925060608601359150608086013567ffffffffffffffff811115612b9657600080fd5b612acd888289016129bc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c1757612c17612bed565b5060010190565b60006020808385031215612c3157600080fd5b825167ffffffffffffffff811115612c4857600080fd5b8301601f81018513612c5957600080fd5b8051612c676129728261292d565b81815260059190911b82018301908381019087831115612c8657600080fd5b928401925b82841015612ca457835182529284019290840190612c8b565b979650505050505050565b600060208284031215612cc157600080fd5b815161161381612753565b600060208284031215612cde57600080fd5b815161161381612868565b600060208284031215612cfb57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000816000190483118215151615612d4057612d40612bed565b500290565b600082612d6257634e487b7160e01b600052601260045260246000fd5b500690565b600082821015612d7957612d79612bed565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018060a01b03808816835260208188168185015286604085015285606085015260a06080850152845191508160a085015260005b82811015612de75785810182015185820160c001528101612dcb565b82811115612df957600060c084870101525b5050601f01601f19169190910160c0019695505050505050565b60008219821115612e2657612e26612bed565b50019056fe91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdba2646970667358221220127d0f7fc8206436e12b7d2a860f5ee9616914bdb71c5fe2ba5f11b2c25534da64736f6c634300080b00330000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b4
Deployed Bytecode
0x6080604052600436106101bb5760003560e01c80636457e389116100ec578063ca39e5ef1161008a578063e152124b11610064578063e152124b14610534578063ed29838214610554578063f23a6e6114610574578063f2fde38b146105a057600080fd5b8063ca39e5ef146104d4578063d32d0220146104f4578063db9ecfac1461051457600080fd5b80637faff86b116100c65780637faff86b146104175780638da5cb5b14610444578063bc197c8114610462578063c131d36f146104a757600080fd5b80636457e389146103c15780637131eb31146103e1578063715018a61461040257600080fd5b8063266eeb38116101595780633ccfd60b116101335780633ccfd60b1461034057806347535d7b146103485780634c116e3b1461036957806357ec50941461038957600080fd5b8063266eeb38146102db5780632af097561461030b5780632e9a8e7d1461032b57600080fd5b8063085a10cf11610195578063085a10cf1461024b57806311431e561461026b578063227993de146102995780632564eed7146102ae57600080fd5b80630100c04f146101c757806301ffc9a7146101e9578063071a88f91461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e2366004612768565b6105c0565b005b3480156101f557600080fd5b50610209610204366004612785565b610615565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b5061023e6102393660046127af565b61064c565b6040516102159190612824565b34801561025757600080fd5b506101e7610266366004612876565b610701565b34801561027757600080fd5b5061028b610286366004612893565b61077b565b604051908152602001610215565b3480156102a557600080fd5b506101e761079c565b3480156102ba57600080fd5b5061028b6102c9366004612893565b60086020526000908152604090205481565b3480156102e757600080fd5b506102096102f6366004612893565b600a6020526000908152604090205460ff1681565b34801561031757600080fd5b506101e7610326366004612876565b6108db565b34801561033757600080fd5b5061023e610923565b6101e761097b565b34801561035457600080fd5b5060035461020990600160a01b900460ff1681565b34801561037557600080fd5b506101e76103843660046127af565b610a36565b34801561039557600080fd5b506003546103a9906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156103cd57600080fd5b506101e76103dc366004612893565b610aad565b3480156103ed57600080fd5b5060035461020990600160a81b900460ff1681565b34801561040e57600080fd5b506101e7610c22565b34801561042357600080fd5b506104376104323660046127af565b610c58565b60405161021591906128ac565b34801561045057600080fd5b506000546001600160a01b03166103a9565b34801561046e57600080fd5b5061048e61047d366004612a2c565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610215565b3480156104b357600080fd5b5061028b6104c2366004612893565b60096020526000908152604090205481565b3480156104e057600080fd5b506101e76104ef366004612ada565b610d17565b34801561050057600080fd5b506101e761050f366004612768565b6111a6565b34801561052057600080fd5b506002546103a9906001600160a01b031681565b34801561054057600080fd5b506101e761054f366004612afc565b6111f2565b34801561056057600080fd5b506101e761056f366004612768565b61142d565b34801561058057600080fd5b5061048e61058f366004612b39565b63f23a6e6160e01b95945050505050565b3480156105ac57600080fd5b506101e76105bb366004612768565b61156c565b6000546001600160a01b031633146105f35760405162461bcd60e51b81526004016105ea90612ba2565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216630271189760e51b148061064657506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008267ffffffffffffffff811115610669576106696128e6565b604051908082528060200260200182016040528015610692578160200160208202803683370190505b50905060005b838110156106f957600960008686848181106106b6576106b6612bd7565b905060200201358152602001908152602001600020548282815181106106de576106de612bd7565b60209081029190910101526106f281612c03565b9050610698565b509392505050565b6000546001600160a01b0316331461072b5760405162461bcd60e51b81526004016105ea90612ba2565b80801561073f575061073d600661161a565b155b1561075d576040516376a40a7360e11b815260040160405180910390fd5b60038054911515600160a01b0260ff60a01b19909216919091179055565b600b818154811061078b57600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146107c65760405162461bcd60e51b81526004016105ea90612ba2565b600254604051632118854760e21b81523060048201526000916001600160a01b031690638462151c90602401600060405180830381865afa15801561080f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108379190810190612c1e565b905060005b81518110156108d75760025482516001600160a01b03909116906342966c689084908490811061086e5761086e612bd7565b60200260200101516040518263ffffffff1660e01b815260040161089491815260200190565b600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b50505050806108d090612c03565b905061083c565b5050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016105ea90612ba2565b60038054911515600160a81b0260ff60a81b19909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561097157602002820191906000526020600020905b81548152602001906001019080831161095d575b5050505050905090565b6000546001600160a01b031633146109a55760405162461bcd60e51b81526004016105ea90612ba2565b47806109c45760405163334ab3f560e11b815260040160405180910390fd5b604051600090339083908381818185875af1925050503d8060008114610a06576040519150601f19603f3d011682016040523d82523d6000602084013e610a0b565b606091505b50509050806108d75760405162461bcd60e51b815260206004820152600060248201526044016105ea565b6000546001600160a01b03163314610a605760405162461bcd60e51b81526004016105ea90612ba2565b60005b81811015610aa857610a97838383818110610a8057610a80612bd7565b90506020020135600661160790919063ffffffff16565b50610aa181612c03565b9050610a63565b505050565b323314610acd57604051631003181f60e01b815260040160405180910390fd5b600354600160a81b900460ff16610af75760405163524c5e7b60e01b815260040160405180910390fd5b336002546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190612caf565b6001600160a01b031614610b9057604051631a86db5760e01b815260040160405180910390fd5b60008181526009602052604090205460011115610bc05760405163c343e5a760e01b815260040160405180910390fd5b6000818152600a602052604090205460ff1615610bf0576040516301c5072960e01b815260040160405180910390fd5b6000818152600a60205260408120805460ff19166001179055610c166002612710611624565b90506108d7828261175f565b6000546001600160a01b03163314610c4c5760405162461bcd60e51b81526004016105ea90612ba2565b610c566000611e70565b565b606060008267ffffffffffffffff811115610c7557610c756128e6565b604051908082528060200260200182016040528015610c9e578160200160208202803683370190505b50905060005b838110156106f957600a6000868684818110610cc257610cc2612bd7565b90506020020135815260200190815260200160002060009054906101000a900460ff16828281518110610cf757610cf7612bd7565b91151560209283029190910190910152610d1081612c03565b9050610ca4565b323314610d3757604051631003181f60e01b815260040160405180910390fd5b600354600160a01b900460ff16610d6157604051633cf1f5ef60e11b815260040160405180910390fd5b6002546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de19190612ccc565b610dfe5760405163cd7769ff60e01b815260040160405180910390fd5b336002546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e709190612caf565b6001600160a01b031614610e9757604051631a86db5760e01b815260040160405180910390fd5b6003546001600160a01b031662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612ce9565b610f345760405163108ef44360e01b815260040160405180910390fd5b610f3f600482611ec0565b610f5c576040516315140c5560e01b815260040160405180910390fd5b60008281526009602052604090205460011015610f8c5760405163d510ad4160e01b815260040160405180910390fd5b6003546001600160a01b031663ee720065336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810184905260016044820152606401600060405180830381600087803b158015610fed57600080fd5b505af1158015611001573d6000803e3d6000fd5b5050505060006110146002612710611624565b9050600061103c838360008151811061102f5761102f612bd7565b6020026020010151611ed8565b90506000611064858460018151811061105757611057612bd7565b602002602001015161246a565b90508015611133576003546001600160a01b031663156e29f6336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260016044820152606401600060405180830381600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050506110ec3390565b6001600160a01b03167f80f082e6829670ff14f0e7df5c04c45344409d5eab7155ff0668df6b60cb7fc58360405161112691815260200190565b60405180910390a261119f565b600354604051630ab714fb60e11b815230600482015260248101849052600160448201526001600160a01b039091169063156e29f690606401600060405180830381600087803b15801561118657600080fd5b505af115801561119a573d6000803e3d6000fd5b505050505b5050505050565b6000546001600160a01b031633146111d05760405162461bcd60e51b81526004016105ea90612ba2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461121c5760405162461bcd60e51b81526004016105ea90612ba2565b6002546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190612ccc565b6112b95760405163cd7769ff60e01b815260040160405180910390fd5b60005b81518110156108d75760008282815181106112d9576112d9612bd7565b602002602001015190506112ea3390565b6002546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015611337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135b9190612caf565b6001600160a01b03161461138257604051631a86db5760e01b815260040160405180910390fd5b600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018190556002546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b81526004016113e993929190612d02565b600060405180830381600087803b15801561140357600080fd5b505af1158015611417573d6000803e3d6000fd5b50505050508061142690612c03565b90506112bc565b6000546001600160a01b031633146114575760405162461bcd60e51b81526004016105ea90612ba2565b600254604051632118854760e21b81523060048201526000916001600160a01b031690638462151c90602401600060405180830381865afa1580156114a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114c89190810190612c1e565b905060005b8151811015610aa85760025482516001600160a01b03909116906323b872dd903090869086908690811061150357611503612bd7565b60200260200101516040518463ffffffff1660e01b815260040161152993929190612d02565b600060405180830381600087803b15801561154357600080fd5b505af1158015611557573d6000803e3d6000fd5b505050508061156590612c03565b90506114cd565b6000546001600160a01b031633146115965760405162461bcd60e51b81526004016105ea90612ba2565b6001600160a01b0381166115fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b61160481611e70565b50565b6000611613838361269b565b9392505050565b6000610646825490565b6060601083111561166c5760405162461bcd60e51b815260206004820152601260248201527122bc31b2b2b21036b0bc1039b4bd3290189b60711b60448201526064016105ea565b61ffff8211156116b25760405162461bcd60e51b815260206004820152601160248201527022bc31b2b2b21036b0bc103ab4b73a189b60791b60448201526064016105ea565b60006116bc6126ea565b905060008467ffffffffffffffff8111156116d9576116d96128e6565b604051908082528060200260200182016040528015611702578160200160208202803683370190505b50905060005b85811015611756578461171c826010612d26565b611729919085901c612d45565b82828151811061173b5761173b612bd7565b602090810291909101015261174f81612c03565b9050611708565b50949350505050565b604b8160008151811061177457611774612bd7565b6020026020010151101561191e5760004790506105dc8260018151811061179d5761179d612bd7565b60200260200101511080156117ba57506705d423c655aa00008110155b80156117c857506000600c54115b156118aa576001600c60008282546117e09190612d67565b9091555050604080518481526705d423c655aa0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a26000336001600160a01b03166705d423c655aa00006040515b60006040518083038185875af1925050503d806000811461187d576040519150601f19603f3d011682016040523d82523d6000602084013e611882565b606091505b50509050806118a457604051630bf46a9b60e01b815260040160405180910390fd5b50505050565b67016345785d8a00008110611918576040805184815267016345785d8a0000602082015233917fcfa3857410439f46cd229235c2fe3b64d18b565a6bebd840e2bd64d029bb42de910160405180910390a26000336001600160a01b031667016345785d8a0000604051611840565b50611e37565b60af8160008151811061193357611933612bd7565b60200260200101511015611ad257600b5415611acd576000600b805490508260018151811061196457611964612bd7565b60200260200101516119769190612d45565b90506000600b828154811061198d5761198d612bd7565b90600052602060002001549050600b6001600b805490506119ae9190612d67565b815481106119be576119be612bd7565b9060005260206000200154600b83815481106119dc576119dc612bd7565b600091825260209091200155600b8054806119f9576119f9612d7e565b6000828152602081206000199083018101919091550190556002546001600160a01b03166323b872dd3033846040518463ffffffff1660e01b8152600401611a4393929190612d02565b600060405180830381600087803b158015611a5d57600080fd5b505af1158015611a71573d6000803e3d6000fd5b50505050611a7c3390565b6001600160a01b03167f9362094d33ca93e045cffe9409f58c4caf5600ad3b845bb0f33d807d281f71e98583604051611abf929190918252602082015260400190565b60405180910390a250505050565b611e37565b6102a381600081518110611ae857611ae8612bd7565b60200260200101511015611e375760006103e882600181518110611b0e57611b0e612bd7565b6020026020010151108015611b945750600354604051627eeac760e11b81523060048083019190915260248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b929190612ce9565b115b15611ba157506004611d6b565b610bb882600181518110611bb757611bb7612bd7565b6020026020010151108015611c3b5750600354604051627eeac760e11b8152306004820152600560248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c399190612ce9565b115b15611c4857506005611d6b565b61177082600181518110611c5e57611c5e612bd7565b6020026020010151108015611ce25750600354604051627eeac760e11b8152306004820152600660248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190612ce9565b115b15611cef57506006611d6b565b600354604051627eeac760e11b8152306004820152600760248201526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190612ce9565b1115611d6b575060075b8015611e355760035460408051602081018252600081529051637921219560e11b81526001600160a01b039092169163f242432a91611db591309133918791600191600401612d94565b600060405180830381600087803b158015611dcf57600080fd5b505af1158015611de3573d6000803e3d6000fd5b50505050611dee3390565b6001600160a01b03167f586434e57bdc337d11df1124318c5c5314cd5c7e1826b4e47e0e65b62f4fe13982604051611e2891815260200190565b60405180910390a2505050565b505b60405182815233907f79ec8a0a6d79f8b0012bcd5c0458a35b67ec51c067bff7a8971ae34a6de98f8d9060200160405180910390a25050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526001830160205260408120541515611613565b60006007836120565760a983108015611f9257506004600081905260086020527f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b85460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b03991611f4d91810190815260200190565b6020604051808303816000875af1158015611f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f909190612ce9565b105b15611f9f57506004611613565b61125c831080156120405750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b03991611ffb9160040190815260200190565b6020604051808303816000875af115801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e9190612ce9565b105b1561204d57506005611613565b5060065b611613565b83600114156121cd57610320831080156121005750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916120bb9160040190815260200190565b6020604051808303816000875af11580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fe9190612ce9565b105b1561210d57506005611613565b61189c831080156121c057506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b0399161217b9160040190815260200190565b6020604051808303816000875af115801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121be9190612ce9565b105b1561205157506006611613565b83600214156122f25761012c831080156122775750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916122329160040190815260200190565b6020604051808303816000875af1158015612251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122759190612ce9565b105b1561228457506005611613565b610d48831080156121c057506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b0399161217b9160040190815260200190565b83600314156116135760648310801561239b5750600560008190526008602052600080516020612e2c8339815191525460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916123569160040190815260200190565b6020604051808303816000875af1158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123999190612ce9565b105b156123a857506005611613565b6108fc8310801561245b57506006600081905260086020527f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55460035460405163bd85b03960e01b815291926001600160a01b039091169163bd85b039916124169160040190815260200190565b6020604051808303816000875af1158015612435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124599190612ce9565b105b15611613575060069392505050565b600080612478600685611ec0565b9050600160096000868152602001908152602001600020600082825461249e9190612e13565b90915550506101a4831080156124b2575080155b1561256857600254604051630852cd8d60e31b8152600481018690526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156124fd57600080fd5b505af1158015612511573d6000803e3d6000fd5b5050505061251c3390565b6001600160a01b03167f0860d763b1363254fddd5455622cc9987ea72c2282820ad9347b7ed7b57606968560405161255691815260200190565b60405180910390a26000915050610646565b61020883108015612577575080155b1561265657600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018490556002546001600160a01b03166323b872dd3330876040518463ffffffff1660e01b81526004016125e393929190612d02565b600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b5050505061261c3390565b6001600160a01b03167f25fecb51ab9b0f32dc8cf9de29e1dfdc9c0ff4ee392b2dcc9778505c0563778f8560405161255691815260200190565b604080518581526020810185905233917f1b99cb9eb38b218c9805217e0a152602d8310ea3e667acba2e94e5986d90ed06910160405180910390a25060019392505050565b60008181526001830160205260408120546126e257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610646565b506000610646565b60004244416001600081548092919061270290612c03565b909155506040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b6001600160a01b038116811461160457600080fd5b60006020828403121561277a57600080fd5b813561161381612753565b60006020828403121561279757600080fd5b81356001600160e01b03198116811461161357600080fd5b600080602083850312156127c257600080fd5b823567ffffffffffffffff808211156127da57600080fd5b818501915085601f8301126127ee57600080fd5b8135818111156127fd57600080fd5b8660208260051b850101111561281257600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b8181101561285c57835183529284019291840191600101612840565b50909695505050505050565b801515811461160457600080fd5b60006020828403121561288857600080fd5b813561161381612868565b6000602082840312156128a557600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561285c5783511515835292840192918401916001016128c8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612925576129256128e6565b604052919050565b600067ffffffffffffffff821115612947576129476128e6565b5060051b60200190565b600082601f83011261296257600080fd5b813560206129776129728361292d565b6128fc565b82815260059290921b8401810191818101908684111561299657600080fd5b8286015b848110156129b1578035835291830191830161299a565b509695505050505050565b600082601f8301126129cd57600080fd5b813567ffffffffffffffff8111156129e7576129e76128e6565b6129fa601f8201601f19166020016128fc565b818152846020838601011115612a0f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215612a4457600080fd5b8535612a4f81612753565b94506020860135612a5f81612753565b9350604086013567ffffffffffffffff80821115612a7c57600080fd5b612a8889838a01612951565b94506060880135915080821115612a9e57600080fd5b612aaa89838a01612951565b93506080880135915080821115612ac057600080fd5b50612acd888289016129bc565b9150509295509295909350565b60008060408385031215612aed57600080fd5b50508035926020909101359150565b600060208284031215612b0e57600080fd5b813567ffffffffffffffff811115612b2557600080fd5b612b3184828501612951565b949350505050565b600080600080600060a08688031215612b5157600080fd5b8535612b5c81612753565b94506020860135612b6c81612753565b93506040860135925060608601359150608086013567ffffffffffffffff811115612b9657600080fd5b612acd888289016129bc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c1757612c17612bed565b5060010190565b60006020808385031215612c3157600080fd5b825167ffffffffffffffff811115612c4857600080fd5b8301601f81018513612c5957600080fd5b8051612c676129728261292d565b81815260059190911b82018301908381019087831115612c8657600080fd5b928401925b82841015612ca457835182529284019290840190612c8b565b979650505050505050565b600060208284031215612cc157600080fd5b815161161381612753565b600060208284031215612cde57600080fd5b815161161381612868565b600060208284031215612cfb57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000816000190483118215151615612d4057612d40612bed565b500290565b600082612d6257634e487b7160e01b600052601260045260246000fd5b500690565b600082821015612d7957612d79612bed565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018060a01b03808816835260208188168185015286604085015285606085015260a06080850152845191508160a085015260005b82811015612de75785810182015185820160c001528101612dcb565b82811115612df957600060c084870101525b5050601f01601f19169190910160c0019695505050505050565b60008219821115612e2657612e26612bed565b50019056fe91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdba2646970667358221220127d0f7fc8206436e12b7d2a860f5ee9616914bdb71c5fe2ba5f11b2c25534da64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b4
-----Decoded View---------------
Arg [0] : moonrunnersAddress (address): 0x1485297e942ce64E0870EcE60179dFda34b4C625
Arg [1] : moonrunnersLootAddress (address): 0xb6d460aC51B93BCa63B694f099C4A8b3B1CF73B4
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001485297e942ce64e0870ece60179dfda34b4c625
Arg [1] : 000000000000000000000000b6d460ac51b93bca63b694f099c4a8b3b1cf73b4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.