Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
Latest 25 from a total of 6,744 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 14818686 | 80 days ago | IN | 0 ETH | 0 | ||||
Claim All Yield | 14818678 | 80 days ago | IN | 0 ETH | 0.00000001 | ||||
Batch Free Hunt | 14646346 | 84 days ago | IN | 0.0000125 ETH | 0.00000004 | ||||
Batch Free Hunt | 14219630 | 94 days ago | IN | 0.0000125 ETH | 0.00000003 | ||||
Unlock Wolf | 14082990 | 97 days ago | IN | 0 ETH | 0 | ||||
Batch Free Hunt | 14033189 | 98 days ago | IN | 0.0000125 ETH | 0.00000003 | ||||
Batch Free Hunt | 14033110 | 98 days ago | IN | 0.0000125 ETH | 0.00000003 | ||||
Batch Free Hunt | 13987606 | 99 days ago | IN | 0.000025 ETH | 0.00000003 | ||||
Batch Free Hunt | 13680303 | 107 days ago | IN | 0.0000125 ETH | 0.00000013 | ||||
Batch Paid Hunt | 13679887 | 107 days ago | IN | 0.00125 ETH | 0.00000013 | ||||
Batch Yolo Hunt | 13679784 | 107 days ago | IN | 0.00125 ETH | 0.00000013 | ||||
Batch Free Hunt | 13679770 | 107 days ago | IN | 0.0000125 ETH | 0.00000013 | ||||
Batch Free Hunt | 13679765 | 107 days ago | IN | 0.0000125 ETH | 0.00000013 | ||||
Batch Free Hunt | 13670821 | 107 days ago | IN | 0.0000125 ETH | 0.00000013 | ||||
Batch Free Hunt | 13632989 | 108 days ago | IN | 0.0000125 ETH | 0.00000009 | ||||
Batch Free Hunt | 13549049 | 110 days ago | IN | 0.0000375 ETH | 0.00000004 | ||||
Batch Free Hunt | 13495668 | 111 days ago | IN | 0.0000125 ETH | 0.00000007 | ||||
Pig Hunt | 13419719 | 113 days ago | IN | 0.0000125 ETH | 0.00000006 | ||||
Free Hunt | 13418779 | 113 days ago | IN | 0.0000125 ETH | 0.00000007 | ||||
Free Hunt | 13418767 | 113 days ago | IN | 0.0000125 ETH | 0.00000007 | ||||
Free Hunt | 13418758 | 113 days ago | IN | 0.0000125 ETH | 0.00000007 | ||||
Nuclear Hunt | 13418517 | 113 days ago | IN | 0.0000125 ETH | 0.00000006 | ||||
Nuclear Hunt | 13418510 | 113 days ago | IN | 0.0000125 ETH | 0.00000006 | ||||
Batch Free Hunt | 13415648 | 113 days ago | IN | 0.00005 ETH | 0.00000004 | ||||
Batch Free Hunt | 13415640 | 113 days ago | IN | 0.00005 ETH | 0.00000004 |
Latest 21 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14818686 | 80 days ago | 0.5216375 ETH | ||||
13382357 | 113 days ago | 0.00125 ETH | ||||
13382351 | 113 days ago | 0.00125 ETH | ||||
13382345 | 113 days ago | 0.00125 ETH | ||||
13382338 | 113 days ago | 0.00125 ETH | ||||
13382332 | 113 days ago | 0.00125 ETH | ||||
13371239 | 114 days ago | 0.00125 ETH | ||||
13355348 | 114 days ago | 0.00125 ETH | ||||
13355015 | 114 days ago | 0.00125 ETH | ||||
13352310 | 114 days ago | 0.00125 ETH | ||||
13352301 | 114 days ago | 0.00125 ETH | ||||
13352292 | 114 days ago | 0.00125 ETH | ||||
13352283 | 114 days ago | 0.00125 ETH | ||||
13347571 | 114 days ago | 0.00125 ETH | ||||
13347548 | 114 days ago | 0.00125 ETH | ||||
13347140 | 114 days ago | 0.00125 ETH | ||||
13346601 | 114 days ago | 0.00125 ETH | ||||
13346268 | 114 days ago | 0.00125 ETH | ||||
13346264 | 114 days ago | 0.00125 ETH | ||||
13345450 | 114 days ago | 0.00125 ETH | ||||
13344988 | 114 days ago | 0.00125 ETH |
Contract Source Code Verified (Exact Match)
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.26; import "./vendor/GelatoVRFConsumerBase.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "./blast/IBlast.sol"; import "./blast/IBlastPoints.sol"; interface IWolves { function ownerOf(uint256 tokenId) external view returns (address); function balanceOf(address owner) external view returns (uint256); function totalSupply() external view returns (uint256); } interface IHuntPartners { function getTokensByOwner( address owner ) external view returns (uint256[] memory); function addNewTokens(address to, uint256 amount) external; function ownerOf(uint256 tokenId) external view returns (address); function totalSupply() external view returns (uint256); } struct Wolf { uint256 lastHuntedWindow; uint256 points; uint256 timesHunted; } enum LockStatus { UNLOCKED, LOCKED } enum RequestType { FreeHunt, PaidHunt, NuclearHunt, YoloHunt } enum HuntResult { NothingFound, Outcome1, Outcome2, Outcome3, Outcome4, Outcome5, Outcome6 } struct LockedWolf { uint timestamp; LockStatus status; RequestType requestType; } enum HuntStatus { DISABLED, ENABLED } struct RandomRequest { address sender; uint256 id; uint256 timestamp; RequestType requestType; } struct HuntChances { uint nothingFound; uint outcome1; uint outcome2; uint outcome3; uint outcome4; uint outcome5; uint outcome6; } contract Hunt is GelatoVRFConsumerBase, Ownable, ReentrancyGuard { uint256 public totalTimesHunted = 0; uint256 public baseHuntPrice = 0.0000125 ether; uint256 public paidHuntPrice = 0.00125 ether; uint256 public yoloHuntPrice = 0.00125 ether; uint256 public ambushPrice = 0.001 ether; HuntStatus public huntStatus = HuntStatus.DISABLED; address private immutable _operatorAddr; uint256 public cooldown = 12 hours; uint256 public fullMoon = 1717286400; mapping(uint256 => Wolf) public wolves; mapping(uint256 => LockedWolf) public lockedWolves; mapping(RequestType => HuntChances) public huntingChances; mapping(uint256 => RandomRequest) public pendingRandomRequests; mapping(uint256 => bool) public isPigId; mapping(uint256 => uint256) public ambushedIds; uint256 public totalAmbushed; uint256[] public huntRewards = [1, 25, 50, 100, 150, 250, 500]; IWolves public wolvesContract; IHuntPartners public huntPartnersContract; IBlastPoints public BlastPoints; IBlast public BLAST; function _operator() internal view override returns (address) { return _operatorAddr; } constructor( address _wolvesContract, address _huntPartnersContract, address operator, address _blastAddress, address _blastPointsAddress, address _pointsOperator ) Ownable(msg.sender) { wolvesContract = IWolves(_wolvesContract); huntPartnersContract = IHuntPartners(_huntPartnersContract); _operatorAddr = operator; BLAST = IBlast(_blastAddress); BLAST.configureClaimableYield(); BLAST.configureClaimableGas(); BlastPoints = IBlastPoints(_blastPointsAddress); BlastPoints.configurePointsOperator(_pointsOperator); huntingChances[RequestType.FreeHunt] = HuntChances( 3000, 2500, 1700, 1200, 1000, 500, 100 ); huntingChances[RequestType.PaidHunt] = HuntChances( 1000, 1500, 2400, 2400, 1500, 1000, 200 ); huntingChances[RequestType.NuclearHunt] = HuntChances( 1000, 1500, 2400, 2400, 1500, 1000, 200 ); huntingChances[RequestType.YoloHunt] = HuntChances( 7100, 0, 0, 0, 0, 2500, 400 ); uint16[194] memory pigIds = [ 532, 582, 620, 670, 679, 717, 731, 735, 750, 754, 755, 756, 776, 823, 857, 879, 907, 949, 993, 1072, 1093, 1096, 1104, 1114, 1132, 1144, 1149, 1159, 1175, 1176, 1185, 1220, 1240, 1253, 1261, 1271, 1296, 1330, 1333, 1341, 1371, 1386, 1399, 1406, 1455, 1457, 1499, 1500, 1509, 1515, 1523, 1528, 1529, 1541, 1562, 1596, 1606, 1626, 1643, 1646, 1691, 1698, 1759, 1795, 1818, 1824, 1893, 1904, 1976, 1998, 1999, 2120, 2147, 2178, 2185, 2218, 2254, 2333, 2345, 2406, 2411, 2447, 2450, 2480, 2490, 2510, 2594, 2606, 2614, 2618, 2629, 2632, 2678, 2679, 2680, 2684, 2685, 2696, 2799, 2843, 2888, 2900, 2944, 2962, 3029, 3057, 3064, 3075, 3078, 3094, 3105, 3106, 3113, 3121, 3142, 3161, 3192, 3208, 3318, 3337, 3357, 3376, 3410, 3450, 3475, 3509, 3531, 3550, 3583, 3639, 3682, 3683, 3703, 3734, 3740, 3781, 3798, 3808, 3843, 3862, 3903, 3964, 3970, 3973, 3978, 4006, 2010, 4032, 4051, 4052, 4093, 4101, 4114, 4127, 4139, 4261, 4295, 4297, 4312, 4344, 4345, 4354, 4379, 4419, 4454, 4462, 4488, 4500, 4515, 4554, 4624, 4642, 4678, 4702, 4723, 4726, 4737, 4744, 4751, 4775, 4853, 4935, 4943, 4998, 5000, 5009, 5074, 5117, 5132, 5181, 5205, 2681, 1650, 2602 ]; for (uint i = 0; i < pigIds.length; i++) { isPigId[pigIds[i]] = true; } } event HuntRequested( address indexed sender, uint256 indexed id, uint256 sequenceNumber, RequestType indexed requestType, Wolf wolf ); event Hunted( address indexed sender, uint256 indexed id, uint256 sequenceNumber, Wolf wolf, HuntResult result ); event WolfAmbushed(uint256 indexed wolfId, uint256 timestamp); modifier ownsWolf(uint256 tokenId) { if (tokenId < wolvesContract.totalSupply()) { require( wolvesContract.ownerOf(tokenId) == msg.sender, "Sender does not own the wolf" ); } else { require( huntPartnersContract.ownerOf(tokenId) == msg.sender, "Sender does not own the partner" ); } _; } modifier cooldownPassed(uint256 id) { require( wolves[id].lastHuntedWindow != getCurrentWindow(), "This wolf is still in cooldown" ); _; } function freeHunt( uint256 id ) external payable ownsWolf(id) cooldownPassed(id) nonReentrant { require( lockedWolves[id].status == LockStatus.UNLOCKED, "Wolf is currently locked" ); require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(msg.value >= baseHuntPrice, "Not enough fees"); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.FreeHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } function batchFreeHunt( uint256[] calldata validWolfIds ) external payable nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting is disabled"); require(validWolfIds.length > 0, "No valid wolf IDs provided"); uint256 totalRequiredFee = baseHuntPrice * validWolfIds.length; require( msg.value >= totalRequiredFee, "Insufficient funds for all hunts" ); for (uint256 i = 0; i < validWolfIds.length; i++) { uint256 id = validWolfIds[i]; if (id < 5206) { require( wolvesContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } else { require( huntPartnersContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.FreeHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } } function paidHunt( uint256 id ) external payable ownsWolf(id) cooldownPassed(id) nonReentrant { require( lockedWolves[id].status == LockStatus.UNLOCKED, "Wolf is currently locked" ); require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(msg.value >= paidHuntPrice, "Not enough fees"); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.PaidHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } function batchPaidHunt( uint256[] calldata validWolfIds ) external payable nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting is disabled"); require(validWolfIds.length > 0, "No Valid Ids"); uint256 totalRequiredFee = paidHuntPrice * validWolfIds.length; require( msg.value >= totalRequiredFee, "Insufficient funds for all hunts" ); for (uint256 i = 0; i < validWolfIds.length; i++) { uint256 id = validWolfIds[i]; if (id < 5206) { require( wolvesContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } else { require( huntPartnersContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.PaidHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } } function yoloHunt( uint256 id ) external payable ownsWolf(id) cooldownPassed(id) nonReentrant { require( lockedWolves[id].status == LockStatus.UNLOCKED, "Wolf is currently locked" ); require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(msg.value >= yoloHuntPrice, "Not enough fees"); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.YoloHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } function batchYoloHunt( uint256[] calldata validWolfIds ) external payable nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting is disabled"); require(validWolfIds.length > 0, "No Valid Ids"); uint256 totalRequiredFee = yoloHuntPrice * validWolfIds.length; require( msg.value >= totalRequiredFee, "Insufficient funds for all hunts" ); for (uint256 i = 0; i < validWolfIds.length; i++) { uint256 id = validWolfIds[i]; if (id < 5206) { require( wolvesContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } else { require( huntPartnersContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); } require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.YoloHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } } function pigHunt( uint256 id ) external payable ownsWolf(id) cooldownPassed(id) nonReentrant { require( lockedWolves[id].status == LockStatus.UNLOCKED, "Wolf is currently locked" ); require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(isPigId[id], "This wolf is not a pig"); require(msg.value >= baseHuntPrice, "Not enough fees"); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.YoloHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } function batchPigHunt( uint256[] calldata validWolfIds ) external payable nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting is disabled"); require(validWolfIds.length > 0, "No Valid Ids"); uint256 totalRequiredFee = baseHuntPrice * validWolfIds.length; require( msg.value >= totalRequiredFee, "Insufficient funds for all hunts" ); for (uint256 i = 0; i < validWolfIds.length; i++) { uint256 id = validWolfIds[i]; require(isPigId[id], "This wolf is not a pig"); require( wolvesContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.YoloHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } } function nuclearHunt( uint256 id ) external payable ownsWolf(id) cooldownPassed(id) nonReentrant { require( lockedWolves[id].status == LockStatus.UNLOCKED, "Wolf is currently locked" ); require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(id >= 0 && id < 131, "Wolf is not nuclear"); require(msg.value >= baseHuntPrice, "Not enough fees"); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.NuclearHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } function batchNuclearHunt( uint256[] calldata validWolfIds ) external payable nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting is disabled"); require(validWolfIds.length > 0, "No Valid Ids"); uint256 totalRequiredFee = baseHuntPrice * validWolfIds.length; require( msg.value >= totalRequiredFee, "Insufficient funds for all hunts" ); for (uint256 i = 0; i < validWolfIds.length; i++) { uint256 id = validWolfIds[i]; require(id >= 0 && id < 131, "Wolf is not nuclear"); require( wolvesContract.ownerOf(id) == msg.sender && isWolfValid(id), "Wolf not owned by sender or not valid for hunting" ); require(ambushedIds[id] == 0, "Wolf is ambushed"); RequestType requestType = RequestType.NuclearHunt; _lockWolf(id, requestType); RandomRequest memory randomRequest = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); bytes memory encodedRequest = abi.encode(randomRequest); uint256 sequenceNumber = _requestRandomness(encodedRequest); pendingRandomRequests[sequenceNumber] = RandomRequest({ sender: msg.sender, id: id, timestamp: block.timestamp, requestType: requestType }); emit HuntRequested( msg.sender, id, sequenceNumber, requestType, wolves[id] ); } } function ambushWolf( uint256 wolfId ) external payable ownsWolf(wolfId) nonReentrant { require(huntStatus == HuntStatus.ENABLED, "Hunting disabled"); require(msg.value >= ambushPrice, "Not enough fees"); require(ambushedIds[wolfId] == 0, "Wolf is ambushed"); ambushedIds[wolfId] = block.timestamp; totalAmbushed++; emit WolfAmbushed(wolfId, block.timestamp); } function _fulfillRandomness( uint256 randomness, uint256 requestId, bytes memory extraData ) internal override { RandomRequest memory request = pendingRandomRequests[requestId]; require(request.sender != address(0), "Request not found"); Wolf storage wolf = wolves[request.id]; HuntChances memory chances = huntingChances[request.requestType]; uint randomValue = uint(randomness) % 10000; uint cumulativeChance = 0; uint[7] memory outcomes = [ chances.nothingFound, chances.outcome1, chances.outcome2, chances.outcome3, chances.outcome4, chances.outcome5, 10000 ]; HuntResult result = HuntResult.Outcome6; for (uint i = 0; i < outcomes.length; i++) { cumulativeChance += outcomes[i]; if (randomValue < cumulativeChance) { result = HuntResult(i); wolf.points += huntRewards[i]; break; } } wolf.lastHuntedWindow = getCurrentWindow(); wolf.timesHunted++; lockedWolves[request.id].status = LockStatus.UNLOCKED; delete pendingRandomRequests[requestId]; totalTimesHunted++; emit Hunted(request.sender, request.id, requestId, wolf, result); } function _lockWolf(uint256 id, RequestType requestType) internal { lockedWolves[id].status = LockStatus.LOCKED; lockedWolves[id].requestType = requestType; lockedWolves[id].timestamp = block.timestamp; } function isWolfValid(uint256 id) public view returns (bool) { return (lockedWolves[id].status == LockStatus.UNLOCKED && wolves[id].lastHuntedWindow != getCurrentWindow()); } function getCurrentWindow() public view returns (uint256) { return (block.timestamp - fullMoon) / cooldown; } function getWolf(uint256 id) public view returns (Wolf memory) { return wolves[id]; } function isAmbushed(uint256 id) public view returns (uint256) { return ambushedIds[id]; } function setPaidHuntPrice(uint256 _price) external onlyOwner { paidHuntPrice = _price; } function setYoloHuntPrice(uint256 _price) external onlyOwner { yoloHuntPrice = _price; } function setBaseHuntPrice(uint256 _price) external onlyOwner { baseHuntPrice = _price; } function setHuntingChances( RequestType _type, HuntChances calldata _chances ) external onlyOwner { huntingChances[_type] = _chances; } function setCooldown(uint256 _cooldown) external onlyOwner { require(_cooldown > 0, "Cooldown must be positive."); cooldown = _cooldown; } function setFullMoon(uint256 _fullMoon) external onlyOwner { require(_fullMoon > 0, "Invalid timestamp for fullMoon."); fullMoon = _fullMoon; } function setHuntRewards(uint[] calldata _rewards) external onlyOwner { require( _rewards.length == huntRewards.length, "Invalid rewards length" ); for (uint256 i = 0; i < _rewards.length; i++) { huntRewards[i] = _rewards[i]; } } function setWolvesContract(address _wolvesContract) external onlyOwner { require(_wolvesContract != address(0), "Invalid address"); wolvesContract = IWolves(_wolvesContract); } function setHuntPartnersContract( address _huntPartnersContract ) external onlyOwner { require(_huntPartnersContract != address(0), "Invalid address"); huntPartnersContract = IHuntPartners(_huntPartnersContract); } function setHuntStatus(uint256 status) external onlyOwner { huntStatus = HuntStatus(status); } function claimYield(address recipient, uint256 amount) external onlyOwner { BLAST.claimYield(address(this), recipient, amount); } function claimAllYield(address recipient) external onlyOwner { BLAST.claimAllYield(address(this), recipient); } function claimMyContractsGas(address recipient) external onlyOwner { BLAST.claimAllGas(address(this), recipient); } function unlockWolf(uint256 id) public nonReentrant { require( lockedWolves[id].status == LockStatus.LOCKED, "Wolf not locked" ); require( block.timestamp >= lockedWolves[id].timestamp + 10 minutes, "Lock period not expired" ); if (lockedWolves[id].requestType == RequestType.PaidHunt) { require(msg.sender != address(0), "INVALID_ADDRESS"); (bool success, ) = payable(msg.sender).call{value: paidHuntPrice}( "" ); require(success, "WITHDRAWAL_FAILED"); } if (lockedWolves[id].requestType == RequestType.YoloHunt) { require(msg.sender != address(0), "INVALID_ADDRESS"); (bool success, ) = payable(msg.sender).call{value: yoloHuntPrice}( "" ); require(success, "WITHDRAWAL_FAILED"); } lockedWolves[id].status = LockStatus.UNLOCKED; } function ownerUnlockWolf(uint256 id) public onlyOwner { require( lockedWolves[id].status == LockStatus.LOCKED, "Wolf not locked" ); require( block.timestamp >= lockedWolves[id].timestamp + 10 minutes, "Lock period not expired" ); lockedWolves[id].status = LockStatus.UNLOCKED; } function withdraw(address to) public onlyOwner nonReentrant { require(to != address(0), "INVALID_ADDRESS"); uint256 contractBalance = address(this).balance; (bool success, ) = payable(to).call{value: contractBalance}(""); require(success, "WITHDRAWAL_FAILED"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.21; enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } interface IBlast { // configure function configureContract( address contractAddress, YieldMode _yield, GasMode gasMode, address governor ) external; function configure( YieldMode _yield, GasMode gasMode, address governor ) external; // base configuration options function configureClaimableYield() external; function configureClaimableYieldOnBehalf(address contractAddress) external; function configureAutomaticYield() external; function configureAutomaticYieldOnBehalf(address contractAddress) external; function configureVoidYield() external; function configureVoidYieldOnBehalf(address contractAddress) external; function configureClaimableGas() external; function configureClaimableGasOnBehalf(address contractAddress) external; function configureVoidGas() external; function configureVoidGasOnBehalf(address contractAddress) external; function configureGovernor(address _governor) external; function configureGovernorOnBehalf( address _newGovernor, address contractAddress ) external; // claim yield function claimYield( address contractAddress, address recipientOfYield, uint256 amount ) external returns (uint256); function claimAllYield( address contractAddress, address recipientOfYield ) external returns (uint256); // claim gas function claimAllGas( address contractAddress, address recipientOfGas ) external returns (uint256); function claimGasAtMinClaimRate( address contractAddress, address recipientOfGas, uint256 minClaimRateBips ) external returns (uint256); function claimMaxGas( address contractAddress, address recipientOfGas ) external returns (uint256); function claimGas( address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume ) external returns (uint256); // read functions function readClaimableYield( address contractAddress ) external view returns (uint256); function readYieldConfiguration( address contractAddress ) external view returns (uint8); function readGasParams( address contractAddress ) external view returns ( uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode ); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.21; interface IBlastPoints { function configurePointsOperator(address operator) external; function configurePointsOperatorOnBehalf( address contractAddress, address operator ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; import {IGelatoVRFConsumer} from "./IGelatoVRFConsumer.sol"; /// @title GelatoVRFConsumerBase /// @dev This contract handles domain separation between consecutive randomness requests /// The contract has to be implemented by contracts willing to use the gelato VRF system. /// This base contract enhances the GelatoVRFConsumer by introducing request IDs and /// ensuring unique random values. /// for different request IDs by hashing them with the random number provided by drand. /// For security considerations, refer to the Gelato documentation. abstract contract GelatoVRFConsumerBase is IGelatoVRFConsumer { uint256 private constant _PERIOD = 3; uint256 private constant _GENESIS = 1692803367; bool[] public requestPending; mapping(uint256 => bytes32) public requestedHash; /// @notice Returns the address of the dedicated msg.sender. /// @dev The operator can be found on the Gelato dashboard after a VRF is deployed. /// @return Address of the operator. function _operator() internal view virtual returns (address); /// @notice User logic to handle the random value received. /// @param randomness The random number generated by Gelato VRF. /// @param requestId The ID for the randomness request. /// @param extraData Additional data from the randomness request. function _fulfillRandomness( uint256 randomness, uint256 requestId, bytes memory extraData ) internal virtual; /// @notice Requests randomness from the Gelato VRF. /// @dev The extraData parameter allows for additional data to be passed to /// the VRF, which is then forwarded to the callback. This is useful for /// request tracking purposes if requestId is not enough. /// @param extraData Additional data for the randomness request. /// @return requestId The ID for the randomness request. function _requestRandomness( bytes memory extraData ) internal returns (uint256 requestId) { requestId = uint256(requestPending.length); requestPending.push(); requestPending[requestId] = true; bytes memory data = abi.encode(requestId, extraData); uint256 round = _round(); bytes memory dataWithRound = abi.encode(round, data); bytes32 requestHash = keccak256(dataWithRound); requestedHash[requestId] = requestHash; emit RequestedRandomness(round, data); } /// @notice Callback function used by Gelato VRF to return the random number. /// The randomness is derived by hashing the provided randomness with the request ID. /// @param randomness The random number generated by Gelato VRF. /// @param dataWithRound Additional data provided by Gelato VRF containing request details. function fulfillRandomness( uint256 randomness, bytes calldata dataWithRound ) external { require(msg.sender == _operator(), "only operator"); (, bytes memory data) = abi.decode(dataWithRound, (uint256, bytes)); (uint256 requestId, bytes memory extraData) = abi.decode( data, (uint256, bytes) ); bytes32 requestHash = keccak256(dataWithRound); bool isValidRequestHash = requestHash == requestedHash[requestId]; require(requestPending[requestId], "request fulfilled or missing"); if (isValidRequestHash) { randomness = uint256( keccak256( abi.encode( randomness, address(this), block.chainid, requestId ) ) ); _fulfillRandomness(randomness, requestId, extraData); requestPending[requestId] = false; } } /// @notice Computes and returns the round number of drand to request randomness from. function _round() private view returns (uint256 round) { // solhint-disable-next-line not-rely-on-time uint256 elapsedFromGenesis = block.timestamp - _GENESIS; uint256 currentRound = (elapsedFromGenesis / _PERIOD) + 1; round = block.chainid == 1 ? currentRound + 4 : currentRound + 1; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; /// @title IGelatoVRFConsumer /// @dev Interface for consuming random number provided by Drand. /// @notice This interface allows contracts to receive a random number provided by Gelato VRF. interface IGelatoVRFConsumer { /// @notice Event emitted when a randomness request is made. /// @param data The round of randomness to request. /// @param data Additional data associated with the request. event RequestedRandomness(uint256 round, bytes data); /// @notice Callback function used by Gelato to return the random number. /// @dev The random number is fetched from one among many drand endpoints /// and passed back to this function like in a Gelato Web3 Function. /// @param randomness The random number generated by drand. /// @param data Additional data provided by Gelato VRF or the user, typically unused. function fulfillRandomness( uint256 randomness, bytes calldata data ) external; }
{ "optimizer": { "enabled": true, "runs": 1000 }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_wolvesContract","type":"address"},{"internalType":"address","name":"_huntPartnersContract","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"_blastAddress","type":"address"},{"internalType":"address","name":"_blastPointsAddress","type":"address"},{"internalType":"address","name":"_pointsOperator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sequenceNumber","type":"uint256"},{"indexed":true,"internalType":"enum RequestType","name":"requestType","type":"uint8"},{"components":[{"internalType":"uint256","name":"lastHuntedWindow","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"timesHunted","type":"uint256"}],"indexed":false,"internalType":"struct Wolf","name":"wolf","type":"tuple"}],"name":"HuntRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sequenceNumber","type":"uint256"},{"components":[{"internalType":"uint256","name":"lastHuntedWindow","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"timesHunted","type":"uint256"}],"indexed":false,"internalType":"struct Wolf","name":"wolf","type":"tuple"},{"indexed":false,"internalType":"enum HuntResult","name":"result","type":"uint8"}],"name":"Hunted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"RequestedRandomness","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"wolfId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"WolfAmbushed","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BlastPoints","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ambushPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wolfId","type":"uint256"}],"name":"ambushWolf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ambushedIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseHuntPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"validWolfIds","type":"uint256[]"}],"name":"batchFreeHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"validWolfIds","type":"uint256[]"}],"name":"batchNuclearHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"validWolfIds","type":"uint256[]"}],"name":"batchPaidHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"validWolfIds","type":"uint256[]"}],"name":"batchPigHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"validWolfIds","type":"uint256[]"}],"name":"batchYoloHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimAllYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimMyContractsGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"freeHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"randomness","type":"uint256"},{"internalType":"bytes","name":"dataWithRound","type":"bytes"}],"name":"fulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fullMoon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getWolf","outputs":[{"components":[{"internalType":"uint256","name":"lastHuntedWindow","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"timesHunted","type":"uint256"}],"internalType":"struct Wolf","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"huntPartnersContract","outputs":[{"internalType":"contract IHuntPartners","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"huntRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"huntStatus","outputs":[{"internalType":"enum HuntStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum RequestType","name":"","type":"uint8"}],"name":"huntingChances","outputs":[{"internalType":"uint256","name":"nothingFound","type":"uint256"},{"internalType":"uint256","name":"outcome1","type":"uint256"},{"internalType":"uint256","name":"outcome2","type":"uint256"},{"internalType":"uint256","name":"outcome3","type":"uint256"},{"internalType":"uint256","name":"outcome4","type":"uint256"},{"internalType":"uint256","name":"outcome5","type":"uint256"},{"internalType":"uint256","name":"outcome6","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isAmbushed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPigId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isWolfValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockedWolves","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum LockStatus","name":"status","type":"uint8"},{"internalType":"enum RequestType","name":"requestType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"nuclearHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerUnlockWolf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"paidHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"paidHuntPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingRandomRequests","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"enum RequestType","name":"requestType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"pigHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestedHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setBaseHuntPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldown","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fullMoon","type":"uint256"}],"name":"setFullMoon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_huntPartnersContract","type":"address"}],"name":"setHuntPartnersContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_rewards","type":"uint256[]"}],"name":"setHuntRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"status","type":"uint256"}],"name":"setHuntStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum RequestType","name":"_type","type":"uint8"},{"components":[{"internalType":"uint256","name":"nothingFound","type":"uint256"},{"internalType":"uint256","name":"outcome1","type":"uint256"},{"internalType":"uint256","name":"outcome2","type":"uint256"},{"internalType":"uint256","name":"outcome3","type":"uint256"},{"internalType":"uint256","name":"outcome4","type":"uint256"},{"internalType":"uint256","name":"outcome5","type":"uint256"},{"internalType":"uint256","name":"outcome6","type":"uint256"}],"internalType":"struct HuntChances","name":"_chances","type":"tuple"}],"name":"setHuntingChances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPaidHuntPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wolvesContract","type":"address"}],"name":"setWolvesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setYoloHuntPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAmbushed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTimesHunted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"unlockWolf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wolves","outputs":[{"internalType":"uint256","name":"lastHuntedWindow","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"timesHunted","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wolvesContract","outputs":[{"internalType":"contract IWolves","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"yoloHunt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"yoloHuntPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a08060405234610ca257600060c08261488a80380380916100218285610cd8565b833981010312610bd15761003482610cfb565b9161004160208201610cfb565b9061004e60408201610cfb565b61005a60608301610cfb565b9061007360a061006c60808601610cfb565b9401610cfb565b933315610c8e5760028054336001600160a01b03198216811790925560405191906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08980a3600160035586600455650b5e620f4800600555660470de4df82000600655660470de4df8200060075566038d7ea4c6800060085560ff196009541660095561a8c0600a5563665bb600600b5561011681610ca7565b600181526019602082015260326040820152606460608201526096608082015260fa60a08201526101f460c0820152601354600760135580600710610c40575b506013875260008051602061486a8339815191529790875b60078110610c28575050601480546001600160a01b039283166001600160a01b031991821617909155601580549383169382169390931790925560809290925260178054939092169216821790559293508392803b15610c0357839060046040518097819363784c3b3d60e11b83525af18015610c1d57610c08575b60175492935083926001600160a01b0316803b15610c0357838091600460405180948193634e606c4760e01b83525af1908115610bf8578491610be3575b5050601680546001600160a01b0319166001600160a01b0392909216918217905590813b15610bdf576040516336b91f2b60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610bd457610bbc575b505060405161029581610ca7565b610bb881526006602082016109c48152604083016106a48152606084016104b0815260808501906103e8825260a08601926101f4845260c087019460648652888052600e60205260408920975188555160018801555160028701555160038601555160048501555160058401555191015560405161031281610ca7565b6103e881526006602082016105dc815260408301610960815260608401610960815260808501906105dc825260a08601926103e8845260c087019460c8865260018952600e60205260408920975188555160018801555160028701555160038601555160048501555160058401555191015560405161039081610ca7565b6103e881526006602082016105dc815260408301610960815260608401610960815260808501906105dc825260a08601926103e8845260c087019460c8865260028952600e60205260408920975188555160018801555160028701555160038601555160048501555160058401555191015560405161040e81610ca7565b611bbc81526006602082018381526040830184815260608401858152608085019086825260a08601926109c4845260c0870194610190865260038952600e602052604089209751885551600188015551600287015551600386015551600485015551600584015551910155604051611840810181811060018060401b03821117610ba8576040526102148152610246602082015261026c604082015261029e60608201526102a760808201526102cd60a08201526102db60c08201526102df60e08201526102ee6101008201526102f26101208201526102f36101408201526102f46101608201526103086101808201526103376101a08201526103596101c082015261036f6101e082015261038b6102008201526103b56102208201526103e16102408201526104306102608201526104456102808201526104486102a08201526104506102c082015261045a6102e082015261046c61030082015261047861032082015261047d6103408201526104876103608201526104976103808201526104986103a08201526104a16103c08201526104c46103e08201526104d86104008201526104e56104208201526104ed6104408201526104f76104608201526105106104808201526105326104a08201526105356104c082015261053d6104e082015261055b61050082015261056a61052082015261057761054082015261057e6105608201526105af6105808201526105b16105a08201526105db6105c08201526105dc6105e08201526105e56106008201526105eb6106208201526105f36106408201526105f86106608201526105f96106808201526106056106a082015261061a6106c082015261063c6106e082015261064661070082015261065a61072082015261066b61074082015261066e61076082015261069b6107808201526106a26107a08201526106df6107c08201526107036107e082015261071a6108008201526107206108208201526107656108408201526107706108608201526107b86108808201526107ce6108a08201526107cf6108c08201526108486108e08201526108636109008201526108826109208201526108896109408201526108aa6109608201526108ce61098082015261091d6109a08201526109296109c08201526109666109e082015261096b610a0082015261098f610a20820152610992610a408201526109b0610a608201526109ba610a808201526109ce610aa0820152610a22610ac0820152610a2e610ae0820152610a36610b00820152610a3a610b20820152610a45610b40820152610a48610b60820152610a76610b80820152610a77610ba0820152610a78610bc0820152610a7c610be0820152610a7d610c00820152610a88610c20820152610aef610c40820152610b1b610c60820152610b48610c80820152610b54610ca0820152610b80610cc0820152610b92610ce0820152610bd5610d00820152610bf1610d20820152610bf8610d40820152610c03610d60820152610c06610d80820152610c16610da0820152610c21610dc0820152610c22610de0820152610c29610e00820152610c31610e20820152610c46610e40820152610c59610e60820152610c78610e80820152610c88610ea0820152610cf6610ec0820152610d09610ee0820152610d1d610f00820152610d30610f20820152610d52610f40820152610d7a610f60820152610d93610f80820152610db5610fa0820152610dcb610fc0820152610dde610fe0820152610dff611000820152610e37611020820152610e62611040820152610e63611060820152610e77611080820152610e966110a0820152610e9c6110c0820152610ec56110e0820152610ed6611100820152610ee0611120820152610f03611140820152610f16611160820152610f3f611180820152610f7c6111a0820152610f826111c0820152610f856111e0820152610f8a611200820152610fa66112208201526107da611240820152610fc0611260820152610fd3611280820152610fd46112a0820152610ffd6112c08201526110056112e082015261101261130082015261101f61132082015261102b6113408201526110a56113608201526110c76113808201526110c96113a08201526110d86113c08201526110f86113e08201526110f961140082015261110261142082015261111b61144082015261114361146082015261116661148082015261116e6114a08201526111886114c08201526111946114e08201526111a36115008201526111ca61152082015261121061154082015261122261156082015261124661158082015261125e6115a08201526112736115c08201526112766115e082015261128161160082015261128861162082015261128f6116408201526112a76116608201526112f56116808201526113476116a082015261134f6116c08201526113866116e08201526113886117008201526113916117208201526113d26117408201526113fd61176082015261140c61178082015261143d6117a08201526114556117c0820152610a796117e0820152610672611800820152610a2a611820820152815b60c2811015610b905760019061ffff8160051b8401511684526010602052604084208260ff1982541617905501610b5e565b604051613b5a9081610d1082396080518161115d0152f35b634e487b7160e01b83526041600452602483fd5b81610bc691610cd8565b610bd1578038610287565b80fd5b6040513d84823e3d90fd5b5050fd5b81610bed91610cd8565b610bdf578238610228565b6040513d86823e3d90fd5b505050fd5b91909281610c1591610cd8565b9082906101ea565b6040513d85823e3d90fd5b600190602061ffff845116930192818c01550161016e565b6013885260008051602061486a833981519152017f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0975b818110610c835750610156565b888155600101610c76565b631e4fbdf760e01b86526004869052602486fd5b600080fd5b60e081019081106001600160401b03821117610cc257604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b03821190821017610cc257604052565b51906001600160a01b0382168203610ca25756fe608080604052600436101561001357600080fd5b60003560e01c90816301ac4e561461304a5750806308154ca514612fdf5780630f67e7d514612fb557806311c3ea9d14612f745780631869ebda14612ef25780631cd36edb14612ed457806323cdc28d14612eb657806324715cc214612e73578063296ce5cb14612bd45780632cd14e0e14612bb65780632e6d934314612b8e5780633333510614612b705780633ec1d63014612afe5780634e62c20e14612a9e5780634fc3f41a14612a33578063507f86aa146129fb57806351cff8d9146129a357806352c8a185146126f8578063579620f8146125cd5780635bd5571c146123895780636046985d14612368578063672711201461231d578063673d633b146122ff5780636dcf151e146120d357806370e6824c14612059578063715018a614611ffe5780637460b27214611fdd57806375ce7fff14611fa0578063787a08a614611f825780637af77eaa14611f645780637e55bb8214611c99578063837d76741461093c578063886f690614611c1e5780638a34c85314611c005780638d2baff914611bb55780638da5cb5b14611b8e5780638f66453a14611b1b5780639090109e14611af457806397d7577614611acd5780639b60c9bb1461193c578063a8881dfd1461169e578063aa894b26146115fb578063b3f6b99a14611102578063b783bdb7146110d1578063beae631814610dc9578063c2d94aec14610d15578063c4f8f27b14610ce9578063c8a3bc3d14610cc2578063cd64e18214610c98578063d6e18b0114610c41578063dfbc852d14610968578063ebd9af841461093c578063f2fde38b1461089a578063f710118214610879578063fa76338c146107dd578063fb6be44a146106035763fcde5ca11461029257600080fd5b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f576000916105cc575b5082101561055b576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f5761031b91600091610520575b506001600160a01b031633146132a8565b80600052600c60205261034c60406000205461034561033c600b5442613176565b600a5490613183565b14156132f3565b610354613979565b80600052600d60205261037b60ff600160406000200154166103758161316c565b1561333e565b610395600160ff6009541661038f8161316c565b14613389565b6103a36005543410156133d4565b8060005260116020526103bb6040600020541561341f565b6000818152600d602052604090206001818101805461ffff1916909117905542905561042a6104176104256040516103f2816131a3565b338152846020820152426040820152600060608201526040519283916020830161346a565b03601f19810183528261320d565b6139e7565b60405191610437836131a3565b338352600360208401938285526040810142815260608201956000875285600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501925191600483101561050a57600093849360ff80198354169116179055818352600c6020526104dc604084206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4600160035580f35b634e487b7160e01b600052602160045260246000fd5b610542915060203d602011610548575b61053a818361320d565b81019061323e565b3861030a565b503d610530565b6040513d6000823e3d90fd5b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576105a8916000916105ad575b506001600160a01b0316331461325d565b61031b565b6105c6915060203d6020116105485761053a818361320d565b38610597565b90506020813d6020116105fb575b816105e76020938361320d565b810103126105f65751386102d2565b600080fd5b3d91506105da565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f576000916107ab575b5082101561073b576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f5761068b9160009161071c57506001600160a01b031633146132a8565b610693613979565b6106a7600160ff6009541661038f8161316c565b6106b56008543410156133d4565b8060005260116020526106cd6040600020541561341f565b806000526011602052426040600020556106e8601254613928565b6012557fd5408323c5a9a8db6d94135cd1218ada92c6e2e5afbb9b412a703a8398f021096020604051428152a26001600355005b610735915060203d6020116105485761053a818361320d565b8361030a565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576107879160009161078c57506001600160a01b0316331461325d565b61068b565b6107a5915060203d6020116105485761053a818361320d565b83610597565b90506020813d6020116107d5575b816107c66020938361320d565b810103126105f6575183610643565b3d91506107b9565b346105f65760203660031901126105f6576004356107f9613937565b80600052600d602052610821600160ff81604060002001541661081b8161316c565b14613620565b80600052600d60205260406000205461025881018091116108635761084890421015613678565b6000908152600d60205260409020600101805460ff19169055005b634e487b7160e01b600052601160045260246000fd5b346105f65760203660031901126105f657610892613937565b600435600755005b346105f65760203660031901126105f6576001600160a01b036108bb61306e565b6108c3613937565b16801561090d576001600160a01b03600254826001600160a01b0319821617600255167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346105f65760203660031901126105f65760043560005260116020526020604060002054604051908152f35b610971366130db565b610979613979565b610993600160ff6009541661098d8161316c565b146136c3565b61099e81151561370e565b6109b56109ad82600654613759565b34101561376c565b60005b8181106109c6576001600355005b6109d18183856137b7565b3590611456821015610bb757602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610b99575b506001600160a01b0316331480610b85575b610a30906137c7565b816000526011602052610a486040600020541561341f565b6000828152600d6020526040902060018101805461ffff1916610101179055429055610aa4610417610425604051610a7f816131a3565b338152856020820152426040820152600160608201526040519283916020830161346a565b9160405190610ab2826131a3565b338252600360208301928284526040810142815260608201946001865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a57610b596040600196879560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4016109b8565b50610a30610b92836134a6565b9050610a27565b610bb1915060203d81116105485761053a818361320d565b85610a15565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610c23575b506001600160a01b0316331480610c0f575b610c0a906137c7565b610a30565b50610c0a610c1c836134a6565b9050610c01565b610c3b915060203d81116105485761053a818361320d565b85610bef565b346105f65760203660031901126105f657600435600052600d60205260606040600020610c966001825492015460ff8116604051938452610c818161316c565b602084015260ff604084019160081c1661309d565bf35b346105f65760003660031901126105f657602060ff6009541660405190610cbe8161316c565b8152f35b346105f65760003660031901126105f65760206001600160a01b0360165416604051908152f35b346105f65760203660031901126105f65760043560005260016020526020604060002054604051908152f35b346105f65760203660031901126105f65760006020610d8f610d3561306e565b610d3d613937565b6017546040517f860043b60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0392831660248201529485939190921691839182906044820190565b03925af1801561054f57610d9f57005b610dc09060203d602011610dc2575b610db8818361320d565b81019061322f565b005b503d610dae565b610dd2366130db565b610dda613979565b610dee600160ff6009541661098d8161316c565b801561108d57610e036109ad82600554613759565b60005b818110610e14576001600355005b610e1f8183856137b7565b359061145682101561100357602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610fe5575b506001600160a01b0316331480610fd1575b610e7e906137c7565b816000526011602052610e966040600020541561341f565b6000828152600d602052604090206001818101805461ffff19169091179055429055610ef2610417610425604051610ecd816131a3565b338152856020820152426040820152600060608201526040519283916020830161346a565b60405192610eff846131a3565b338452600360208501948286526040810142815260608201966000885285600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501935191600483101561050a5760019460009360ff80198354169116179055818352600c602052610fa5604084206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401610e06565b50610e7e610fde836134a6565b9050610e75565b610ffd915060203d81116105485761053a818361320d565b85610e63565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f5760009161106f575b506001600160a01b031633148061105b575b611056906137c7565b610e7e565b50611056611068836134a6565b905061104d565b611087915060203d81116105485761053a818361320d565b8561103b565b606460405162461bcd60e51b815260206004820152601a60248201527f4e6f2076616c696420776f6c66204944732070726f76696465640000000000006044820152fd5b346105f65760203660031901126105f6576004356000526010602052602060ff604060002054166040519015158152f35b346105f65760403660031901126105f65760243567ffffffffffffffff81116105f657366023820112156105f657806004013567ffffffffffffffff81116105f65780820160248101903682116105f6576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036115b757604090849003126105f657604483013567ffffffffffffffff81116105f657830190806043830112156105f65781604460246111c294013591016138ce565b918251830191604084602085019403126105f65760208401519360408101519067ffffffffffffffff82116105f657019280603f850112156105f657602084015161120c8161353e565b9161121a604051938461320d565b818352604086830101116105f657611246946040602061123c94019101613905565b60243692016138ce565b602081519101208160005260016020526040600020541460ff6112688361312f565b90549060031b1c16156115735761127b57005b60405160208101906004358252306040820152466060820152826080820152608081526112a960a08261320d565b5190209080600052600f6020526040600020604051906112c8826131a3565b6001600160a01b03815416825260ff60036001830154926020850193845260028101546040860152015416916060810192600481101561050a5783526001600160a01b038151161561152f578151600052600c60205260406000209251600481101561050a5761133790613084565b9460405190611345826131f1565b86548252600187015496602083019788526002810154916040840192835260038201546060850190815261271060048401549260808701938452600660058601549560a08901968752015460c0880152069360009a604051966113a7886131f1565b5187525160208701525160408601525160608501525160808401525160a083015261271060c083015260069660005b600781101561151d576113f26000928260051b8601519061366b565b9182841061140357506001016113d6565b92509750506001600160a01b039291505061141d866130aa565b90549060031b1c6114336001860191825461366b565b90555b61144561033c600b5442613176565b8455600284016114558154613928565b90558251600052600d602052600160406000200160ff19815416905584600052600f6020526000600360408220828155826001820155826002820155015561149e600454613928565b60045551169051916114cf604051918583526020830190600260409180548452600181015460208501520154910152565b600785101561050a5760a08161150b9660807f0abcf5161f130a8d1c7d3620dff461bca2d8b723b884877d378d75f335ef4872940152a361312f565b60ff82549160031b1b19169055600080f35b505050506001600160a01b0390611436565b606460405162461bcd60e51b815260206004820152601160248201527f52657175657374206e6f7420666f756e640000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601c60248201527f726571756573742066756c66696c6c6564206f72206d697373696e67000000006044820152fd5b606460405162461bcd60e51b815260206004820152600d60248201527f6f6e6c79206f70657261746f72000000000000000000000000000000000000006044820152fd5b346105f657611609366130db565b611611613937565b601354810361165a5760005b81811061162657005b8061163460019284866137b7565b3561163e826130aa565b819291549060031b91821b91600019901b19161790550161161d565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642072657761726473206c656e677468000000000000000000006044820152fd5b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f5760009161190a575b508210156118b9576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576117269160009161071c57506001600160a01b031633146132a8565b80600052600c60205261174760406000205461034561033c600b5442613176565b61174f613979565b80600052600d60205261177060ff600160406000200154166103758161316c565b611784600160ff6009541661038f8161316c565b6117926007543410156133d4565b8060005260116020526117aa6040600020541561341f565b6000818152600d6020526040902060018101805461ffff19166103011790554290556118066104176104256040516117e1816131a3565b338152846020820152426040820152600360608201526040519283916020830161346a565b9060405190611814826131a3565b3382526003602083019282845260408101428152606082019483865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760039260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576119059160009161078c57506001600160a01b0316331461325d565b611726565b90506020813d602011611934575b816119256020938361320d565b810103126105f65751836116de565b3d9150611918565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091611a9b575b50821015611a4a576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576119c49160009161071c57506001600160a01b031633146132a8565b80600052600c6020526119e560406000205461034561033c600b5442613176565b6119ed613979565b80600052600d602052611a0e60ff600160406000200154166103758161316c565b611a22600160ff6009541661038f8161316c565b806000526010602052611a3c60ff60406000205416613883565b6117926005543410156133d4565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f57611a969160009161078c57506001600160a01b0316331461325d565b6119c4565b90506020813d602011611ac5575b81611ab66020938361320d565b810103126105f657518361197c565b3d9150611aa9565b346105f65760003660031901126105f65760206001600160a01b0360175416604051908152f35b346105f65760003660031901126105f65760206001600160a01b0360155416604051908152f35b346105f6576101003660031901126105f65760043560048110156105f65760e03660231901126105f657611b5690611b51613937565b613084565b602435815560443560018201556064356002820155608435600382015560a435600482015560c435600582015560e435600690910155005b346105f65760003660031901126105f65760206001600160a01b0360025416604051908152f35b346105f65760203660031901126105f6576001600160a01b03611bd661306e565b611bde613937565b16611bea811515613838565b6001600160a01b03196014541617601455600080f35b346105f65760003660031901126105f6576020600754604051908152f35b346105f65760203660031901126105f657600060408051611c3e816131d5565b8281528260208201520152600435600052600c60205260606040600020604051611c67816131d5565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b611ca2366130db565b611caa613979565b611cbe600160ff6009541661098d8161316c565b611cc981151561370e565b611cd86109ad82600754613759565b60005b818110611ce9576001600355005b611cf48183856137b7565b3590611456821015611eda57602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091611ebc575b506001600160a01b0316331480611ea8575b611d53906137c7565b816000526011602052611d6b6040600020541561341f565b6000828152600d6020526040902060018101805461ffff1916610301179055429055611dc7610417610425604051611da2816131a3565b338152856020820152426040820152600360608201526040519283916020830161346a565b9160405190611dd5826131a3565b3382526003602083019282845260408101428152606082019483865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a57611e7c604060019660039560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401611cdb565b50611d53611eb5836134a6565b9050611d4a565b611ed4915060203d81116105485761053a818361320d565b85611d38565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091611f46575b506001600160a01b0316331480611f32575b611f2d906137c7565b611d53565b50611f2d611f3f836134a6565b9050611f24565b611f5e915060203d81116105485761053a818361320d565b85611f12565b346105f65760003660031901126105f6576020601254604051908152f35b346105f65760003660031901126105f6576020600a54604051908152f35b346105f65760203660031901126105f6576004356000548110156105f65760ff611fcb60209261312f565b90549060031b1c166040519015158152f35b346105f65760203660031901126105f657611ff6613937565b600435600655005b346105f65760003660031901126105f657612017613937565b60006001600160a01b036002546001600160a01b03198116600255167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346105f65760203660031901126105f65760006020610d8f61207961306e565b612081613937565b6017546040517f954fa5ee0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0392831660248201529485939190921691839182906044820190565b6120dc366130db565b6120e4613979565b6120f8600160ff6009541661098d8161316c565b61210381151561370e565b6121126109ad82600554613759565b60005b818110612123576001600355005b61212e8183856137b7565b359081600052601060205261214a60ff60406000205416613883565b602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f576000916122e1575b506001600160a01b03163314806122cd575b61219d906137c7565b8160005260116020526121b56040600020541561341f565b6000828152600d6020526040902060018101805461ffff19166103011790554290556121ec610417610425604051611da2816131a3565b91604051906121fa826131a3565b3382526003602083019282845260408101428152606082019483865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a576122a1604060019660039560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401612115565b5061219d6122da836134a6565b9050612194565b6122f9915060203d81116105485761053a818361320d565b85612182565b346105f65760003660031901126105f6576020600554604051908152f35b346105f65760203660031901126105f6576001600160a01b0361233e61306e565b612346613937565b16612352811515613838565b6001600160a01b03196015541617601555600080f35b346105f65760203660031901126105f657612381613937565b600435600555005b612392366130db565b61239a613979565b6123ae600160ff6009541661098d8161316c565b6123b981151561370e565b6123c86109ad82600554613759565b60005b8181106123d9576001600355005b6123e48183856137b7565b35906123f2608383106135d5565b602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f576000916125af575b506001600160a01b031633148061259b575b612445906137c7565b81600052601160205261245d6040600020541561341f565b6000828152600d6020526040902060018101805461ffff19166102011790554290556124b9610417610425604051612494816131a3565b338152856020820152426040820152600260608201526040519283916020830161346a565b91604051906124c7826131a3565b338252600360208301928284526040810142815260608201946002865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a5761256f604060019660029560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4016123cb565b506124456125a8836134a6565b905061243c565b6125c7915060203d81116105485761053a818361320d565b8561242a565b346105f65760203660031901126105f6576004356125e9613979565b80600052600d60205261260b600160ff81604060002001541661081b8161316c565b80600052600d60205260406000205461025881018091116108635761263290421015613678565b80600052600d60205260ff60016040600020015460081c16600481101561050a576001146126d2575b80600052600d60205260ff60016040600020015460081c16600481101561050a576003146126a6575b600052600d602052600160406000200160ff1981541690556001600355600080f35b6126b13315156134f3565b6126cd6000808080600754335af16126c761355a565b5061358a565b612684565b6126dd3315156134f3565b6126f36000808080600654335af16126c761355a565b61265b565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091612971575b50821015612920576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576127809160009161071c57506001600160a01b031633146132a8565b80600052600c6020526127a160406000205461034561033c600b5442613176565b6127a9613979565b80600052600d6020526127ca60ff600160406000200154166103758161316c565b6127de600160ff6009541661038f8161316c565b6127ea608382106135d5565b6127f86005543410156133d4565b8060005260116020526128106040600020541561341f565b6000818152600d6020526040902060018101805461ffff191661020117905542905561286c610417610425604051612847816131a3565b338152846020820152426040820152600260608201526040519283916020830161346a565b906040519061287a826131a3565b338252600360208301928284526040810142815260608201946002865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760029260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f5761296c9160009161078c57506001600160a01b0316331461325d565b612780565b90506020813d60201161299b575b8161298c6020938361320d565b810103126105f6575183612738565b3d915061297f565b346105f65760203660031901126105f6576129f460008080806001600160a01b036129cc61306e565b6129d4613937565b6129dc613979565b166129e88115156134f3565b47905af16126c761355a565b6001600355005b346105f65760203660031901126105f6576004356013548110156105f657612a246020916130aa565b90549060031b1c604051908152f35b346105f65760203660031901126105f657600435612a4f613937565b8015612a5a57600a55005b606460405162461bcd60e51b815260206004820152601a60248201527f436f6f6c646f776e206d75737420626520706f7369746976652e0000000000006044820152fd5b346105f65760203660031901126105f657600435600052600f60205260806040600020610c966001600160a01b038254169160018101549060ff60036002830154920154169160405194855260208501526040840152606083019061309d565b346105f65760203660031901126105f65760043560048110156105f657612b2660e091613084565b805490600181015490600281015460038201546004830154916006600585015494015494604051968752602087015260408601526060850152608084015260a083015260c0820152f35b346105f65760003660031901126105f6576020600854604051908152f35b346105f65760203660031901126105f6576020612bac6004356134a6565b6040519015158152f35b346105f65760003660031901126105f6576020600654604051908152f35b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091612e41575b50821015612df0576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f57612c5c9160009161071c57506001600160a01b031633146132a8565b80600052600c602052612c7d60406000205461034561033c600b5442613176565b612c85613979565b80600052600d602052612ca660ff600160406000200154166103758161316c565b612cba600160ff6009541661038f8161316c565b612cc86006543410156133d4565b806000526011602052612ce06040600020541561341f565b6000818152600d6020526040902060018101805461ffff1916610101179055429055612d3c610417610425604051612d17816131a3565b338152846020820152426040820152600160608201526040519283916020830161346a565b9060405190612d4a826131a3565b338252600360208301928284526040810142815260608201946001865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760019260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f57612e3c9160009161078c57506001600160a01b0316331461325d565b612c5c565b90506020813d602011612e6b575b81612e5c6020938361320d565b810103126105f6575183612c14565b3d9150612e4f565b346105f65760203660031901126105f657600435600052600c60205260606040600020805490600260018201549101549060405192835260208301526040820152f35b346105f65760003660031901126105f6576020600454604051908152f35b346105f65760003660031901126105f6576020600b54604051908152f35b346105f65760403660031901126105f657612f0b61306e565b612f13613937565b60206001600160a01b036064816017541693600060405195869485937ff971966200000000000000000000000000000000000000000000000000000000855230600486015216602484015260243560448401525af1801561054f57610d9f57005b346105f65760203660031901126105f657600435612f90613937565b612f998161316c565b612fa28161316c565b60ff801960095416911617600955600080f35b346105f65760003660031901126105f6576020612fd761033c600b5442613176565b604051908152f35b346105f65760203660031901126105f657600435612ffb613937565b801561300657600b55005b606460405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642074696d657374616d7020666f722066756c6c4d6f6f6e2e006044820152fd5b346105f65760003660031901126105f6576020906001600160a01b03601454168152f35b600435906001600160a01b03821682036105f657565b600481101561050a57600052600e602052604060002090565b90600482101561050a5752565b6013548110156130c557601360005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9060206003198301126105f65760043567ffffffffffffffff81116105f657826023820112156105f65780600401359267ffffffffffffffff84116105f65760248460051b830101116105f6576024019190565b906000548210156130c55760008052600582901c7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630191601f1690565b6002111561050a57565b9190820391821161086357565b811561318d570490565b634e487b7160e01b600052601260045260246000fd5b6080810190811067ffffffffffffffff8211176131bf57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176131bf57604052565b60e0810190811067ffffffffffffffff8211176131bf57604052565b90601f8019910116810190811067ffffffffffffffff8211176131bf57604052565b908160209103126105f6575190565b908160209103126105f657516001600160a01b03811681036105f65790565b1561326457565b606460405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f74206f776e2074686520706172746e6572006044820152fd5b156132af57565b606460405162461bcd60e51b815260206004820152601c60248201527f53656e64657220646f6573206e6f74206f776e2074686520776f6c66000000006044820152fd5b156132fa57565b606460405162461bcd60e51b815260206004820152601e60248201527f5468697320776f6c66206973207374696c6c20696e20636f6f6c646f776e00006044820152fd5b1561334557565b606460405162461bcd60e51b815260206004820152601860248201527f576f6c662069732063757272656e746c79206c6f636b656400000000000000006044820152fd5b1561339057565b606460405162461bcd60e51b815260206004820152601060248201527f48756e74696e672064697361626c6564000000000000000000000000000000006044820152fd5b156133db57565b606460405162461bcd60e51b815260206004820152600f60248201527f4e6f7420656e6f756768206665657300000000000000000000000000000000006044820152fd5b1561342657565b606460405162461bcd60e51b815260206004820152601060248201527f576f6c6620697320616d627573686564000000000000000000000000000000006044820152fd5b6134a49092919260608060808301956001600160a01b0381511684526020810151602085015260408101516040850152015191019061309d565b565b80600052600d60205260ff600160406000200154166134c48161316c565b1590816134cf575090565b9050600052600c6020526040600020546134ee61033c600b5442613176565b141590565b156134fa57565b606460405162461bcd60e51b815260206004820152600f60248201527f494e56414c49445f4144445245535300000000000000000000000000000000006044820152fd5b67ffffffffffffffff81116131bf57601f01601f191660200190565b3d15613585573d9061356b8261353e565b91613579604051938461320d565b82523d6000602084013e565b606090565b1561359157565b606460405162461bcd60e51b815260206004820152601160248201527f5749544844524157414c5f4641494c45440000000000000000000000000000006044820152fd5b156135dc57565b606460405162461bcd60e51b815260206004820152601360248201527f576f6c66206973206e6f74206e75636c656172000000000000000000000000006044820152fd5b1561362757565b606460405162461bcd60e51b815260206004820152600f60248201527f576f6c66206e6f74206c6f636b656400000000000000000000000000000000006044820152fd5b9190820180921161086357565b1561367f57565b606460405162461bcd60e51b815260206004820152601760248201527f4c6f636b20706572696f64206e6f7420657870697265640000000000000000006044820152fd5b156136ca57565b606460405162461bcd60e51b815260206004820152601360248201527f48756e74696e672069732064697361626c6564000000000000000000000000006044820152fd5b1561371557565b606460405162461bcd60e51b815260206004820152600c60248201527f4e6f2056616c69642049647300000000000000000000000000000000000000006044820152fd5b8181029291811591840414171561086357565b1561377357565b606460405162461bcd60e51b815260206004820152602060248201527f496e73756666696369656e742066756e647320666f7220616c6c2068756e74736044820152fd5b91908110156130c55760051b0190565b156137ce57565b608460405162461bcd60e51b815260206004820152603160248201527f576f6c66206e6f74206f776e65642062792073656e646572206f72206e6f742060448201527f76616c696420666f722068756e74696e670000000000000000000000000000006064820152fd5b1561383f57565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b1561388a57565b606460405162461bcd60e51b815260206004820152601660248201527f5468697320776f6c66206973206e6f74206120706967000000000000000000006044820152fd5b9291926138da8261353e565b916138e8604051938461320d565b8294818452818301116105f6578281602093846000960137010152565b60005b8381106139185750506000910152565b8181015183820152602001613908565b60001981146108635760010190565b6001600160a01b0360025416330361394b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b60026003541461398a576002600355565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b90916060928252604060208301526139db8151809281604086015260208686019101613905565b601f01601f1916010190565b9060005491680100000000000000008310156131bf57613a436104179160018501600055613a148561312f565b5050613a1f8561312f565b81549060031b9060ff6001831b921b191617905560405192839186602084016139b4565b6364e62126194201428111610863576003900490600182019182811161086357600046600103613ad85750600501809211610863577fd91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d202915b6040516020810190613ab2816104178686866139b4565b519020856000526001602052604060002055613ad3604051928392836139b4565b0390a1565b9060029093929301809211613b105750907fd91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d20291613a9b565b80634e487b7160e01b602492526011600452fdfea2646970667358221220e009267e4915a057620d43a314687d1d778b5906def3503be4717a622dd77d4364736f6c634300081a003366de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900000000000000000000000009b2ced8219bcf64cccaf69ed4c56aaf90e958a0b00000000000000000000000026dd746561e82c655f365df796fd33eaeea39652000000000000000000000000f3354ca7fca04524ced537a3ec016e67f8f32dc200000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800000000000000000000000000b7501d1ef03b17076a814accf03d47a5e4af1c98
Deployed Bytecode
0x608080604052600436101561001357600080fd5b60003560e01c90816301ac4e561461304a5750806308154ca514612fdf5780630f67e7d514612fb557806311c3ea9d14612f745780631869ebda14612ef25780631cd36edb14612ed457806323cdc28d14612eb657806324715cc214612e73578063296ce5cb14612bd45780632cd14e0e14612bb65780632e6d934314612b8e5780633333510614612b705780633ec1d63014612afe5780634e62c20e14612a9e5780634fc3f41a14612a33578063507f86aa146129fb57806351cff8d9146129a357806352c8a185146126f8578063579620f8146125cd5780635bd5571c146123895780636046985d14612368578063672711201461231d578063673d633b146122ff5780636dcf151e146120d357806370e6824c14612059578063715018a614611ffe5780637460b27214611fdd57806375ce7fff14611fa0578063787a08a614611f825780637af77eaa14611f645780637e55bb8214611c99578063837d76741461093c578063886f690614611c1e5780638a34c85314611c005780638d2baff914611bb55780638da5cb5b14611b8e5780638f66453a14611b1b5780639090109e14611af457806397d7577614611acd5780639b60c9bb1461193c578063a8881dfd1461169e578063aa894b26146115fb578063b3f6b99a14611102578063b783bdb7146110d1578063beae631814610dc9578063c2d94aec14610d15578063c4f8f27b14610ce9578063c8a3bc3d14610cc2578063cd64e18214610c98578063d6e18b0114610c41578063dfbc852d14610968578063ebd9af841461093c578063f2fde38b1461089a578063f710118214610879578063fa76338c146107dd578063fb6be44a146106035763fcde5ca11461029257600080fd5b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f576000916105cc575b5082101561055b576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f5761031b91600091610520575b506001600160a01b031633146132a8565b80600052600c60205261034c60406000205461034561033c600b5442613176565b600a5490613183565b14156132f3565b610354613979565b80600052600d60205261037b60ff600160406000200154166103758161316c565b1561333e565b610395600160ff6009541661038f8161316c565b14613389565b6103a36005543410156133d4565b8060005260116020526103bb6040600020541561341f565b6000818152600d602052604090206001818101805461ffff1916909117905542905561042a6104176104256040516103f2816131a3565b338152846020820152426040820152600060608201526040519283916020830161346a565b03601f19810183528261320d565b6139e7565b60405191610437836131a3565b338352600360208401938285526040810142815260608201956000875285600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501925191600483101561050a57600093849360ff80198354169116179055818352600c6020526104dc604084206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4600160035580f35b634e487b7160e01b600052602160045260246000fd5b610542915060203d602011610548575b61053a818361320d565b81019061323e565b3861030a565b503d610530565b6040513d6000823e3d90fd5b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576105a8916000916105ad575b506001600160a01b0316331461325d565b61031b565b6105c6915060203d6020116105485761053a818361320d565b38610597565b90506020813d6020116105fb575b816105e76020938361320d565b810103126105f65751386102d2565b600080fd5b3d91506105da565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f576000916107ab575b5082101561073b576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f5761068b9160009161071c57506001600160a01b031633146132a8565b610693613979565b6106a7600160ff6009541661038f8161316c565b6106b56008543410156133d4565b8060005260116020526106cd6040600020541561341f565b806000526011602052426040600020556106e8601254613928565b6012557fd5408323c5a9a8db6d94135cd1218ada92c6e2e5afbb9b412a703a8398f021096020604051428152a26001600355005b610735915060203d6020116105485761053a818361320d565b8361030a565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576107879160009161078c57506001600160a01b0316331461325d565b61068b565b6107a5915060203d6020116105485761053a818361320d565b83610597565b90506020813d6020116107d5575b816107c66020938361320d565b810103126105f6575183610643565b3d91506107b9565b346105f65760203660031901126105f6576004356107f9613937565b80600052600d602052610821600160ff81604060002001541661081b8161316c565b14613620565b80600052600d60205260406000205461025881018091116108635761084890421015613678565b6000908152600d60205260409020600101805460ff19169055005b634e487b7160e01b600052601160045260246000fd5b346105f65760203660031901126105f657610892613937565b600435600755005b346105f65760203660031901126105f6576001600160a01b036108bb61306e565b6108c3613937565b16801561090d576001600160a01b03600254826001600160a01b0319821617600255167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b7f1e4fbdf700000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346105f65760203660031901126105f65760043560005260116020526020604060002054604051908152f35b610971366130db565b610979613979565b610993600160ff6009541661098d8161316c565b146136c3565b61099e81151561370e565b6109b56109ad82600654613759565b34101561376c565b60005b8181106109c6576001600355005b6109d18183856137b7565b3590611456821015610bb757602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610b99575b506001600160a01b0316331480610b85575b610a30906137c7565b816000526011602052610a486040600020541561341f565b6000828152600d6020526040902060018101805461ffff1916610101179055429055610aa4610417610425604051610a7f816131a3565b338152856020820152426040820152600160608201526040519283916020830161346a565b9160405190610ab2826131a3565b338252600360208301928284526040810142815260608201946001865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a57610b596040600196879560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4016109b8565b50610a30610b92836134a6565b9050610a27565b610bb1915060203d81116105485761053a818361320d565b85610a15565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610c23575b506001600160a01b0316331480610c0f575b610c0a906137c7565b610a30565b50610c0a610c1c836134a6565b9050610c01565b610c3b915060203d81116105485761053a818361320d565b85610bef565b346105f65760203660031901126105f657600435600052600d60205260606040600020610c966001825492015460ff8116604051938452610c818161316c565b602084015260ff604084019160081c1661309d565bf35b346105f65760003660031901126105f657602060ff6009541660405190610cbe8161316c565b8152f35b346105f65760003660031901126105f65760206001600160a01b0360165416604051908152f35b346105f65760203660031901126105f65760043560005260016020526020604060002054604051908152f35b346105f65760203660031901126105f65760006020610d8f610d3561306e565b610d3d613937565b6017546040517f860043b60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0392831660248201529485939190921691839182906044820190565b03925af1801561054f57610d9f57005b610dc09060203d602011610dc2575b610db8818361320d565b81019061322f565b005b503d610dae565b610dd2366130db565b610dda613979565b610dee600160ff6009541661098d8161316c565b801561108d57610e036109ad82600554613759565b60005b818110610e14576001600355005b610e1f8183856137b7565b359061145682101561100357602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091610fe5575b506001600160a01b0316331480610fd1575b610e7e906137c7565b816000526011602052610e966040600020541561341f565b6000828152600d602052604090206001818101805461ffff19169091179055429055610ef2610417610425604051610ecd816131a3565b338152856020820152426040820152600060608201526040519283916020830161346a565b60405192610eff846131a3565b338452600360208501948286526040810142815260608201966000885285600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501935191600483101561050a5760019460009360ff80198354169116179055818352600c602052610fa5604084206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401610e06565b50610e7e610fde836134a6565b9050610e75565b610ffd915060203d81116105485761053a818361320d565b85610e63565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f5760009161106f575b506001600160a01b031633148061105b575b611056906137c7565b610e7e565b50611056611068836134a6565b905061104d565b611087915060203d81116105485761053a818361320d565b8561103b565b606460405162461bcd60e51b815260206004820152601a60248201527f4e6f2076616c696420776f6c66204944732070726f76696465640000000000006044820152fd5b346105f65760203660031901126105f6576004356000526010602052602060ff604060002054166040519015158152f35b346105f65760403660031901126105f65760243567ffffffffffffffff81116105f657366023820112156105f657806004013567ffffffffffffffff81116105f65780820160248101903682116105f6576001600160a01b037f000000000000000000000000f3354ca7fca04524ced537a3ec016e67f8f32dc21633036115b757604090849003126105f657604483013567ffffffffffffffff81116105f657830190806043830112156105f65781604460246111c294013591016138ce565b918251830191604084602085019403126105f65760208401519360408101519067ffffffffffffffff82116105f657019280603f850112156105f657602084015161120c8161353e565b9161121a604051938461320d565b818352604086830101116105f657611246946040602061123c94019101613905565b60243692016138ce565b602081519101208160005260016020526040600020541460ff6112688361312f565b90549060031b1c16156115735761127b57005b60405160208101906004358252306040820152466060820152826080820152608081526112a960a08261320d565b5190209080600052600f6020526040600020604051906112c8826131a3565b6001600160a01b03815416825260ff60036001830154926020850193845260028101546040860152015416916060810192600481101561050a5783526001600160a01b038151161561152f578151600052600c60205260406000209251600481101561050a5761133790613084565b9460405190611345826131f1565b86548252600187015496602083019788526002810154916040840192835260038201546060850190815261271060048401549260808701938452600660058601549560a08901968752015460c0880152069360009a604051966113a7886131f1565b5187525160208701525160408601525160608501525160808401525160a083015261271060c083015260069660005b600781101561151d576113f26000928260051b8601519061366b565b9182841061140357506001016113d6565b92509750506001600160a01b039291505061141d866130aa565b90549060031b1c6114336001860191825461366b565b90555b61144561033c600b5442613176565b8455600284016114558154613928565b90558251600052600d602052600160406000200160ff19815416905584600052600f6020526000600360408220828155826001820155826002820155015561149e600454613928565b60045551169051916114cf604051918583526020830190600260409180548452600181015460208501520154910152565b600785101561050a5760a08161150b9660807f0abcf5161f130a8d1c7d3620dff461bca2d8b723b884877d378d75f335ef4872940152a361312f565b60ff82549160031b1b19169055600080f35b505050506001600160a01b0390611436565b606460405162461bcd60e51b815260206004820152601160248201527f52657175657374206e6f7420666f756e640000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601c60248201527f726571756573742066756c66696c6c6564206f72206d697373696e67000000006044820152fd5b606460405162461bcd60e51b815260206004820152600d60248201527f6f6e6c79206f70657261746f72000000000000000000000000000000000000006044820152fd5b346105f657611609366130db565b611611613937565b601354810361165a5760005b81811061162657005b8061163460019284866137b7565b3561163e826130aa565b819291549060031b91821b91600019901b19161790550161161d565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642072657761726473206c656e677468000000000000000000006044820152fd5b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f5760009161190a575b508210156118b9576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576117269160009161071c57506001600160a01b031633146132a8565b80600052600c60205261174760406000205461034561033c600b5442613176565b61174f613979565b80600052600d60205261177060ff600160406000200154166103758161316c565b611784600160ff6009541661038f8161316c565b6117926007543410156133d4565b8060005260116020526117aa6040600020541561341f565b6000818152600d6020526040902060018101805461ffff19166103011790554290556118066104176104256040516117e1816131a3565b338152846020820152426040820152600360608201526040519283916020830161346a565b9060405190611814826131a3565b3382526003602083019282845260408101428152606082019483865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760039260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f576119059160009161078c57506001600160a01b0316331461325d565b611726565b90506020813d602011611934575b816119256020938361320d565b810103126105f65751836116de565b3d9150611918565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091611a9b575b50821015611a4a576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576119c49160009161071c57506001600160a01b031633146132a8565b80600052600c6020526119e560406000205461034561033c600b5442613176565b6119ed613979565b80600052600d602052611a0e60ff600160406000200154166103758161316c565b611a22600160ff6009541661038f8161316c565b806000526010602052611a3c60ff60406000205416613883565b6117926005543410156133d4565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f57611a969160009161078c57506001600160a01b0316331461325d565b6119c4565b90506020813d602011611ac5575b81611ab66020938361320d565b810103126105f657518361197c565b3d9150611aa9565b346105f65760003660031901126105f65760206001600160a01b0360175416604051908152f35b346105f65760003660031901126105f65760206001600160a01b0360155416604051908152f35b346105f6576101003660031901126105f65760043560048110156105f65760e03660231901126105f657611b5690611b51613937565b613084565b602435815560443560018201556064356002820155608435600382015560a435600482015560c435600582015560e435600690910155005b346105f65760003660031901126105f65760206001600160a01b0360025416604051908152f35b346105f65760203660031901126105f6576001600160a01b03611bd661306e565b611bde613937565b16611bea811515613838565b6001600160a01b03196014541617601455600080f35b346105f65760003660031901126105f6576020600754604051908152f35b346105f65760203660031901126105f657600060408051611c3e816131d5565b8281528260208201520152600435600052600c60205260606040600020604051611c67816131d5565b815491828252604060026001830154926020850193845201549201918252604051928352516020830152516040820152f35b611ca2366130db565b611caa613979565b611cbe600160ff6009541661098d8161316c565b611cc981151561370e565b611cd86109ad82600754613759565b60005b818110611ce9576001600355005b611cf48183856137b7565b3590611456821015611eda57602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091611ebc575b506001600160a01b0316331480611ea8575b611d53906137c7565b816000526011602052611d6b6040600020541561341f565b6000828152600d6020526040902060018101805461ffff1916610301179055429055611dc7610417610425604051611da2816131a3565b338152856020820152426040820152600360608201526040519283916020830161346a565b9160405190611dd5826131a3565b3382526003602083019282845260408101428152606082019483865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a57611e7c604060019660039560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401611cdb565b50611d53611eb5836134a6565b9050611d4a565b611ed4915060203d81116105485761053a818361320d565b85611d38565b602460206001600160a01b0360155416604051928380926331a9108f60e11b82528760048301525afa90811561054f57600091611f46575b506001600160a01b0316331480611f32575b611f2d906137c7565b611d53565b50611f2d611f3f836134a6565b9050611f24565b611f5e915060203d81116105485761053a818361320d565b85611f12565b346105f65760003660031901126105f6576020601254604051908152f35b346105f65760003660031901126105f6576020600a54604051908152f35b346105f65760203660031901126105f6576004356000548110156105f65760ff611fcb60209261312f565b90549060031b1c166040519015158152f35b346105f65760203660031901126105f657611ff6613937565b600435600655005b346105f65760003660031901126105f657612017613937565b60006001600160a01b036002546001600160a01b03198116600255167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346105f65760203660031901126105f65760006020610d8f61207961306e565b612081613937565b6017546040517f954fa5ee0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0392831660248201529485939190921691839182906044820190565b6120dc366130db565b6120e4613979565b6120f8600160ff6009541661098d8161316c565b61210381151561370e565b6121126109ad82600554613759565b60005b818110612123576001600355005b61212e8183856137b7565b359081600052601060205261214a60ff60406000205416613883565b602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f576000916122e1575b506001600160a01b03163314806122cd575b61219d906137c7565b8160005260116020526121b56040600020541561341f565b6000828152600d6020526040902060018101805461ffff19166103011790554290556121ec610417610425604051611da2816131a3565b91604051906121fa826131a3565b3382526003602083019282845260408101428152606082019483865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a576122a1604060019660039560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a401612115565b5061219d6122da836134a6565b9050612194565b6122f9915060203d81116105485761053a818361320d565b85612182565b346105f65760003660031901126105f6576020600554604051908152f35b346105f65760203660031901126105f6576001600160a01b0361233e61306e565b612346613937565b16612352811515613838565b6001600160a01b03196015541617601555600080f35b346105f65760203660031901126105f657612381613937565b600435600555005b612392366130db565b61239a613979565b6123ae600160ff6009541661098d8161316c565b6123b981151561370e565b6123c86109ad82600554613759565b60005b8181106123d9576001600355005b6123e48183856137b7565b35906123f2608383106135d5565b602460206001600160a01b0360145416604051928380926331a9108f60e11b82528760048301525afa90811561054f576000916125af575b506001600160a01b031633148061259b575b612445906137c7565b81600052601160205261245d6040600020541561341f565b6000828152600d6020526040902060018101805461ffff19166102011790554290556124b9610417610425604051612494816131a3565b338152856020820152426040820152600260608201526040519283916020830161346a565b91604051906124c7826131a3565b338252600360208301928284526040810142815260608201946002865287600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915193600485101561050a5761256f604060019660029560009160ff80198354169116179055848152600c602052206040519283526020830190600260409180548452600181015460208501520154910152565b7f90265a6b54a9a33fe0271586d9d32316d70e467783528541adb25210a4c74bc760803392a4016123cb565b506124456125a8836134a6565b905061243c565b6125c7915060203d81116105485761053a818361320d565b8561242a565b346105f65760203660031901126105f6576004356125e9613979565b80600052600d60205261260b600160ff81604060002001541661081b8161316c565b80600052600d60205260406000205461025881018091116108635761263290421015613678565b80600052600d60205260ff60016040600020015460081c16600481101561050a576001146126d2575b80600052600d60205260ff60016040600020015460081c16600481101561050a576003146126a6575b600052600d602052600160406000200160ff1981541690556001600355600080f35b6126b13315156134f3565b6126cd6000808080600754335af16126c761355a565b5061358a565b612684565b6126dd3315156134f3565b6126f36000808080600654335af16126c761355a565b61265b565b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091612971575b50821015612920576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f576127809160009161071c57506001600160a01b031633146132a8565b80600052600c6020526127a160406000205461034561033c600b5442613176565b6127a9613979565b80600052600d6020526127ca60ff600160406000200154166103758161316c565b6127de600160ff6009541661038f8161316c565b6127ea608382106135d5565b6127f86005543410156133d4565b8060005260116020526128106040600020541561341f565b6000818152600d6020526040902060018101805461ffff191661020117905542905561286c610417610425604051612847816131a3565b338152846020820152426040820152600260608201526040519283916020830161346a565b906040519061287a826131a3565b338252600360208301928284526040810142815260608201946002865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760029260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f5761296c9160009161078c57506001600160a01b0316331461325d565b612780565b90506020813d60201161299b575b8161298c6020938361320d565b810103126105f6575183612738565b3d915061297f565b346105f65760203660031901126105f6576129f460008080806001600160a01b036129cc61306e565b6129d4613937565b6129dc613979565b166129e88115156134f3565b47905af16126c761355a565b6001600355005b346105f65760203660031901126105f6576004356013548110156105f657612a246020916130aa565b90549060031b1c604051908152f35b346105f65760203660031901126105f657600435612a4f613937565b8015612a5a57600a55005b606460405162461bcd60e51b815260206004820152601a60248201527f436f6f6c646f776e206d75737420626520706f7369746976652e0000000000006044820152fd5b346105f65760203660031901126105f657600435600052600f60205260806040600020610c966001600160a01b038254169160018101549060ff60036002830154920154169160405194855260208501526040840152606083019061309d565b346105f65760203660031901126105f65760043560048110156105f657612b2660e091613084565b805490600181015490600281015460038201546004830154916006600585015494015494604051968752602087015260408601526060850152608084015260a083015260c0820152f35b346105f65760003660031901126105f6576020600854604051908152f35b346105f65760203660031901126105f6576020612bac6004356134a6565b6040519015158152f35b346105f65760003660031901126105f6576020600654604051908152f35b60203660031901126105f6576004356001600160a01b03601454166040516318160ddd60e01b8152602081600481855afa90811561054f57600091612e41575b50821015612df0576020602491604051928380926331a9108f60e11b82528660048301525afa801561054f57612c5c9160009161071c57506001600160a01b031633146132a8565b80600052600c602052612c7d60406000205461034561033c600b5442613176565b612c85613979565b80600052600d602052612ca660ff600160406000200154166103758161316c565b612cba600160ff6009541661038f8161316c565b612cc86006543410156133d4565b806000526011602052612ce06040600020541561341f565b6000818152600d6020526040902060018101805461ffff1916610101179055429055612d3c610417610425604051612d17816131a3565b338152846020820152426040820152600160608201526040519283916020830161346a565b9060405190612d4a826131a3565b338252600360208301928284526040810142815260608201946001865286600052600f6020526001600160a01b03806040600020945116166001600160a01b031984541617835551600183015551600282015501915192600484101561050a5760019260009460ff80198354169116179055818452600c6020526104dc604085206040519283526020830190600260409180548452600181015460208501520154910152565b50602460206001600160a01b0360155416604051928380926331a9108f60e11b82528660048301525afa801561054f57612e3c9160009161078c57506001600160a01b0316331461325d565b612c5c565b90506020813d602011612e6b575b81612e5c6020938361320d565b810103126105f6575183612c14565b3d9150612e4f565b346105f65760203660031901126105f657600435600052600c60205260606040600020805490600260018201549101549060405192835260208301526040820152f35b346105f65760003660031901126105f6576020600454604051908152f35b346105f65760003660031901126105f6576020600b54604051908152f35b346105f65760403660031901126105f657612f0b61306e565b612f13613937565b60206001600160a01b036064816017541693600060405195869485937ff971966200000000000000000000000000000000000000000000000000000000855230600486015216602484015260243560448401525af1801561054f57610d9f57005b346105f65760203660031901126105f657600435612f90613937565b612f998161316c565b612fa28161316c565b60ff801960095416911617600955600080f35b346105f65760003660031901126105f6576020612fd761033c600b5442613176565b604051908152f35b346105f65760203660031901126105f657600435612ffb613937565b801561300657600b55005b606460405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642074696d657374616d7020666f722066756c6c4d6f6f6e2e006044820152fd5b346105f65760003660031901126105f6576020906001600160a01b03601454168152f35b600435906001600160a01b03821682036105f657565b600481101561050a57600052600e602052604060002090565b90600482101561050a5752565b6013548110156130c557601360005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b9060206003198301126105f65760043567ffffffffffffffff81116105f657826023820112156105f65780600401359267ffffffffffffffff84116105f65760248460051b830101116105f6576024019190565b906000548210156130c55760008052600582901c7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630191601f1690565b6002111561050a57565b9190820391821161086357565b811561318d570490565b634e487b7160e01b600052601260045260246000fd5b6080810190811067ffffffffffffffff8211176131bf57604052565b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176131bf57604052565b60e0810190811067ffffffffffffffff8211176131bf57604052565b90601f8019910116810190811067ffffffffffffffff8211176131bf57604052565b908160209103126105f6575190565b908160209103126105f657516001600160a01b03811681036105f65790565b1561326457565b606460405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f74206f776e2074686520706172746e6572006044820152fd5b156132af57565b606460405162461bcd60e51b815260206004820152601c60248201527f53656e64657220646f6573206e6f74206f776e2074686520776f6c66000000006044820152fd5b156132fa57565b606460405162461bcd60e51b815260206004820152601e60248201527f5468697320776f6c66206973207374696c6c20696e20636f6f6c646f776e00006044820152fd5b1561334557565b606460405162461bcd60e51b815260206004820152601860248201527f576f6c662069732063757272656e746c79206c6f636b656400000000000000006044820152fd5b1561339057565b606460405162461bcd60e51b815260206004820152601060248201527f48756e74696e672064697361626c6564000000000000000000000000000000006044820152fd5b156133db57565b606460405162461bcd60e51b815260206004820152600f60248201527f4e6f7420656e6f756768206665657300000000000000000000000000000000006044820152fd5b1561342657565b606460405162461bcd60e51b815260206004820152601060248201527f576f6c6620697320616d627573686564000000000000000000000000000000006044820152fd5b6134a49092919260608060808301956001600160a01b0381511684526020810151602085015260408101516040850152015191019061309d565b565b80600052600d60205260ff600160406000200154166134c48161316c565b1590816134cf575090565b9050600052600c6020526040600020546134ee61033c600b5442613176565b141590565b156134fa57565b606460405162461bcd60e51b815260206004820152600f60248201527f494e56414c49445f4144445245535300000000000000000000000000000000006044820152fd5b67ffffffffffffffff81116131bf57601f01601f191660200190565b3d15613585573d9061356b8261353e565b91613579604051938461320d565b82523d6000602084013e565b606090565b1561359157565b606460405162461bcd60e51b815260206004820152601160248201527f5749544844524157414c5f4641494c45440000000000000000000000000000006044820152fd5b156135dc57565b606460405162461bcd60e51b815260206004820152601360248201527f576f6c66206973206e6f74206e75636c656172000000000000000000000000006044820152fd5b1561362757565b606460405162461bcd60e51b815260206004820152600f60248201527f576f6c66206e6f74206c6f636b656400000000000000000000000000000000006044820152fd5b9190820180921161086357565b1561367f57565b606460405162461bcd60e51b815260206004820152601760248201527f4c6f636b20706572696f64206e6f7420657870697265640000000000000000006044820152fd5b156136ca57565b606460405162461bcd60e51b815260206004820152601360248201527f48756e74696e672069732064697361626c6564000000000000000000000000006044820152fd5b1561371557565b606460405162461bcd60e51b815260206004820152600c60248201527f4e6f2056616c69642049647300000000000000000000000000000000000000006044820152fd5b8181029291811591840414171561086357565b1561377357565b606460405162461bcd60e51b815260206004820152602060248201527f496e73756666696369656e742066756e647320666f7220616c6c2068756e74736044820152fd5b91908110156130c55760051b0190565b156137ce57565b608460405162461bcd60e51b815260206004820152603160248201527f576f6c66206e6f74206f776e65642062792073656e646572206f72206e6f742060448201527f76616c696420666f722068756e74696e670000000000000000000000000000006064820152fd5b1561383f57565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152fd5b1561388a57565b606460405162461bcd60e51b815260206004820152601660248201527f5468697320776f6c66206973206e6f74206120706967000000000000000000006044820152fd5b9291926138da8261353e565b916138e8604051938461320d565b8294818452818301116105f6578281602093846000960137010152565b60005b8381106139185750506000910152565b8181015183820152602001613908565b60001981146108635760010190565b6001600160a01b0360025416330361394b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b60026003541461398a576002600355565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b90916060928252604060208301526139db8151809281604086015260208686019101613905565b601f01601f1916010190565b9060005491680100000000000000008310156131bf57613a436104179160018501600055613a148561312f565b5050613a1f8561312f565b81549060031b9060ff6001831b921b191617905560405192839186602084016139b4565b6364e62126194201428111610863576003900490600182019182811161086357600046600103613ad85750600501809211610863577fd91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d202915b6040516020810190613ab2816104178686866139b4565b519020856000526001602052604060002055613ad3604051928392836139b4565b0390a1565b9060029093929301809211613b105750907fd91fc3685b930310b008ec37d2334870cab88a023ed8cc628a2e2ccd4e55d20291613a9b565b80634e487b7160e01b602492526011600452fdfea2646970667358221220e009267e4915a057620d43a314687d1d778b5906def3503be4717a622dd77d4364736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009b2ced8219bcf64cccaf69ed4c56aaf90e958a0b00000000000000000000000026dd746561e82c655f365df796fd33eaeea39652000000000000000000000000f3354ca7fca04524ced537a3ec016e67f8f32dc200000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800000000000000000000000000b7501d1ef03b17076a814accf03d47a5e4af1c98
-----Decoded View---------------
Arg [0] : _wolvesContract (address): 0x9b2cED8219BcF64CccAF69ed4C56AaF90e958a0B
Arg [1] : _huntPartnersContract (address): 0x26dD746561E82C655F365DF796FD33EAeEA39652
Arg [2] : operator (address): 0xf3354ca7FCa04524cED537a3ec016E67F8f32dC2
Arg [3] : _blastAddress (address): 0x4300000000000000000000000000000000000002
Arg [4] : _blastPointsAddress (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [5] : _pointsOperator (address): 0xB7501d1eF03B17076A814AcCF03d47a5E4Af1c98
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000009b2ced8219bcf64cccaf69ed4c56aaf90e958a0b
Arg [1] : 00000000000000000000000026dd746561e82c655f365df796fd33eaeea39652
Arg [2] : 000000000000000000000000f3354ca7fca04524ced537a3ec016e67f8f32dc2
Arg [3] : 0000000000000000000000004300000000000000000000000000000000000002
Arg [4] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [5] : 000000000000000000000000b7501d1ef03b17076a814accf03d47a5e4af1c98
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.