Source Code
Overview
MON Balance
MON Value
$0.00Latest 25 from a total of 122 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Add Whitelist Ph... | 50884779 | 2 hrs ago | IN | 0 MON | 0.13263698 | ||||
| Purchase Initial... | 50862645 | 4 hrs ago | IN | 500 MON | 0.05085753 | ||||
| Purchase Initial... | 50846322 | 6 hrs ago | IN | 1,000 MON | 0.03496681 | ||||
| Purchase Initial... | 50844290 | 7 hrs ago | IN | 500 MON | 0.0524465 | ||||
| Purchase Initial... | 50836643 | 7 hrs ago | IN | 500 MON | 0.04255251 | ||||
| Purchase Initial... | 50836382 | 7 hrs ago | IN | 500 MON | 0.03491356 | ||||
| Add Whitelist Ph... | 50830110 | 8 hrs ago | IN | 0 MON | 0.00916144 | ||||
| Add Whitelist Ph... | 50827540 | 8 hrs ago | IN | 0 MON | 0.00914709 | ||||
| Add Whitelist Ph... | 50827281 | 8 hrs ago | IN | 0 MON | 0.00918054 | ||||
| Add Whitelist Ph... | 50815568 | 10 hrs ago | IN | 0 MON | 0.01359682 | ||||
| Add Whitelist Ph... | 50815115 | 10 hrs ago | IN | 0 MON | 0.00919148 | ||||
| Add Whitelist Ph... | 50813822 | 10 hrs ago | IN | 0 MON | 0.01345095 | ||||
| Purchase Initial... | 50813344 | 10 hrs ago | IN | 500 MON | 0.0349119 | ||||
| Purchase Initial... | 50794138 | 12 hrs ago | IN | 500 MON | 0.03501436 | ||||
| Add Whitelist Ph... | 50791375 | 12 hrs ago | IN | 0 MON | 0.09110441 | ||||
| Add Whitelist Ph... | 50787078 | 13 hrs ago | IN | 0 MON | 0.00914664 | ||||
| Add Whitelist Ph... | 50784848 | 13 hrs ago | IN | 0 MON | 0.01359037 | ||||
| Purchase Initial... | 50746659 | 17 hrs ago | IN | 500 MON | 0.03645922 | ||||
| Purchase Initial... | 50742623 | 18 hrs ago | IN | 1,000 MON | 0.05240139 | ||||
| Purchase Initial... | 50734978 | 19 hrs ago | IN | 1,000 MON | 0.034912 | ||||
| Purchase Initial... | 50727602 | 19 hrs ago | IN | 500 MON | 0.04089151 | ||||
| Purchase Initial... | 50721866 | 20 hrs ago | IN | 500 MON | 0.0349119 | ||||
| Add Whitelist Ph... | 50718586 | 21 hrs ago | IN | 0 MON | 0.01360196 | ||||
| Purchase Initial... | 50715290 | 21 hrs ago | IN | 1,000 MON | 0.05233905 | ||||
| Purchase Initial... | 50712350 | 21 hrs ago | IN | 500 MON | 0.03493245 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 50862645 | 4 hrs ago | 500 MON | ||||
| 50846322 | 6 hrs ago | 1,000 MON | ||||
| 50844290 | 7 hrs ago | 500 MON | ||||
| 50836643 | 7 hrs ago | 500 MON | ||||
| 50836382 | 7 hrs ago | 500 MON | ||||
| 50813344 | 10 hrs ago | 500 MON | ||||
| 50794138 | 12 hrs ago | 500 MON | ||||
| 50746659 | 17 hrs ago | 500 MON | ||||
| 50742623 | 18 hrs ago | 1,000 MON | ||||
| 50734978 | 19 hrs ago | 1,000 MON | ||||
| 50727602 | 19 hrs ago | 500 MON | ||||
| 50721866 | 20 hrs ago | 500 MON | ||||
| 50715290 | 21 hrs ago | 1,000 MON | ||||
| 50712350 | 21 hrs ago | 500 MON | ||||
| 50709528 | 22 hrs ago | 500 MON | ||||
| 50709273 | 22 hrs ago | 1,000 MON | ||||
| 50703905 | 22 hrs ago | 500 MON | ||||
| 50703003 | 22 hrs ago | 500 MON | ||||
| 50613714 | 32 hrs ago | 500 MON | ||||
| 50605596 | 33 hrs ago | 500 MON | ||||
| 50590567 | 35 hrs ago | 500 MON | ||||
| 50557670 | 38 hrs ago | 1,000 MON | ||||
| 50468147 | 2 days ago | 500 MON | ||||
| 50424438 | 2 days ago | 500 MON | ||||
| 50256623 | 3 days ago | 1,000 MON |
Loading...
Loading
Contract Name:
PetroGame
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2026-01-13
*/
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/Context.sol
pragma solidity ^0.8.20;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/Ownable.sol
pragma solidity ^0.8.20;
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/EnumerableSetLib.sol
pragma solidity ^0.8.4;
library EnumerableSetLib {
error IndexOutOfBounds();
error ValueIsZeroSentinel();
error ExceedsCapacity();
uint256 private constant _ZERO_SENTINEL = 0xfbb67fda52d4bfb8bf;
uint256 private constant _ENUMERABLE_ADDRESS_SET_SLOT_SEED = 0x978aab92;
uint256 private constant _ENUMERABLE_WORD_SET_SLOT_SEED = 0x18fb5864;
struct AddressSet { uint256 _spacer; }
struct Bytes32Set { uint256 _spacer; }
struct Uint256Set { uint256 _spacer; }
struct Int256Set { uint256 _spacer; }
struct Uint8Set { uint256 data; }
function length(Uint256Set storage set) internal view returns (uint256 result) {
result = length(_toBytes32Set(set));
}
function contains(Uint256Set storage set, uint256 value) internal view returns (bool result) {
result = contains(_toBytes32Set(set), bytes32(value));
}
function add(Uint256Set storage set, uint256 value) internal returns (bool result) {
result = add(_toBytes32Set(set), bytes32(value));
}
function remove(Uint256Set storage set, uint256 value) internal returns (bool result) {
result = remove(_toBytes32Set(set), bytes32(value));
}
function at(Uint256Set storage set, uint256 i) internal view returns (uint256 result) {
result = uint256(at(_toBytes32Set(set), i));
}
// --- Private Helpers to reduce size (Using Bytes32 logic for Uint256) ---
function length(Bytes32Set storage set) internal view returns (uint256 result) {
bytes32 rootSlot = _rootSlot(set);
assembly {
let n := sload(not(rootSlot))
result := shr(1, n)
}
}
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool result) {
bytes32 rootSlot = _rootSlot(set);
assembly {
if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
if iszero(value) { value := _ZERO_SENTINEL }
mstore(0x20, rootSlot)
mstore(0x00, value)
result := iszero(iszero(sload(keccak256(0x00, 0x40))))
}
}
function add(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
bytes32 rootSlot = _rootSlot(set);
assembly {
if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
if iszero(value) { value := _ZERO_SENTINEL }
mstore(0x20, rootSlot)
mstore(0x00, value)
let p := keccak256(0x00, 0x40)
if iszero(sload(p)) {
let n := sload(not(rootSlot))
mstore(0x00, n) // Use scratch space
sstore(add(rootSlot, shr(1, n)), value)
sstore(p, add(1, shr(1, n)))
sstore(not(rootSlot), add(n, 2))
result := 1
}
}
}
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
bytes32 rootSlot = _rootSlot(set);
assembly {
if eq(value, _ZERO_SENTINEL) { mstore(0x00, 0xf5a267f1) revert(0x1c, 0x04) }
if iszero(value) { value := _ZERO_SENTINEL }
mstore(0x20, rootSlot)
mstore(0x00, value)
let p := keccak256(0x00, 0x40)
let position := sload(p)
if position {
let n := shr(1, sload(not(rootSlot)))
let lastValue := sload(add(rootSlot, sub(n, 1)))
if iszero(eq(value, lastValue)) {
sstore(add(rootSlot, sub(position, 1)), lastValue)
mstore(0x00, lastValue)
sstore(keccak256(0x00, 0x40), position)
}
sstore(not(rootSlot), sub(shl(1, n), 2))
sstore(p, 0)
result := 1
}
}
}
function at(Bytes32Set storage set, uint256 i) internal view returns (bytes32 result) {
bytes32 rootSlot = _rootSlot(set);
assembly {
if iszero(lt(i, shr(1, sload(not(rootSlot))))) {
mstore(0x00, 0x4e23d035) // IndexOutOfBounds()
revert(0x1c, 0x04)
}
result := sload(add(rootSlot, i))
result := mul(result, iszero(eq(result, _ZERO_SENTINEL)))
}
}
function _rootSlot(Bytes32Set storage s) private pure returns (bytes32 r) {
assembly {
mstore(0x04, _ENUMERABLE_WORD_SET_SLOT_SEED)
mstore(0x00, s.slot)
r := keccak256(0x00, 0x24)
}
}
function _toBytes32Set(Uint256Set storage s) private pure returns (Bytes32Set storage c) {
assembly { c.slot := s.slot }
}
}
// File: artifacts/contract/contract (1)/contract/PetroGame/utils/FixedPointMathLib.sol
pragma solidity ^0.8.4;
library FixedPointMathLib {
uint256 internal constant WAD = 1e18;
function mulWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
assembly {
if mul(y, gt(x, div(not(0), y))) {
mstore(0x00, 0xbac65e5b)
revert(0x1c, 0x04)
}
z := div(mul(x, y), WAD)
}
}
function mulDiv(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
assembly {
if iszero(mul(or(iszero(x), eq(div(mul(x, y), x), y)), d)) {
mstore(0x00, 0xad251c27)
revert(0x1c, 0x04)
}
z := div(mul(x, y), d)
}
}
}
// File: artifacts/contract/contract (1)/contract/PetroGame/interfaces/IPetro.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.19;
interface IPetro {
function mint(address to, uint256 amt) external;
function burn(uint256 value) external;
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/Rig.sol
pragma solidity ^0.8.19;
struct Rig {
uint256 rigIndex;
uint256 id;
uint256 x;
uint256 y;
uint256 hashrate;
uint256 powerConsumption;
uint256 cost;
bool inProduction;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/Field.sol
pragma solidity ^0.8.19;
struct Field {
uint256 fieldIndex;
uint256 maxRigs;
uint256 currRigs;
uint256 totalPowerOutput;
uint256 currPowerOutput;
uint256 x;
uint256 y;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/types/NewField.sol
pragma solidity ^0.8.19;
struct NewField {
uint256 maxRigs;
uint256 totalPowerOutput;
uint256 cost;
bool inProduction;
uint256 x;
uint256 y;
}
// File: artifacts/contract/contract (1)/contract/PetroGame/libraries/Errors.sol
pragma solidity ^0.8.19;
library Errors {
error IncorrectValue();
error AlreadyPurchasedInitialField();
error StarterRigAlreadyAcquired();
error FieldAtMaxCapacity();
error FieldInadequatePowerOutput();
error PlayerDoesNotOwnRig();
error GreatDepression();
error RigNotInProduction();
error TooPoor();
error NewFieldNotInProduction();
error CannotDowngradeAField();
error NoRewardsPending();
error CannotDecreaseBelowZero();
error InvalidRigCoordinates();
error FieldDimensionsInvalid();
error NeedToInitializeField();
error InvalidReferrer();
error NonExistentRig();
error CantModifyStarterRig();
error NonExistentField();
error CantModifyStarterField();
error AlreadyAtMaxField();
error CantBuyNewFieldYet();
error InvalidRigIndex();
error InvalidFieldIndex();
error InvalidFee();
error InvalidPowerOutput();
error MiningHasntStarted();
error WithdrawFailed();
}
// File: artifacts/contract/contract (1)/contract/PetroGame/libraries/Events.sol
pragma solidity ^0.8.19;
library Events {
event MiningStarted(uint256 startBlock);
event NewRigAdded(uint256 indexed rigIndex, uint256 hashRate, uint256 powerConsumption, uint256 cost, bool inProduction);
event RigProductionToggled(uint256 indexed rigIndex, bool inProduction);
event FieldProductionToggled(uint256 indexed fieldIndex, bool inProduction);
event NewFieldAdded(uint256 indexed fieldIndex, uint256 totalPowerOutput, uint256 cost, bool inProduction, uint256 x, uint256 y);
event RigSecondaryMarketAdded(uint256 indexed rigIndex, uint256 price);
event InitialFieldPurchased(address indexed player);
event FreeRigRedeemed(address indexed player);
event RigSold(address indexed player, uint256 indexed rigIndex, uint256 secondHandPrice, uint256 rigId, uint256 x, uint256 y);
event RigBought(address indexed payer, address indexed player, uint256 indexed rigIndex, uint256 cost, uint256 rigId, uint256 x, uint256 y);
event FieldBought(address indexed player, uint256 indexed fieldIndex, uint256 cost);
event PlayerHashrateIncreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards);
event PlayerHashrateDecreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards);
event RewardsClaimed(address indexed player, uint256 rewards);
event RigCostChanged(uint256 indexed rigIndex, uint256 newCost);
event FieldCostChanged(uint256 indexed fieldIndex, uint256 newCost);
}
// File: artifacts/contract/contract (1)/contract/PetroGame/PetroGame.sol
pragma solidity ^0.8.19;
// --- ORACLE ---
interface IUniswapV2Pair {
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function token0() external view returns (address);
}
contract PetroGame is Ownable {
using EnumerableSetLib for EnumerableSetLib.Uint256Set;
address public petroToken;
address public devWallet;
address public marketingWallet;
// ORACLE settings
address public liquidityPair;
bool public useOracle = false;
uint256 public manualPetroPrice = 0.0001 ether;
uint256 public startTime;
bool public miningHasStarted;
// 360,000 * 1e18 / 86,400 = 4.166666666666666666 PETRO
uint256 public constant INITIAL_PETRO_PER_SECOND = 4166666666666666666;
uint256 public constant HALVING_PERIOD = 6 days;
uint256 public constant REWARDS_PRECISION = 1e18;
uint256 universalRigId;
uint256 public uniqueRigCount;
uint256 public fieldCount;
uint256 public totalPlayers;
uint256 public totalPetroMined;
uint256 public lastRewardTime;
uint256 public totalHashrate;
uint256 public cumulativePetroPerHash;
// COOLDOWN
uint256 public cooldown = 86400;
mapping(address => uint256) public lastUpgradeTime;
mapping(address => uint256) public lastClaimTime;
mapping(address => uint256) public playerHashrate;
mapping(address => uint256) public playerPendingRewards;
mapping(address => uint256) public playerPetroDebt;
mapping(uint256 => Rig) public rigs;
mapping(uint256 => NewField) public fields;
mapping(address => EnumerableSetLib.Uint256Set) public playerRigsOwned;
mapping(uint256 => Rig) public playerRigsId;
mapping(address => Field) public ownerToField;
mapping(address => bool) public initializedStarterField;
mapping(address => bool) public acquiredStarterRig;
mapping(address => mapping(uint256 => mapping(uint256 => bool))) public playerOccupiedCoords;
mapping(address => mapping(uint256 => mapping(uint256 => uint256))) public gridRigIndex;
mapping(address => address) public referrals;
mapping(address => address[]) public referredUsers;
mapping(address => uint256) public referralPetroBalance;
mapping(address => uint256) public totalMonCommission;
uint8 public currentPhase = 0;
uint256 public initialFieldPrice = 1500 ether;
uint256 public constant PHASE1_PRICE = 1 ether;
uint256 public constant PHASE2_WL_PRICE = 500 ether;
uint256 public constant PHASE2_PUBLIC_PRICE = 1000 ether;
mapping(address => bool) public whitelistPhase1;
mapping(address => bool) public whitelistPhase2;
uint256 public immutable STARTER_RIG_INDEX;
uint256 public immutable STARTER_FIELD_INDEX;
event FieldUpgraded(address indexed player, uint256 newLevel, uint256 newMaxRigs, uint256 newPower);
event ReferralRewardClaimed(address indexed user, uint256 amount);
event ClaimFeePaid(address indexed user, uint256 totalFee, uint256 devShare, uint256 marketingShare);
event PhaseChanged(uint8 newPhase);
event OracleUpdated(address pair, bool status);
event UsersMigrated(uint256 count);
event NewRigAdded(uint256 rigIndex, uint256 hashrate, uint256 cost);
event NewFieldAdded(uint256 fieldIndex, uint256 cost, uint256 maxRigs);
constructor() Ownable(msg.sender) {
devWallet = msg.sender;
marketingWallet = msg.sender;
_addRigInternal(100, 1, 0); STARTER_RIG_INDEX = 1;
_addRigInternal(180, 6, 21 * 1e18);
_addRigInternal(420, 8, 36 * 1e18);
_addRigInternal(720, 10, 54 * 1e18); _addRigInternal(1000, 10, 60 * 1e18);
_addRigInternal(5000, 30, 180 * 1e18); _addRigInternal(15000, 50, 375 * 1e18);
_addRigInternal(20000, 90, 600 * 1e18); _addRigInternal(60000, 200, 1200 * 1e18);
_addRigInternal(200000, 600, 3600 * 1e18); _addRigInternal(1120000, 3200, 8000 * 1e18);
_addRigInternal(800000, 2000, 9000 * 1e18); _addRigInternal(1336000, 3000, 12000 * 1e18);
_addRigInternal(2508000, 5000, 18000 * 1e18); _addRigInternal(3484000, 4500, 28000 * 1e18);
fields[++fieldCount] = NewField(4, 28, 0, false, 2, 2); STARTER_FIELD_INDEX = fieldCount;
fields[++fieldCount] = NewField(8, 168, 210 * 1e18, false, 2, 4);
fields[++fieldCount] = NewField(12, 420, 1125 * 1e18, false, 3, 4);
fields[++fieldCount] = NewField(16, 1120, 888 * 1e18, false, 4, 4);
fields[++fieldCount] = NewField(20, 7000, 1065 * 1e18, false, 4, 5);
fields[++fieldCount] = NewField(20, 13125, 1275 * 1e18, false, 4, 5);
fields[++fieldCount] = NewField(20, 19685, 2550 * 1e18, false, 4, 5);
}
function addNewRig(uint256 hashrate, uint256 power, uint256 cost) external onlyOwner {
_addRigInternal(hashrate, power, cost);
emit NewRigAdded(uniqueRigCount, hashrate, cost);
}
function addNewField(uint256 maxRigs, uint256 totalPowerOutput, uint256 cost, uint256 x, uint256 y) external onlyOwner {
fields[++fieldCount] = NewField(maxRigs, totalPowerOutput, cost, false, x, y);
emit NewFieldAdded(fieldCount, cost, maxRigs);
}
function _addRigInternal(uint256 hashrate, uint256 power, uint256 cost) internal {
uniqueRigCount++;
rigs[uniqueRigCount] = Rig(uniqueRigCount, type(uint256).max, type(uint256).max, type(uint256).max, hashrate, power, cost, false);
}
function migrateUsers(address[] calldata _users) external onlyOwner {
NewField memory starterData = fields[STARTER_FIELD_INDEX];
for(uint i=0; i<_users.length; i++) {
address user = _users[i];
if (!initializedStarterField[user]) {
initializedStarterField[user] = true;
totalPlayers++;
playerPetroDebt[user] = cumulativePetroPerHash;
lastClaimTime[user] = block.timestamp;
Field storage field = ownerToField[user];
field.fieldIndex = STARTER_FIELD_INDEX;
field.maxRigs = starterData.maxRigs;
field.totalPowerOutput = starterData.totalPowerOutput;
field.currPowerOutput = 0;
field.x = starterData.x;
field.y = starterData.y;
}
}
emit UsersMigrated(_users.length);
}
function getCurrentRewardPerSecond() public view returns (uint256) {
if (!miningHasStarted) return 0;
uint256 timePassed = block.timestamp - startTime;
uint256 halvings = timePassed / HALVING_PERIOD;
if (halvings > 64) return 0;
return INITIAL_PETRO_PER_SECOND >> halvings;
}
function getPendingReward(address _user) public view returns (uint256) {
uint256 _accPetroPerHash = cumulativePetroPerHash;
if (block.timestamp > lastRewardTime && totalHashrate != 0) {
uint256 timeDelta = block.timestamp - lastRewardTime;
uint256 currentReward = getCurrentRewardPerSecond();
uint256 rewards = timeDelta * currentReward;
_accPetroPerHash += (rewards * REWARDS_PRECISION) / totalHashrate;
}
return playerPendingRewards[_user] + (playerHashrate[_user] * (_accPetroPerHash - playerPetroDebt[_user])) / REWARDS_PRECISION;
}
function _updateCumulativeRewards() internal {
if (block.timestamp <= lastRewardTime) return;
if (totalHashrate == 0) {
lastRewardTime = block.timestamp;
return;
}
uint256 timeDelta = block.timestamp - lastRewardTime;
uint256 currentReward = getCurrentRewardPerSecond();
uint256 rewards = timeDelta * currentReward;
cumulativePetroPerHash += (rewards * REWARDS_PRECISION) / totalHashrate;
lastRewardTime = block.timestamp;
}
function purchaseInitialField(address referrer) external payable {
if (initializedStarterField[msg.sender]) revert Errors.AlreadyPurchasedInitialField();
require(currentPhase > 0, "Sales not started");
uint256 priceToPay;
if (currentPhase == 1) {
require(whitelistPhase1[msg.sender], "Not Whitelisted for Phase 1");
priceToPay = PHASE1_PRICE;
}
else if (currentPhase == 2) {
if (whitelistPhase2[msg.sender]) {
priceToPay = PHASE2_WL_PRICE; // 500 MON
} else {
priceToPay = PHASE2_PUBLIC_PRICE; // 1000 MON
}
}
else {
priceToPay = initialFieldPrice;
if (referrer != address(0) && referrer != msg.sender) {
priceToPay = (initialFieldPrice * 90) / 100;
}
}
if (msg.value < priceToPay) revert Errors.IncorrectValue();
bool isValidRef = (referrer != address(0) && referrer != msg.sender && currentPhase == 3);
if (isValidRef) {
uint256 refShare = (initialFieldPrice * 10) / 100;
uint256 remainingShare = msg.value - refShare;
payable(referrer).transfer(refShare);
totalMonCommission[referrer] += refShare;
referrals[msg.sender] = referrer;
referredUsers[referrer].push(msg.sender);
if (marketingWallet != address(0) && marketingWallet != devWallet) {
uint256 splitAmount = remainingShare / 2;
payable(devWallet).transfer(splitAmount);
payable(marketingWallet).transfer(remainingShare - splitAmount);
} else {
payable(devWallet).transfer(remainingShare);
}
} else {
if (marketingWallet != address(0) && marketingWallet != devWallet) {
uint256 splitAmount = msg.value / 2;
payable(devWallet).transfer(splitAmount);
payable(marketingWallet).transfer(msg.value - splitAmount);
} else {
payable(devWallet).transfer(msg.value);
}
}
initializedStarterField[msg.sender] = true;
totalPlayers++;
lastClaimTime[msg.sender] = block.timestamp;
NewField memory newField = fields[STARTER_FIELD_INDEX];
Field storage field = ownerToField[msg.sender];
field.fieldIndex = STARTER_FIELD_INDEX;
field.maxRigs = newField.maxRigs;
field.totalPowerOutput = newField.totalPowerOutput;
field.currPowerOutput = 0;
field.x = newField.x;
field.y = newField.y;
emit Events.InitialFieldPurchased(msg.sender);
}
function _increaseHashrate(address player, uint256 hashrate) internal {
if (!miningHasStarted) {
miningHasStarted = true;
startTime = block.timestamp;
lastRewardTime = block.timestamp;
emit Events.MiningStarted(block.number);
}
_updateRewards(player);
totalHashrate += hashrate;
playerHashrate[player] += hashrate;
emit Events.PlayerHashrateIncreased(player, playerHashrate[player], playerPendingRewards[player]);
}
function claimRewards() external payable {
if (!miningHasStarted) revert Errors.MiningHasntStarted();
_updateRewards(msg.sender);
uint256 totalReward = playerPendingRewards[msg.sender];
if (totalReward > 0) {
uint256 timeDiff = block.timestamp - lastClaimTime[msg.sender];
uint256 hoursPassed = timeDiff / 3600;
uint256 burnPercent = 0;
uint256 startFee = 30;
if (hoursPassed >= startFee) {
burnPercent = 0;
} else {
burnPercent = startFee - hoursPassed;
}
uint256 currentPetroPrice = getPetroPrice();
uint256 claimValueInMon = (totalReward * currentPetroPrice) / 1e18;
uint256 requiredFee = (claimValueInMon * 10) / 100;
require(msg.value >= requiredFee, "Insufficient Pay-to-Claim Fee");
uint256 devShare = requiredFee / 2;
uint256 marketingShare = requiredFee - devShare;
payable(devWallet).transfer(devShare);
payable(marketingWallet).transfer(marketingShare);
emit ClaimFeePaid(msg.sender, requiredFee, devShare, marketingShare);
playerPendingRewards[msg.sender] = 0;
lastClaimTime[msg.sender] = block.timestamp;
uint256 burnAmount = (totalReward * burnPercent) / 100;
uint256 netReward = totalReward - burnAmount;
uint256 contractShare = (totalReward * 75) / 1000;
uint256 refShare = (totalReward * 25) / 1000;
IPetro(petroToken).mint(msg.sender, netReward);
address referrer = referrals[msg.sender];
if (referrer != address(0)) {
IPetro(petroToken).mint(address(this), contractShare);
referralPetroBalance[referrer] += refShare;
} else {
IPetro(petroToken).mint(address(this), contractShare + refShare);
}
emit Events.RewardsClaimed(msg.sender, netReward);
}
}
function _updateRewards(address player) internal {
_updateCumulativeRewards();
playerPendingRewards[player] += (playerHashrate[player] * (cumulativePetroPerHash - playerPetroDebt[player])) / REWARDS_PRECISION;
playerPetroDebt[player] = cumulativePetroPerHash;
}
function setLiquidityPair(address _pair, bool _enabled) external onlyOwner {
liquidityPair = _pair;
useOracle = _enabled;
emit OracleUpdated(_pair, _enabled);
}
function setManualPetroPrice(uint256 _priceInWei) external onlyOwner {
manualPetroPrice = _priceInWei;
}
function getPetroPrice() public view returns (uint256) {
if (!useOracle || liquidityPair == address(0)) {
return manualPetroPrice;
}
(uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(liquidityPair).getReserves();
address token0 = IUniswapV2Pair(liquidityPair).token0();
if (reserve0 == 0 || reserve1 == 0) return manualPetroPrice;
uint256 reserveMON;
uint256 reservePETRO;
if (token0 == petroToken) {
reservePETRO = reserve0;
reserveMON = reserve1;
} else {
reserveMON = reserve0;
reservePETRO = reserve1;
}
return (reserveMON * 1e18) / reservePETRO;
}
function setMarketingWallet(address _wallet) external onlyOwner {
marketingWallet = _wallet;
}
function setPhase(uint8 _phase) external onlyOwner {
currentPhase = _phase;
emit PhaseChanged(_phase);
}
function addWhitelistPhase1(address[] calldata _users) external onlyOwner {
for(uint i=0; i<_users.length; i++) {
whitelistPhase1[_users[i]] = true;
}
}
function addWhitelistPhase2(address[] calldata _users) external onlyOwner {
for(uint i=0; i<_users.length; i++) {
whitelistPhase2[_users[i]] = true;
}
}
function upgradeField() external {
require(currentPhase == 3, "Game has not started yet (Upgrades Locked)");
if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
require(block.timestamp >= lastUpgradeTime[msg.sender] + cooldown, "Cooldown active: Please wait.");
Field storage userField = ownerToField[msg.sender];
uint256 nextLevelIndex = userField.fieldIndex + 1;
if (nextLevelIndex > fieldCount) revert Errors.AlreadyAtMaxField();
NewField memory nextFieldData = fields[nextLevelIndex];
bool success = IPetro(petroToken).transferFrom(msg.sender, address(this), nextFieldData.cost);
require(success, "Token transfer failed");
if (nextFieldData.cost > 0) IPetro(petroToken).burn(nextFieldData.cost);
userField.fieldIndex = nextLevelIndex;
userField.maxRigs = nextFieldData.maxRigs;
userField.totalPowerOutput = nextFieldData.totalPowerOutput;
userField.x = nextFieldData.x;
userField.y = nextFieldData.y;
lastUpgradeTime[msg.sender] = block.timestamp;
emit FieldUpgraded(msg.sender, nextLevelIndex, nextFieldData.maxRigs, nextFieldData.totalPowerOutput);
}
function buyMiner(uint256 minerIndex, uint256 x, uint256 y) external {
require(currentPhase == 3, "Game has not started yet (Drilling Locked)");
if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
Rig memory rig = rigs[minerIndex];
if (rig.rigIndex == 0) revert Errors.NonExistentRig();
bool success = IPetro(petroToken).transferFrom(msg.sender, address(this), rig.cost);
require(success, "Token transfer failed");
if (rig.cost > 0) IPetro(petroToken).burn(rig.cost);
_mintRig(msg.sender, minerIndex, x, y, rig.cost);
}
function claimReferralEarnings() external {
uint256 amount = referralPetroBalance[msg.sender];
require(amount > 0, "No referral earnings");
referralPetroBalance[msg.sender] = 0;
IPetro(petroToken).mint(msg.sender, amount);
emit ReferralRewardClaimed(msg.sender, amount);
}
function getReferralStats(address user) external view returns (uint256 userCount, uint256 totalMon, uint256 pendingPetro) {
return (referredUsers[user].length, totalMonCommission[user], referralPetroBalance[user]);
}
function withdrawPetro() external onlyOwner {
uint256 balance = IPetro(petroToken).balanceOf(address(this));
require(balance > 0, "No PETRO");
IPetro(petroToken).transfer(devWallet, balance);
}
function withdrawMON() external onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No MON");
payable(devWallet).transfer(balance);
}
function getFreeStarterRig(uint256 x, uint256 y) external {
require(currentPhase == 3, "Game has not started yet (Drilling Locked)");
if (acquiredStarterRig[msg.sender]) revert Errors.StarterRigAlreadyAcquired();
if (!initializedStarterField[msg.sender]) revert Errors.NeedToInitializeField();
acquiredStarterRig[msg.sender] = true;
_mintRig(msg.sender, STARTER_RIG_INDEX, x, y, 0);
}
function removeRig(uint256 x, uint256 y) external {
if (!playerOccupiedCoords[msg.sender][x][y]) revert Errors.RigNotInProduction();
Field storage field = ownerToField[msg.sender];
uint256 rIndex = gridRigIndex[msg.sender][x][y];
Rig memory rigInfo = rigs[rIndex];
_updateRewards(msg.sender);
if (totalHashrate >= rigInfo.hashrate) {
totalHashrate -= rigInfo.hashrate;
} else {
totalHashrate = 0;
}
if (playerHashrate[msg.sender] >= rigInfo.hashrate) {
playerHashrate[msg.sender] -= rigInfo.hashrate;
} else {
playerHashrate[msg.sender] = 0;
}
if (field.currPowerOutput >= rigInfo.powerConsumption) {
field.currPowerOutput -= rigInfo.powerConsumption;
} else {
field.currPowerOutput = 0;
}
playerOccupiedCoords[msg.sender][x][y] = false;
gridRigIndex[msg.sender][x][y] = 0;
if (field.currRigs > 0) field.currRigs--;
emit Events.PlayerHashrateDecreased(msg.sender, playerHashrate[msg.sender], playerPendingRewards[msg.sender]);
}
function _mintRig(address player, uint256 rigIndex, uint256 x, uint256 y, uint256 cost) internal {
Rig memory rig = rigs[rigIndex];
Field storage field = ownerToField[player];
if (_isInvalidCoordinates(player, x, y, field.x, field.y)) revert Errors.InvalidRigCoordinates();
if (field.currRigs >= field.maxRigs) revert Errors.FieldAtMaxCapacity();
if (field.currPowerOutput + rig.powerConsumption > field.totalPowerOutput) revert Errors.FieldInadequatePowerOutput();
field.currPowerOutput += rig.powerConsumption;
universalRigId++;
rig.x = x;
rig.y = y;
rig.id = universalRigId;
playerOccupiedCoords[player][x][y] = true;
gridRigIndex[player][x][y] = rigIndex;
playerRigsOwned[player].add(universalRigId);
playerRigsId[universalRigId] = rig;
field.currRigs++;
_increaseHashrate(player, rig.hashrate);
emit Events.RigBought(player, player, rigIndex, cost, universalRigId, x, y);
}
function _isInvalidCoordinates(address player, uint256 desiredX, uint256 desiredY, uint256 fieldX, uint256 fieldY) internal view returns (bool) {
if (desiredX >= fieldX || desiredY >= fieldY) return true;
return playerOccupiedCoords[player][desiredX][desiredY];
}
function setPetro(address _petro) external onlyOwner {
petroToken = _petro;
}
function getNextFieldInfo(uint256 currentLevel) external view returns (uint256 cost, uint256 newMaxRigs, uint256 newPower) {
if (currentLevel >= fieldCount) return (0,0,0);
NewField memory next = fields[currentLevel + 1];
return (next.cost, next.maxRigs, next.totalPowerOutput);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyAtMaxField","type":"error"},{"inputs":[],"name":"AlreadyPurchasedInitialField","type":"error"},{"inputs":[],"name":"FieldAtMaxCapacity","type":"error"},{"inputs":[],"name":"FieldInadequatePowerOutput","type":"error"},{"inputs":[],"name":"IncorrectValue","type":"error"},{"inputs":[],"name":"InvalidRigCoordinates","type":"error"},{"inputs":[],"name":"MiningHasntStarted","type":"error"},{"inputs":[],"name":"NeedToInitializeField","type":"error"},{"inputs":[],"name":"NonExistentRig","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"RigNotInProduction","type":"error"},{"inputs":[],"name":"StarterRigAlreadyAcquired","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingShare","type":"uint256"}],"name":"ClaimFeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxRigs","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPower","type":"uint256"}],"name":"FieldUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"InitialFieldPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"MiningStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fieldIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxRigs","type":"uint256"}],"name":"NewFieldAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rigIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hashrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"NewRigAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"OracleUpdated","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":"uint8","name":"newPhase","type":"uint8"}],"name":"PhaseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerHashrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerHashrateDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerHashrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerHashrateIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralRewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"rigIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rigId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"RigBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"UsersMigrated","type":"event"},{"inputs":[],"name":"HALVING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_PETRO_PER_SECOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE1_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE2_PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHASE2_WL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARDS_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_FIELD_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_RIG_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acquiredStarterRig","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxRigs","type":"uint256"},{"internalType":"uint256","name":"totalPowerOutput","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"addNewField","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hashrate","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"addNewRig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistPhase1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistPhase2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minerIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"buyMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferralEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativePetroPerHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPhase","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fieldCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fields","outputs":[{"internalType":"uint256","name":"maxRigs","type":"uint256"},{"internalType":"uint256","name":"totalPowerOutput","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentRewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"getFreeStarterRig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentLevel","type":"uint256"}],"name":"getNextFieldInfo","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"newMaxRigs","type":"uint256"},{"internalType":"uint256","name":"newPower","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPetroPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferralStats","outputs":[{"internalType":"uint256","name":"userCount","type":"uint256"},{"internalType":"uint256","name":"totalMon","type":"uint256"},{"internalType":"uint256","name":"pendingPetro","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"gridRigIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialFieldPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initializedStarterField","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpgradeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualPetroPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"migrateUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"miningHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerToField","outputs":[{"internalType":"uint256","name":"fieldIndex","type":"uint256"},{"internalType":"uint256","name":"maxRigs","type":"uint256"},{"internalType":"uint256","name":"currRigs","type":"uint256"},{"internalType":"uint256","name":"totalPowerOutput","type":"uint256"},{"internalType":"uint256","name":"currPowerOutput","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"petroToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerHashrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerOccupiedCoords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPetroDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerRigsId","outputs":[{"internalType":"uint256","name":"rigIndex","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"hashrate","type":"uint256"},{"internalType":"uint256","name":"powerConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerRigsOwned","outputs":[{"internalType":"uint256","name":"_spacer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"purchaseInitialField","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralPetroBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"referredUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"removeRig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rigs","outputs":[{"internalType":"uint256","name":"rigIndex","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"hashrate","type":"uint256"},{"internalType":"uint256","name":"powerConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceInWei","type":"uint256"}],"name":"setManualPetroPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_petro","type":"address"}],"name":"setPetro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_phase","type":"uint8"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHashrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalMonCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPetroMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPlayers","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":[],"name":"uniqueRigCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upgradeField","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPhase1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPhase2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPetro","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040526004805460ff60a01b19169055655af3107a4000600555620151806010556023805460ff19169055685150ae84a8cdf0000060245534801562000045575f80fd5b5033806200006c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000778162000709565b5060028054336001600160a01b03199182168117909255600380549091169091179055620000a9606460015f62000758565b6001608052620000c660b460066801236efcbcbb34000062000758565b620000df6101a460086801f399b1438a10000062000758565b620000f86102d0600a6802ed6689e54f18000062000758565b620001116103e8600a680340aad21b3b70000062000758565b6200012a611388601e6809c2007651b250000062000758565b62000143613a9860326814542ba12a337c000062000758565b6200015c614e20605a682086ac35105260000062000758565b6200017561ea6060c868410d586a20a4c0000062000758565b6200019062030d4061025868c328093e61ee40000062000758565b620001ac62111700610c806901b1ae4d6e2ef500000062000758565b620001c8620c35006107d06901e7e4171bf4d3a0000062000758565b620001e4621462c0610bb869028a857425466f80000062000758565b62000200622644e06113886903cfc82e37e9a740000062000758565b6200021c623529606111946905ede20f01a45980000062000758565b6040518060c0016040528060048152602001601c81526020015f81526020015f1515815260200160028152602001600281525060175f600a5f8154620002629062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a08201518160050155905050600a5460a081815250506040518060c001604052806008815260200160a88152602001680b6255df5f5008000081526020015f1515815260200160028152602001600481525060175f600a5f8154620003209062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c00160405280600c81526020016101a48152602001683cfc82e37e9a74000081526020015f1515815260200160038152602001600481525060175f600a5f8154620003d59062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060108152602001610460815260200168302379bf2ca2e0000081526020015f1515815260200160048152602001600481525060175f600a5f81546200048a9062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001611b5881526020016839bbd811635f04000081526020015f1515815260200160048152602001600581525060175f600a5f81546200053f9062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001613345815260200168451e2df0c2af0c000081526020015f1515815260200160048152602001600581525060175f600a5f8154620005f49062000802565b91905081905581526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff0219169083151502179055506080820151816004015560a082015181600501559050506040518060c0016040528060148152602001614ce58152602001688a3c5be1855e18000081526020015f1515815260200160048152602001600581525060175f600a5f8154620006a99062000802565b9182905550815260208082019290925260409081015f20835181559183015160018301558201516002820155606082015160038201805460ff19169115159190911790556080820151600482015560a09091015160059091015562000827565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60098054905f620007698362000802565b909155505060408051610100810182526009548082525f1960208084018281528486018381526060860193845260808601998a5260a0860198895260c086019788525f60e087018181529581526016909352959091209351845551600184015592516002830155915160038201559351600485015591516005840155516006830155516007909101805460ff1916911515919091179055565b5f600182016200082057634e487b7160e01b5f52601160045260245ffd5b5060010190565b60805160a05161383c620008655f395f81816108e201528181611e9001528181612b4d0152612c7f01525f8181610b63015261227a015261383c5ff3fe608060405260043610610416575f3560e01c8063787a08a611610220578063bb485bbd11610129578063e2b15d8c116100b3578063f37785a211610078578063f37785a214610e48578063f537967114610e5c578063f60cdcf614610e7b578063f6934a9f14610e90578063f86f25ee14610ebb575f80fd5b8063e2b15d8c14610d9b578063e92820e614610dda578063efc5119414610df9578063f2fde38b14610e15578063f322b65f14610e34575f80fd5b8063c7fda104116100f9578063c7fda10414610cdb578063cc53b27614610d3a578063d013eb0a14610d68578063d09d4abd14610a66578063dff657c314610d87575f80fd5b8063bb485bbd14610c5a578063bbb1239214610c6f578063c03afb5914610c8e578063c2df398214610cad575f80fd5b80639231cf74116101aa578063a9bc82491161017a578063a9bc824914610b3d578063ad154c6814610b52578063b3c0d5e414610b85578063b55de1a814610ba4578063b77cf9c614610c2f575f80fd5b80639231cf7414610abc57806394fc19e414610ad15780639ca423b314610aea578063a269435d14610b1e575f80fd5b806384caff83116101f057806384caff8314610a3257806384db13d214610a4757806386b3cd2614610a665780638da5cb5b14610a815780638ea5220f14610a9d575f80fd5b8063787a08a6146109d557806378e97925146109ea578063808a5457146109ff57806384ae48b514610a1e575f80fd5b8063372500ab116103225780634fe6f7a9116102ac5780635f7f44e11161027c5780635f7f44e11461094b5780636a8fa04114610979578063715018a61461098d57806375ddec4b146109a157806375f0a874146109b6575f80fd5b80634fe6f7a9146108d157806356fbab7a146109045780635a5ccef0146109175780635d098b381461092c575f80fd5b806341f09ea6116102f257806341f09ea61461082d578063426222d5146108485780634487872414610873578063476e2e66146108935780634df9d6ba146108b2575f80fd5b8063372500ab146107b95780633adde9c1146107c15780633d5e1f1e146107d757806340f5da9e14610802575f80fd5b80631c52ef27116103a3578063234f3f1b11610373578063234f3f1b14610710578063238760641461073b5780632aabc69e1461075a5780633041a5201461077957806333437f64146107a4575f80fd5b80631c52ef27146106915780631dbd6bc8146106a65780631ea4bab7146106ba57806321bade13146106d6575f80fd5b806307604998116103e9578063076049981461053e57806312544abc14610588578063136d5072146105a757806316ccbed2146105d25780631913785614610610575f80fd5b80630504023b1461041a57806305244d771461043b578063055ad42e146104dc57806306bbf22814610507575b5f80fd5b348015610425575f80fd5b50610439610434366004613470565b610eda565b005b348015610446575f80fd5b5061049a61045536600461348b565b60166020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939492939192909160ff1688565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100015b60405180910390f35b3480156104e7575f80fd5b506023546104f59060ff1681565b60405160ff90911681526020016104d3565b348015610512575f80fd5b50600154610526906001600160a01b031681565b6040516001600160a01b0390911681526020016104d3565b348015610549575f80fd5b5061057a6105583660046134a2565b601e60209081525f938452604080852082529284528284209052825290205481565b6040519081526020016104d3565b348015610593575f80fd5b506104396105a23660046134d4565b610f04565b3480156105b2575f80fd5b5061057a6105c1366004613470565b60186020525f908152604090205481565b3480156105dd575f80fd5b506106006105ec366004613470565b601b6020525f908152604090205460ff1681565b60405190151581526020016104d3565b34801561061b575f80fd5b5061066261062a36600461348b565b60176020525f908152604090208054600182015460028301546003840154600485015460059095015493949293919260ff9091169186565b6040805196875260208701959095529385019290925215156060840152608083015260a082015260c0016104d3565b34801561069c575f80fd5b5061057a600f5481565b3480156106b1575f80fd5b5061057a610f80565b3480156106c5575f80fd5b5061057a683635c9adc5dea0000081565b3480156106e1575f80fd5b506106f56106f0366004613470565b61112a565b604080519384526020840192909252908201526060016104d3565b34801561071b575f80fd5b5061057a61072a366004613470565b60136020525f908152604090205481565b348015610746575f80fd5b50610439610755366004613550565b61115b565b348015610765575f80fd5b506106f561077436600461348b565b6111cf565b348015610784575f80fd5b5061057a610793366004613470565b60216020525f908152604090205481565b3480156107af575f80fd5b5061057a60095481565b61043961125f565b3480156107cc575f80fd5b5061057a6207e90081565b3480156107e2575f80fd5b5061057a6107f1366004613470565b60116020525f908152604090205481565b34801561080d575f80fd5b5061057a61081c366004613470565b60146020525f908152604090205481565b348015610838575f80fd5b5061057a6739d2f941e420aaaa81565b348015610853575f80fd5b5061057a610862366004613470565b60156020525f908152604090205481565b34801561087e575f80fd5b5060045461060090600160a01b900460ff1681565b34801561089e575f80fd5b506104396108ad366004613587565b611694565b3480156108bd575f80fd5b5061057a6108cc366004613470565b6118bf565b3480156108dc575f80fd5b5061057a7f000000000000000000000000000000000000000000000000000000000000000081565b610439610912366004613470565b6119b6565b348015610922575f80fd5b5061057a600e5481565b348015610937575f80fd5b50610439610946366004613470565b611f68565b348015610956575f80fd5b50610600610965366004613470565b601c6020525f908152604090205460ff1681565b348015610984575f80fd5b50610439611f92565b348015610998575f80fd5b506104396120ba565b3480156109ac575f80fd5b5061057a60245481565b3480156109c1575f80fd5b50600354610526906001600160a01b031681565b3480156109e0575f80fd5b5061057a60105481565b3480156109f5575f80fd5b5061057a60065481565b348015610a0a575f80fd5b50600454610526906001600160a01b031681565b348015610a29575f80fd5b506104396120cd565b348015610a3d575f80fd5b5061057a60055481565b348015610a52575f80fd5b50610439610a6136600461348b565b6121c9565b348015610a71575f80fd5b5061057a670de0b6b3a764000081565b348015610a8c575f80fd5b505f546001600160a01b0316610526565b348015610aa8575f80fd5b50600254610526906001600160a01b031681565b348015610ac7575f80fd5b5061057a600d5481565b348015610adc575f80fd5b506007546106009060ff1681565b348015610af5575f80fd5b50610526610b04366004613470565b601f6020525f90815260409020546001600160a01b031681565b348015610b29575f80fd5b50610439610b383660046135b0565b6121d6565b348015610b48575f80fd5b5061057a600c5481565b348015610b5d575f80fd5b5061057a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b90575f80fd5b50610439610b9f3660046134d4565b6122a3565b348015610baf575f80fd5b50610bfa610bbe366004613470565b601a6020525f90815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016104d3565b348015610c3a575f80fd5b5061057a610c49366004613470565b60126020525f908152604090205481565b348015610c65575f80fd5b5061057a600a5481565b348015610c7a575f80fd5b50610439610c893660046135d0565b61231a565b348015610c99575f80fd5b50610439610ca8366004613607565b612403565b348015610cb8575f80fd5b50610600610cc7366004613470565b60256020525f908152604090205460ff1681565b348015610ce6575f80fd5b5061049a610cf536600461348b565b60196020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939492939192909160ff1688565b348015610d45575f80fd5b50610600610d54366004613470565b60266020525f908152604090205460ff1681565b348015610d73575f80fd5b50610439610d823660046135b0565b612453565b348015610d92575f80fd5b5061057a6126b6565b348015610da6575f80fd5b50610600610db53660046134a2565b601d60209081525f938452604080852082529284528284209052825290205460ff1681565b348015610de5575f80fd5b50610526610df4366004613627565b61270a565b348015610e04575f80fd5b5061057a681b1ae4d6e2ef50000081565b348015610e20575f80fd5b50610439610e2f366004613470565b61273d565b348015610e3f575f80fd5b50610439612777565b348015610e53575f80fd5b506104396127ed565b348015610e67575f80fd5b50610439610e763660046134d4565b612b43565b348015610e86575f80fd5b5061057a600b5481565b348015610e9b575f80fd5b5061057a610eaa366004613470565b60226020525f908152604090205481565b348015610ec6575f80fd5b50610439610ed5366004613587565b612d18565b610ee2612d6b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f0c612d6b565b5f5b81811015610f7b57600160265f858585818110610f2d57610f2d613651565b9050602002016020810190610f429190613470565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580610f7381613679565b915050610f0e565b505050565b6004545f90600160a01b900460ff161580610fa457506004546001600160a01b0316155b15610fb0575060055490565b6004805460408051630240bc6b60e21b815290515f9384936001600160a01b031692630902f1ac92818301926060928290030181865afa158015610ff6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a91906136ac565b50915091505f60045f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109491906136f8565b90506001600160701b03831615806110b357506001600160701b038216155b156110c357600554935050505090565b6001545f9081906001600160a01b03908116908416036110f25750506001600160701b03828116908416611103565b50506001600160701b038084169083165b8061111683670de0b6b3a7640000613713565b6111209190613730565b9550505050505090565b6001600160a01b0381165f9081526020808052604080832054602283528184205460219093529220545b9193909250565b611163612d6b565b600480546001600160a01b0384166001600160a81b03199091168117600160a01b841515908102919091179092556040805191825260208201929092527f94c9cbe1d9aa7af08484f82ab0179d6db973a391236668c34192d954ff32c06c910160405180910390a15050565b5f805f600a5484106111e857505f915081905080611154565b5f6017816111f787600161374f565b815260208082019290925260409081015f20815160c081018352815480825260018301549482018590526002830154938201849052600383015460ff16151560608301526004830154608083015260059092015460a090910152909790965090945092505050565b60075460ff1661128257604051633017f16560e11b815260040160405180910390fd5b61128b33612d97565b335f90815260146020526040902054801561169157335f908152601260205260408120546112b99042613762565b90505f6112c8610e1083613730565b90505f601e8083106112dc575f91506112e9565b6112e68382613762565b91505b5f6112f2610f80565b90505f670de0b6b3a76400006113088389613713565b6113129190613730565b90505f606461132283600a613713565b61132c9190613730565b9050803410156113835760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74205061792d746f2d436c61696d2046656500000060448201526064015b60405180910390fd5b5f61138f600283613730565b90505f61139c8284613762565b6002546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156113d4573d5f803e3d5ffd5b506003546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561140c573d5f803e3d5ffd5b50604080518481526020810184905290810182905233907fb3aa4172b89ad35b55207df3917001046668de5f42c54b312c9e0b02e2968c8b9060600160405180910390a2335f90815260146020908152604080832083905560129091528120429055606461147a898d613713565b6114849190613730565b90505f611491828d613762565b90505f6103e86114a28e604b613713565b6114ac9190613730565b90505f6103e86114bd8f6019613713565b6114c79190613730565b6001546040516340c10f1960e01b8152336004820152602481018690529192506001600160a01b0316906340c10f19906044015f604051808303815f87803b158015611511575f80fd5b505af1158015611523573d5f803e3d5ffd5b5050335f908152601f60205260409020546001600160a01b031691505080156115d7576001546040516340c10f1960e01b8152306004820152602481018590526001600160a01b03909116906340c10f19906044015f604051808303815f87803b15801561158f575f80fd5b505af11580156115a1573d5f803e3d5ffd5b505050506001600160a01b0381165f90815260216020526040812080548492906115cc90849061374f565b9091555061164d9050565b6001546001600160a01b03166340c10f19306115f3858761374f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611636575f80fd5b505af1158015611648573d5f803e3d5ffd5b505050505b60405184815233907ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9060200160405180910390a250505050505050505050505050505b50565b60235460ff166003146116b95760405162461bcd60e51b815260040161137a90613775565b335f908152601b602052604090205460ff166116e85760405163350ac7f360e01b815260040160405180910390fd5b5f83815260166020908152604080832081516101008101835281548082526001830154948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460ff16151560e082015291036117735760405163990e7a0b60e01b815260040160405180910390fd5b60015460c08201516040516323b872dd60e01b815233600482015230602482015260448101919091525f916001600160a01b0316906323b872dd906064016020604051808303815f875af11580156117cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f191906137bf565b9050806118385760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015260640161137a565b60c0820151156118a75760015460c0830151604051630852cd8d60e31b81526001600160a01b03909216916342966c68916118799160040190815260200190565b5f604051808303815f87803b158015611890575f80fd5b505af11580156118a2573d5f803e3d5ffd5b505050505b6118b8338686868660c00151612e43565b5050505050565b600f54600d545f9190421180156118d75750600e5415155b15611935575f600d54426118eb9190613762565b90505f6118f66126b6565b90505f6119038284613713565b600e5490915061191b670de0b6b3a764000083613713565b6119259190613730565b61192f908561374f565b93505050505b6001600160a01b0383165f90815260156020526040902054670de0b6b3a7640000906119619083613762565b6001600160a01b0385165f908152601360205260409020546119839190613713565b61198d9190613730565b6001600160a01b0384165f908152601460205260409020546119af919061374f565b9392505050565b335f908152601b602052604090205460ff16156119e65760405163120d9bd960e11b815260040160405180910390fd5b60235460ff16611a2c5760405162461bcd60e51b815260206004820152601160248201527014d85b195cc81b9bdd081cdd185c9d1959607a1b604482015260640161137a565b6023545f9060ff16600103611aa857335f9081526025602052604090205460ff16611a995760405162461bcd60e51b815260206004820152601b60248201527f4e6f742057686974656c697374656420666f7220506861736520310000000000604482015260640161137a565b50670de0b6b3a7640000611b34565b60235460ff16600203611aec57335f9081526026602052604090205460ff1615611adc5750681b1ae4d6e2ef500000611b34565b50683635c9adc5dea00000611b34565b506024546001600160a01b03821615801590611b1157506001600160a01b0382163314155b15611b34576064602454605a611b279190613713565b611b319190613730565b90505b80341015611b5557604051636956f2ab60e11b815260040160405180910390fd5b5f6001600160a01b03831615801590611b7757506001600160a01b0383163314155b8015611b88575060235460ff166003145b90508015611d63575f6064602454600a611ba29190613713565b611bac9190613730565b90505f611bb98234613762565b6040519091506001600160a01b0386169083156108fc029084905f818181858888f19350505050158015611bef573d5f803e3d5ffd5b506001600160a01b0385165f9081526022602052604081208054849290611c1790849061374f565b9091555050335f818152601f6020908152604080832080546001600160a01b03808c166001600160a01b0319928316811790935591855283805291842080546001810182559085529290932090910180549091169092179091556003541615801590611c9457506002546003546001600160a01b03908116911614155b15611d23575f611ca5600283613730565b6002546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611cdd573d5f803e3d5ffd5b506003546001600160a01b03166108fc611cf78385613762565b6040518115909202915f818181858888f19350505050158015611d1c573d5f803e3d5ffd5b5050611d5c565b6002546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611d5a573d5f803e3d5ffd5b505b5050611e4e565b6003546001600160a01b031615801590611d8e57506002546003546001600160a01b03908116911614155b15611e16575f611d9f600234613730565b6002546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611dd7573d5f803e3d5ffd5b506003546001600160a01b03166108fc611df18334613762565b6040518115909202915f818181858888f19350505050158015611d5c573d5f803e3d5ffd5b6002546040516001600160a01b03909116903480156108fc02915f818181858888f19350505050158015611e4c573d5f803e3d5ffd5b505b335f908152601b60205260408120805460ff19166001179055600b805491611e7583613679565b9091555050335f8181526012602090815260408083204290557f000000000000000000000000000000000000000000000000000000000000000080845260178352818420825160c0810184528154815260018083015482870190815260028401548387015260038085015460ff16151560608501526004808601546080860190815260059687015460a087019081528c8c52601a909a52888b20978855855194880194909455915190860155840187905551918301919091559251600682015590519193909290917febe01df6d96920585e2744874d810e5560bc050e9ff947aa34f10422a33cbc279190a25050505050565b611f70612d6b565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611f9a612d6b565b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611fe0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061200491906137da565b90505f81116120405760405162461bcd60e51b81526020600482015260086024820152674e6f20504554524f60c01b604482015260640161137a565b60015460025460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b691906137bf565b5050565b6120c2612d6b565b6120cb5f6130fb565b565b335f90815260216020526040902054806121205760405162461bcd60e51b81526020600482015260146024820152734e6f20726566657272616c206561726e696e677360601b604482015260640161137a565b335f818152602160205260408082209190915560015490516340c10f1960e01b81526004810192909252602482018390526001600160a01b0316906340c10f19906044015f604051808303815f87803b15801561217b575f80fd5b505af115801561218d573d5f803e3d5ffd5b50506040518381523392507f5be4d22009fea85381595ed91090bc5c0bc92a93fe07ed7472c5888eb1993f83915060200160405180910390a250565b6121d1612d6b565b600555565b60235460ff166003146121fb5760405162461bcd60e51b815260040161137a90613775565b335f908152601c602052604090205460ff161561222b57604051639d38dc2760e01b815260040160405180910390fd5b335f908152601b602052604090205460ff1661225a5760405163350ac7f360e01b815260040160405180910390fd5b335f818152601c60205260408120805460ff191660011790556120b691907f00000000000000000000000000000000000000000000000000000000000000009085908590612e43565b6122ab612d6b565b5f5b81811015610f7b57600160255f8585858181106122cc576122cc613651565b90506020020160208101906122e19190613470565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061231281613679565b9150506122ad565b612322612d6b565b6040518060c001604052808681526020018581526020018481526020015f151581526020018381526020018281525060175f600a5f815461236290613679565b9182905550815260208082019290925260409081015f208351815583830151600182015583820151600282015560608085015160038301805460ff19169115159190911790556080850151600483015560a090940151600590910155600a54815190815291820186905281018790527f47d717b6b55d68dba6b9044d2f7a4eac7b376a5ce11ed5de835b8c83c829f354910160405180910390a15050505050565b61240b612d6b565b6023805460ff191660ff83169081179091556040519081527fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c46429060200160405180910390a150565b335f908152601d60209081526040808320858452825280832084845290915290205460ff1661249557604051635522b5a360e01b815260040160405180910390fd5b335f818152601a60209081526040808320601e835281842087855283528184208685528352818420548085526016845293829020825161010081018452815481526001820154948101949094526002810154928401929092526003820154606084015260048201546080840152600582015460a0840152600682015460c084015260079091015460ff16151560e08301529261253090612d97565b8060800151600e541061255d578060800151600e5f8282546125529190613762565b909155506125629050565b5f600e555b6080810151335f90815260136020526040902054106125a9576080810151335f908152601360205260408120805490919061259e908490613762565b909155506125b99050565b335f908152601360205260408120555b8060a001518360040154106125ea578060a00151836004015f8282546125df9190613762565b909155506125f19050565b5f60048401555b335f818152601d6020908152604080832089845282528083208884528252808320805460ff19169055928252601e8152828220888352815282822087835290529081205560028301541561265657600283018054905f612650836137f1565b91905055505b335f818152601360209081526040808320546014909252918290205491517fe331ada0d0e61e9a4196bf4994f2519193d70a601daff346c4276d591664da9a926126a7928252602082015260400190565b60405180910390a25050505050565b6007545f9060ff166126c757505f90565b5f600654426126d69190613762565b90505f6126e66207e90083613730565b905060408111156126f9575f9250505090565b6739d2f941e420aaaa901c92915050565b60208052815f5260405f208181548110612722575f80fd5b5f918252602090912001546001600160a01b03169150829050565b612745612d6b565b6001600160a01b03811661276e57604051631e4fbdf760e01b81525f600482015260240161137a565b611691816130fb565b61277f612d6b565b47806127b65760405162461bcd60e51b815260206004820152600660248201526527379026a7a760d11b604482015260640161137a565b6002546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156120b6573d5f803e3d5ffd5b60235460ff166003146128555760405162461bcd60e51b815260206004820152602a60248201527f47616d6520686173206e6f7420737461727465642079657420285570677261646044820152696573204c6f636b65642960b01b606482015260840161137a565b335f908152601b602052604090205460ff166128845760405163350ac7f360e01b815260040160405180910390fd5b601054335f908152601160205260409020546128a0919061374f565b4210156128ef5760405162461bcd60e51b815260206004820152601d60248201527f436f6f6c646f776e206163746976653a20506c6561736520776169742e000000604482015260640161137a565b335f908152601a60205260408120805490919061290d90600161374f565b9050600a5481111561293257604051633196792f60e11b815260040160405180910390fd5b5f818152601760209081526040808320815160c08101835281548152600180830154948201949094526002820154818401819052600383015460ff1615156060830152600480840154608084015260059093015460a0830152935492516323b872dd60e01b8152339281019290925230602483015260448201939093529192916001600160a01b03909116906323b872dd906064016020604051808303815f875af11580156129e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0791906137bf565b905080612a4e5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015260640161137a565b604082015115612abd576001546040808401519051630852cd8d60e31b81526001600160a01b03909216916342966c6891612a8f9160040190815260200190565b5f604051808303815f87803b158015612aa6575f80fd5b505af1158015612ab8573d5f803e3d5ffd5b505050505b828455815160018501556020808301805160038701556080840151600587015560a08401516006870155335f8181526011845260409081902042905585519251815188815294850193909352830191909152907f1957c3ddde972a0f75f4e54bddd65ada5f0810c35dee609b075fc2d92ec399a99060600160405180910390a250505050565b612b4b612d6b565b7f00000000000000000000000000000000000000000000000000000000000000005f908152601760209081526040808320815160c08101835281548152600182015493810193909352600281015491830191909152600381015460ff1615156060830152600481015460808301526005015460a0820152905b82811015612cde575f848483818110612bdf57612bdf613651565b9050602002016020810190612bf49190613470565b6001600160a01b0381165f908152601b602052604090205490915060ff16612ccb576001600160a01b0381165f908152601b60205260408120805460ff19166001179055600b805491612c4683613679565b9091555050600f546001600160a01b0382165f9081526015602090815260408083209390935560128152828220429055601a81529181207f000000000000000000000000000000000000000000000000000000000000000081558551600182015591850151600383015560048201556080840151600582015560a08401516006909101555b5080612cd681613679565b915050612bc4565b506040518281527fcc3ea4ccc3876221c238f6e5d8f2ae37a892fdafcf77b9889ebe193958128efd906020015b60405180910390a1505050565b612d20612d6b565b612d2b83838361314a565b600954604080519182526020820185905281018290527f87c2af2747de4bc7935697bdac2c724ce1a28877f21caba0bee6acf1f141643290606001612d0b565b5f546001600160a01b031633146120cb5760405163118cdaa760e01b815233600482015260240161137a565b612d9f6131f2565b6001600160a01b0381165f90815260156020526040902054600f54670de0b6b3a764000091612dcd91613762565b6001600160a01b0383165f90815260136020526040902054612def9190613713565b612df99190613730565b6001600160a01b0382165f9081526014602052604081208054909190612e2090849061374f565b9091555050600f546001600160a01b039091165f90815260156020526040902055565b5f84815260166020908152604080832081516101008101835281548152600182015481850152600282015481840152600382015460608201526004820154608082015260058083015460a083015260068084015460c084015260079093015460ff16151560e08301526001600160a01b038b168652601a9094529190932091820154928201549092612edb9189918891889190613273565b15612ef957604051631f9aa14f60e11b815260040160405180910390fd5b8060010154816002015410612f2157604051636d6cfd7d60e11b815260040160405180910390fd5b80600301548260a001518260040154612f3a919061374f565b1115612f5957604051630f576a4f60e41b815260040160405180910390fd5b8160a00151816004015f828254612f70919061374f565b909155505060088054905f612f8483613679565b9091555050604080830186905260608301859052600880546020808601919091526001600160a01b038a165f818152601d83528481208a825283528481208982528352848120805460ff19166001179055818152601e83528481208a8252835284812089825283528481208b905592549083526018909152919020613008916132c9565b506008545f90815260196020908152604080832085518155918501516001830155840151600280830191909155606085015160038301556080850151600483015560a0850151600583015560c0850151600683015560e08501516007909201805460ff191692151592909217909155820180549161308583613679565b91905055506130988783608001516132d4565b60085460408051858152602081019290925281018690526060810185905286906001600160a01b0389169081907fbb355279b9cc8558bd03d4b1dbb0007f6e6dc26a512f267d829ada5da913cee79060800160405180910390a450505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60098054905f61315983613679565b909155505060408051610100810182526009548082525f1960208084018281528486018381526060860193845260808601998a5260a0860198895260c086019788525f60e087018181529581526016909352959091209351845551600184015592516002830155915160038201559351600485015591516005840155516006830155516007909101805460ff1916911515919091179055565b600d5442116131fd57565b600e545f0361320c5742600d55565b5f600d544261321b9190613762565b90505f6132266126b6565b90505f6132338284613713565b600e5490915061324b670de0b6b3a764000083613713565b6132559190613730565b600f5f828254613265919061374f565b909155505042600d55505050565b5f82851015806132835750818410155b15613290575060016132c0565b506001600160a01b0385165f908152601d60209081526040808320878452825280832086845290915290205460ff165b95945050505050565b5f6119af83836133e0565b60075460ff1661332f576007805460ff19166001179055426006819055600d556040517fdaae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c906133269043815260200190565b60405180910390a15b61333882612d97565b80600e5f828254613349919061374f565b90915550506001600160a01b0382165f908152601360205260408120805483929061337590849061374f565b90915550506001600160a01b0382165f818152601360209081526040808320546014909252918290205491517fa051d58ced8df58040b29d2c939da70a826ae40290f77c9a66b38b8b85315f65926133d4928252602082015260400190565b60405180910390a25050565b6318fb58646004525f8281526024812068fbb67fda52d4bfb8bf830361340d5763f5a267f15f526004601cfd5b8261341f5768fbb67fda52d4bfb8bf92505b80602052825f5260405f20805461345457811954805f52848160011c8401558060011c60010182556002810183195550600192505b505092915050565b6001600160a01b0381168114611691575f80fd5b5f60208284031215613480575f80fd5b81356119af8161345c565b5f6020828403121561349b575f80fd5b5035919050565b5f805f606084860312156134b4575f80fd5b83356134bf8161345c565b95602085013595506040909401359392505050565b5f80602083850312156134e5575f80fd5b823567ffffffffffffffff808211156134fc575f80fd5b818501915085601f83011261350f575f80fd5b81358181111561351d575f80fd5b8660208260051b8501011115613531575f80fd5b60209290920196919550909350505050565b8015158114611691575f80fd5b5f8060408385031215613561575f80fd5b823561356c8161345c565b9150602083013561357c81613543565b809150509250929050565b5f805f60608486031215613599575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156135c1575f80fd5b50508035926020909101359150565b5f805f805f60a086880312156135e4575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f60208284031215613617575f80fd5b813560ff811681146119af575f80fd5b5f8060408385031215613638575f80fd5b82356136438161345c565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161368a5761368a613665565b5060010190565b80516001600160701b03811681146136a7575f80fd5b919050565b5f805f606084860312156136be575f80fd5b6136c784613691565b92506136d560208501613691565b9150604084015163ffffffff811681146136ed575f80fd5b809150509250925092565b5f60208284031215613708575f80fd5b81516119af8161345c565b808202811582820484141761372a5761372a613665565b92915050565b5f8261374a57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561372a5761372a613665565b8181038181111561372a5761372a613665565b6020808252602a908201527f47616d6520686173206e6f7420737461727465642079657420284472696c6c696040820152696e67204c6f636b65642960b01b606082015260800190565b5f602082840312156137cf575f80fd5b81516119af81613543565b5f602082840312156137ea575f80fd5b5051919050565b5f816137ff576137ff613665565b505f19019056fea26469706673582212206d951f7ac4f0d052329a23db1492f6fb45a120ca79422b48a36a82b67b932ee664736f6c63430008140033
Deployed Bytecode
0x608060405260043610610416575f3560e01c8063787a08a611610220578063bb485bbd11610129578063e2b15d8c116100b3578063f37785a211610078578063f37785a214610e48578063f537967114610e5c578063f60cdcf614610e7b578063f6934a9f14610e90578063f86f25ee14610ebb575f80fd5b8063e2b15d8c14610d9b578063e92820e614610dda578063efc5119414610df9578063f2fde38b14610e15578063f322b65f14610e34575f80fd5b8063c7fda104116100f9578063c7fda10414610cdb578063cc53b27614610d3a578063d013eb0a14610d68578063d09d4abd14610a66578063dff657c314610d87575f80fd5b8063bb485bbd14610c5a578063bbb1239214610c6f578063c03afb5914610c8e578063c2df398214610cad575f80fd5b80639231cf74116101aa578063a9bc82491161017a578063a9bc824914610b3d578063ad154c6814610b52578063b3c0d5e414610b85578063b55de1a814610ba4578063b77cf9c614610c2f575f80fd5b80639231cf7414610abc57806394fc19e414610ad15780639ca423b314610aea578063a269435d14610b1e575f80fd5b806384caff83116101f057806384caff8314610a3257806384db13d214610a4757806386b3cd2614610a665780638da5cb5b14610a815780638ea5220f14610a9d575f80fd5b8063787a08a6146109d557806378e97925146109ea578063808a5457146109ff57806384ae48b514610a1e575f80fd5b8063372500ab116103225780634fe6f7a9116102ac5780635f7f44e11161027c5780635f7f44e11461094b5780636a8fa04114610979578063715018a61461098d57806375ddec4b146109a157806375f0a874146109b6575f80fd5b80634fe6f7a9146108d157806356fbab7a146109045780635a5ccef0146109175780635d098b381461092c575f80fd5b806341f09ea6116102f257806341f09ea61461082d578063426222d5146108485780634487872414610873578063476e2e66146108935780634df9d6ba146108b2575f80fd5b8063372500ab146107b95780633adde9c1146107c15780633d5e1f1e146107d757806340f5da9e14610802575f80fd5b80631c52ef27116103a3578063234f3f1b11610373578063234f3f1b14610710578063238760641461073b5780632aabc69e1461075a5780633041a5201461077957806333437f64146107a4575f80fd5b80631c52ef27146106915780631dbd6bc8146106a65780631ea4bab7146106ba57806321bade13146106d6575f80fd5b806307604998116103e9578063076049981461053e57806312544abc14610588578063136d5072146105a757806316ccbed2146105d25780631913785614610610575f80fd5b80630504023b1461041a57806305244d771461043b578063055ad42e146104dc57806306bbf22814610507575b5f80fd5b348015610425575f80fd5b50610439610434366004613470565b610eda565b005b348015610446575f80fd5b5061049a61045536600461348b565b60166020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939492939192909160ff1688565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100015b60405180910390f35b3480156104e7575f80fd5b506023546104f59060ff1681565b60405160ff90911681526020016104d3565b348015610512575f80fd5b50600154610526906001600160a01b031681565b6040516001600160a01b0390911681526020016104d3565b348015610549575f80fd5b5061057a6105583660046134a2565b601e60209081525f938452604080852082529284528284209052825290205481565b6040519081526020016104d3565b348015610593575f80fd5b506104396105a23660046134d4565b610f04565b3480156105b2575f80fd5b5061057a6105c1366004613470565b60186020525f908152604090205481565b3480156105dd575f80fd5b506106006105ec366004613470565b601b6020525f908152604090205460ff1681565b60405190151581526020016104d3565b34801561061b575f80fd5b5061066261062a36600461348b565b60176020525f908152604090208054600182015460028301546003840154600485015460059095015493949293919260ff9091169186565b6040805196875260208701959095529385019290925215156060840152608083015260a082015260c0016104d3565b34801561069c575f80fd5b5061057a600f5481565b3480156106b1575f80fd5b5061057a610f80565b3480156106c5575f80fd5b5061057a683635c9adc5dea0000081565b3480156106e1575f80fd5b506106f56106f0366004613470565b61112a565b604080519384526020840192909252908201526060016104d3565b34801561071b575f80fd5b5061057a61072a366004613470565b60136020525f908152604090205481565b348015610746575f80fd5b50610439610755366004613550565b61115b565b348015610765575f80fd5b506106f561077436600461348b565b6111cf565b348015610784575f80fd5b5061057a610793366004613470565b60216020525f908152604090205481565b3480156107af575f80fd5b5061057a60095481565b61043961125f565b3480156107cc575f80fd5b5061057a6207e90081565b3480156107e2575f80fd5b5061057a6107f1366004613470565b60116020525f908152604090205481565b34801561080d575f80fd5b5061057a61081c366004613470565b60146020525f908152604090205481565b348015610838575f80fd5b5061057a6739d2f941e420aaaa81565b348015610853575f80fd5b5061057a610862366004613470565b60156020525f908152604090205481565b34801561087e575f80fd5b5060045461060090600160a01b900460ff1681565b34801561089e575f80fd5b506104396108ad366004613587565b611694565b3480156108bd575f80fd5b5061057a6108cc366004613470565b6118bf565b3480156108dc575f80fd5b5061057a7f000000000000000000000000000000000000000000000000000000000000000181565b610439610912366004613470565b6119b6565b348015610922575f80fd5b5061057a600e5481565b348015610937575f80fd5b50610439610946366004613470565b611f68565b348015610956575f80fd5b50610600610965366004613470565b601c6020525f908152604090205460ff1681565b348015610984575f80fd5b50610439611f92565b348015610998575f80fd5b506104396120ba565b3480156109ac575f80fd5b5061057a60245481565b3480156109c1575f80fd5b50600354610526906001600160a01b031681565b3480156109e0575f80fd5b5061057a60105481565b3480156109f5575f80fd5b5061057a60065481565b348015610a0a575f80fd5b50600454610526906001600160a01b031681565b348015610a29575f80fd5b506104396120cd565b348015610a3d575f80fd5b5061057a60055481565b348015610a52575f80fd5b50610439610a6136600461348b565b6121c9565b348015610a71575f80fd5b5061057a670de0b6b3a764000081565b348015610a8c575f80fd5b505f546001600160a01b0316610526565b348015610aa8575f80fd5b50600254610526906001600160a01b031681565b348015610ac7575f80fd5b5061057a600d5481565b348015610adc575f80fd5b506007546106009060ff1681565b348015610af5575f80fd5b50610526610b04366004613470565b601f6020525f90815260409020546001600160a01b031681565b348015610b29575f80fd5b50610439610b383660046135b0565b6121d6565b348015610b48575f80fd5b5061057a600c5481565b348015610b5d575f80fd5b5061057a7f000000000000000000000000000000000000000000000000000000000000000181565b348015610b90575f80fd5b50610439610b9f3660046134d4565b6122a3565b348015610baf575f80fd5b50610bfa610bbe366004613470565b601a6020525f90815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016104d3565b348015610c3a575f80fd5b5061057a610c49366004613470565b60126020525f908152604090205481565b348015610c65575f80fd5b5061057a600a5481565b348015610c7a575f80fd5b50610439610c893660046135d0565b61231a565b348015610c99575f80fd5b50610439610ca8366004613607565b612403565b348015610cb8575f80fd5b50610600610cc7366004613470565b60256020525f908152604090205460ff1681565b348015610ce6575f80fd5b5061049a610cf536600461348b565b60196020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939492939192909160ff1688565b348015610d45575f80fd5b50610600610d54366004613470565b60266020525f908152604090205460ff1681565b348015610d73575f80fd5b50610439610d823660046135b0565b612453565b348015610d92575f80fd5b5061057a6126b6565b348015610da6575f80fd5b50610600610db53660046134a2565b601d60209081525f938452604080852082529284528284209052825290205460ff1681565b348015610de5575f80fd5b50610526610df4366004613627565b61270a565b348015610e04575f80fd5b5061057a681b1ae4d6e2ef50000081565b348015610e20575f80fd5b50610439610e2f366004613470565b61273d565b348015610e3f575f80fd5b50610439612777565b348015610e53575f80fd5b506104396127ed565b348015610e67575f80fd5b50610439610e763660046134d4565b612b43565b348015610e86575f80fd5b5061057a600b5481565b348015610e9b575f80fd5b5061057a610eaa366004613470565b60226020525f908152604090205481565b348015610ec6575f80fd5b50610439610ed5366004613587565b612d18565b610ee2612d6b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610f0c612d6b565b5f5b81811015610f7b57600160265f858585818110610f2d57610f2d613651565b9050602002016020810190610f429190613470565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580610f7381613679565b915050610f0e565b505050565b6004545f90600160a01b900460ff161580610fa457506004546001600160a01b0316155b15610fb0575060055490565b6004805460408051630240bc6b60e21b815290515f9384936001600160a01b031692630902f1ac92818301926060928290030181865afa158015610ff6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a91906136ac565b50915091505f60045f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109491906136f8565b90506001600160701b03831615806110b357506001600160701b038216155b156110c357600554935050505090565b6001545f9081906001600160a01b03908116908416036110f25750506001600160701b03828116908416611103565b50506001600160701b038084169083165b8061111683670de0b6b3a7640000613713565b6111209190613730565b9550505050505090565b6001600160a01b0381165f9081526020808052604080832054602283528184205460219093529220545b9193909250565b611163612d6b565b600480546001600160a01b0384166001600160a81b03199091168117600160a01b841515908102919091179092556040805191825260208201929092527f94c9cbe1d9aa7af08484f82ab0179d6db973a391236668c34192d954ff32c06c910160405180910390a15050565b5f805f600a5484106111e857505f915081905080611154565b5f6017816111f787600161374f565b815260208082019290925260409081015f20815160c081018352815480825260018301549482018590526002830154938201849052600383015460ff16151560608301526004830154608083015260059092015460a090910152909790965090945092505050565b60075460ff1661128257604051633017f16560e11b815260040160405180910390fd5b61128b33612d97565b335f90815260146020526040902054801561169157335f908152601260205260408120546112b99042613762565b90505f6112c8610e1083613730565b90505f601e8083106112dc575f91506112e9565b6112e68382613762565b91505b5f6112f2610f80565b90505f670de0b6b3a76400006113088389613713565b6113129190613730565b90505f606461132283600a613713565b61132c9190613730565b9050803410156113835760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e74205061792d746f2d436c61696d2046656500000060448201526064015b60405180910390fd5b5f61138f600283613730565b90505f61139c8284613762565b6002546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156113d4573d5f803e3d5ffd5b506003546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561140c573d5f803e3d5ffd5b50604080518481526020810184905290810182905233907fb3aa4172b89ad35b55207df3917001046668de5f42c54b312c9e0b02e2968c8b9060600160405180910390a2335f90815260146020908152604080832083905560129091528120429055606461147a898d613713565b6114849190613730565b90505f611491828d613762565b90505f6103e86114a28e604b613713565b6114ac9190613730565b90505f6103e86114bd8f6019613713565b6114c79190613730565b6001546040516340c10f1960e01b8152336004820152602481018690529192506001600160a01b0316906340c10f19906044015f604051808303815f87803b158015611511575f80fd5b505af1158015611523573d5f803e3d5ffd5b5050335f908152601f60205260409020546001600160a01b031691505080156115d7576001546040516340c10f1960e01b8152306004820152602481018590526001600160a01b03909116906340c10f19906044015f604051808303815f87803b15801561158f575f80fd5b505af11580156115a1573d5f803e3d5ffd5b505050506001600160a01b0381165f90815260216020526040812080548492906115cc90849061374f565b9091555061164d9050565b6001546001600160a01b03166340c10f19306115f3858761374f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611636575f80fd5b505af1158015611648573d5f803e3d5ffd5b505050505b60405184815233907ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9060200160405180910390a250505050505050505050505050505b50565b60235460ff166003146116b95760405162461bcd60e51b815260040161137a90613775565b335f908152601b602052604090205460ff166116e85760405163350ac7f360e01b815260040160405180910390fd5b5f83815260166020908152604080832081516101008101835281548082526001830154948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460ff16151560e082015291036117735760405163990e7a0b60e01b815260040160405180910390fd5b60015460c08201516040516323b872dd60e01b815233600482015230602482015260448101919091525f916001600160a01b0316906323b872dd906064016020604051808303815f875af11580156117cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f191906137bf565b9050806118385760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015260640161137a565b60c0820151156118a75760015460c0830151604051630852cd8d60e31b81526001600160a01b03909216916342966c68916118799160040190815260200190565b5f604051808303815f87803b158015611890575f80fd5b505af11580156118a2573d5f803e3d5ffd5b505050505b6118b8338686868660c00151612e43565b5050505050565b600f54600d545f9190421180156118d75750600e5415155b15611935575f600d54426118eb9190613762565b90505f6118f66126b6565b90505f6119038284613713565b600e5490915061191b670de0b6b3a764000083613713565b6119259190613730565b61192f908561374f565b93505050505b6001600160a01b0383165f90815260156020526040902054670de0b6b3a7640000906119619083613762565b6001600160a01b0385165f908152601360205260409020546119839190613713565b61198d9190613730565b6001600160a01b0384165f908152601460205260409020546119af919061374f565b9392505050565b335f908152601b602052604090205460ff16156119e65760405163120d9bd960e11b815260040160405180910390fd5b60235460ff16611a2c5760405162461bcd60e51b815260206004820152601160248201527014d85b195cc81b9bdd081cdd185c9d1959607a1b604482015260640161137a565b6023545f9060ff16600103611aa857335f9081526025602052604090205460ff16611a995760405162461bcd60e51b815260206004820152601b60248201527f4e6f742057686974656c697374656420666f7220506861736520310000000000604482015260640161137a565b50670de0b6b3a7640000611b34565b60235460ff16600203611aec57335f9081526026602052604090205460ff1615611adc5750681b1ae4d6e2ef500000611b34565b50683635c9adc5dea00000611b34565b506024546001600160a01b03821615801590611b1157506001600160a01b0382163314155b15611b34576064602454605a611b279190613713565b611b319190613730565b90505b80341015611b5557604051636956f2ab60e11b815260040160405180910390fd5b5f6001600160a01b03831615801590611b7757506001600160a01b0383163314155b8015611b88575060235460ff166003145b90508015611d63575f6064602454600a611ba29190613713565b611bac9190613730565b90505f611bb98234613762565b6040519091506001600160a01b0386169083156108fc029084905f818181858888f19350505050158015611bef573d5f803e3d5ffd5b506001600160a01b0385165f9081526022602052604081208054849290611c1790849061374f565b9091555050335f818152601f6020908152604080832080546001600160a01b03808c166001600160a01b0319928316811790935591855283805291842080546001810182559085529290932090910180549091169092179091556003541615801590611c9457506002546003546001600160a01b03908116911614155b15611d23575f611ca5600283613730565b6002546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611cdd573d5f803e3d5ffd5b506003546001600160a01b03166108fc611cf78385613762565b6040518115909202915f818181858888f19350505050158015611d1c573d5f803e3d5ffd5b5050611d5c565b6002546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611d5a573d5f803e3d5ffd5b505b5050611e4e565b6003546001600160a01b031615801590611d8e57506002546003546001600160a01b03908116911614155b15611e16575f611d9f600234613730565b6002546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611dd7573d5f803e3d5ffd5b506003546001600160a01b03166108fc611df18334613762565b6040518115909202915f818181858888f19350505050158015611d5c573d5f803e3d5ffd5b6002546040516001600160a01b03909116903480156108fc02915f818181858888f19350505050158015611e4c573d5f803e3d5ffd5b505b335f908152601b60205260408120805460ff19166001179055600b805491611e7583613679565b9091555050335f8181526012602090815260408083204290557f000000000000000000000000000000000000000000000000000000000000000180845260178352818420825160c0810184528154815260018083015482870190815260028401548387015260038085015460ff16151560608501526004808601546080860190815260059687015460a087019081528c8c52601a909a52888b20978855855194880194909455915190860155840187905551918301919091559251600682015590519193909290917febe01df6d96920585e2744874d810e5560bc050e9ff947aa34f10422a33cbc279190a25050505050565b611f70612d6b565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611f9a612d6b565b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611fe0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061200491906137da565b90505f81116120405760405162461bcd60e51b81526020600482015260086024820152674e6f20504554524f60c01b604482015260640161137a565b60015460025460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af1158015612092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b691906137bf565b5050565b6120c2612d6b565b6120cb5f6130fb565b565b335f90815260216020526040902054806121205760405162461bcd60e51b81526020600482015260146024820152734e6f20726566657272616c206561726e696e677360601b604482015260640161137a565b335f818152602160205260408082209190915560015490516340c10f1960e01b81526004810192909252602482018390526001600160a01b0316906340c10f19906044015f604051808303815f87803b15801561217b575f80fd5b505af115801561218d573d5f803e3d5ffd5b50506040518381523392507f5be4d22009fea85381595ed91090bc5c0bc92a93fe07ed7472c5888eb1993f83915060200160405180910390a250565b6121d1612d6b565b600555565b60235460ff166003146121fb5760405162461bcd60e51b815260040161137a90613775565b335f908152601c602052604090205460ff161561222b57604051639d38dc2760e01b815260040160405180910390fd5b335f908152601b602052604090205460ff1661225a5760405163350ac7f360e01b815260040160405180910390fd5b335f818152601c60205260408120805460ff191660011790556120b691907f00000000000000000000000000000000000000000000000000000000000000019085908590612e43565b6122ab612d6b565b5f5b81811015610f7b57600160255f8585858181106122cc576122cc613651565b90506020020160208101906122e19190613470565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790558061231281613679565b9150506122ad565b612322612d6b565b6040518060c001604052808681526020018581526020018481526020015f151581526020018381526020018281525060175f600a5f815461236290613679565b9182905550815260208082019290925260409081015f208351815583830151600182015583820151600282015560608085015160038301805460ff19169115159190911790556080850151600483015560a090940151600590910155600a54815190815291820186905281018790527f47d717b6b55d68dba6b9044d2f7a4eac7b376a5ce11ed5de835b8c83c829f354910160405180910390a15050505050565b61240b612d6b565b6023805460ff191660ff83169081179091556040519081527fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c46429060200160405180910390a150565b335f908152601d60209081526040808320858452825280832084845290915290205460ff1661249557604051635522b5a360e01b815260040160405180910390fd5b335f818152601a60209081526040808320601e835281842087855283528184208685528352818420548085526016845293829020825161010081018452815481526001820154948101949094526002810154928401929092526003820154606084015260048201546080840152600582015460a0840152600682015460c084015260079091015460ff16151560e08301529261253090612d97565b8060800151600e541061255d578060800151600e5f8282546125529190613762565b909155506125629050565b5f600e555b6080810151335f90815260136020526040902054106125a9576080810151335f908152601360205260408120805490919061259e908490613762565b909155506125b99050565b335f908152601360205260408120555b8060a001518360040154106125ea578060a00151836004015f8282546125df9190613762565b909155506125f19050565b5f60048401555b335f818152601d6020908152604080832089845282528083208884528252808320805460ff19169055928252601e8152828220888352815282822087835290529081205560028301541561265657600283018054905f612650836137f1565b91905055505b335f818152601360209081526040808320546014909252918290205491517fe331ada0d0e61e9a4196bf4994f2519193d70a601daff346c4276d591664da9a926126a7928252602082015260400190565b60405180910390a25050505050565b6007545f9060ff166126c757505f90565b5f600654426126d69190613762565b90505f6126e66207e90083613730565b905060408111156126f9575f9250505090565b6739d2f941e420aaaa901c92915050565b60208052815f5260405f208181548110612722575f80fd5b5f918252602090912001546001600160a01b03169150829050565b612745612d6b565b6001600160a01b03811661276e57604051631e4fbdf760e01b81525f600482015260240161137a565b611691816130fb565b61277f612d6b565b47806127b65760405162461bcd60e51b815260206004820152600660248201526527379026a7a760d11b604482015260640161137a565b6002546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156120b6573d5f803e3d5ffd5b60235460ff166003146128555760405162461bcd60e51b815260206004820152602a60248201527f47616d6520686173206e6f7420737461727465642079657420285570677261646044820152696573204c6f636b65642960b01b606482015260840161137a565b335f908152601b602052604090205460ff166128845760405163350ac7f360e01b815260040160405180910390fd5b601054335f908152601160205260409020546128a0919061374f565b4210156128ef5760405162461bcd60e51b815260206004820152601d60248201527f436f6f6c646f776e206163746976653a20506c6561736520776169742e000000604482015260640161137a565b335f908152601a60205260408120805490919061290d90600161374f565b9050600a5481111561293257604051633196792f60e11b815260040160405180910390fd5b5f818152601760209081526040808320815160c08101835281548152600180830154948201949094526002820154818401819052600383015460ff1615156060830152600480840154608084015260059093015460a0830152935492516323b872dd60e01b8152339281019290925230602483015260448201939093529192916001600160a01b03909116906323b872dd906064016020604051808303815f875af11580156129e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0791906137bf565b905080612a4e5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015260640161137a565b604082015115612abd576001546040808401519051630852cd8d60e31b81526001600160a01b03909216916342966c6891612a8f9160040190815260200190565b5f604051808303815f87803b158015612aa6575f80fd5b505af1158015612ab8573d5f803e3d5ffd5b505050505b828455815160018501556020808301805160038701556080840151600587015560a08401516006870155335f8181526011845260409081902042905585519251815188815294850193909352830191909152907f1957c3ddde972a0f75f4e54bddd65ada5f0810c35dee609b075fc2d92ec399a99060600160405180910390a250505050565b612b4b612d6b565b7f00000000000000000000000000000000000000000000000000000000000000015f908152601760209081526040808320815160c08101835281548152600182015493810193909352600281015491830191909152600381015460ff1615156060830152600481015460808301526005015460a0820152905b82811015612cde575f848483818110612bdf57612bdf613651565b9050602002016020810190612bf49190613470565b6001600160a01b0381165f908152601b602052604090205490915060ff16612ccb576001600160a01b0381165f908152601b60205260408120805460ff19166001179055600b805491612c4683613679565b9091555050600f546001600160a01b0382165f9081526015602090815260408083209390935560128152828220429055601a81529181207f000000000000000000000000000000000000000000000000000000000000000181558551600182015591850151600383015560048201556080840151600582015560a08401516006909101555b5080612cd681613679565b915050612bc4565b506040518281527fcc3ea4ccc3876221c238f6e5d8f2ae37a892fdafcf77b9889ebe193958128efd906020015b60405180910390a1505050565b612d20612d6b565b612d2b83838361314a565b600954604080519182526020820185905281018290527f87c2af2747de4bc7935697bdac2c724ce1a28877f21caba0bee6acf1f141643290606001612d0b565b5f546001600160a01b031633146120cb5760405163118cdaa760e01b815233600482015260240161137a565b612d9f6131f2565b6001600160a01b0381165f90815260156020526040902054600f54670de0b6b3a764000091612dcd91613762565b6001600160a01b0383165f90815260136020526040902054612def9190613713565b612df99190613730565b6001600160a01b0382165f9081526014602052604081208054909190612e2090849061374f565b9091555050600f546001600160a01b039091165f90815260156020526040902055565b5f84815260166020908152604080832081516101008101835281548152600182015481850152600282015481840152600382015460608201526004820154608082015260058083015460a083015260068084015460c084015260079093015460ff16151560e08301526001600160a01b038b168652601a9094529190932091820154928201549092612edb9189918891889190613273565b15612ef957604051631f9aa14f60e11b815260040160405180910390fd5b8060010154816002015410612f2157604051636d6cfd7d60e11b815260040160405180910390fd5b80600301548260a001518260040154612f3a919061374f565b1115612f5957604051630f576a4f60e41b815260040160405180910390fd5b8160a00151816004015f828254612f70919061374f565b909155505060088054905f612f8483613679565b9091555050604080830186905260608301859052600880546020808601919091526001600160a01b038a165f818152601d83528481208a825283528481208982528352848120805460ff19166001179055818152601e83528481208a8252835284812089825283528481208b905592549083526018909152919020613008916132c9565b506008545f90815260196020908152604080832085518155918501516001830155840151600280830191909155606085015160038301556080850151600483015560a0850151600583015560c0850151600683015560e08501516007909201805460ff191692151592909217909155820180549161308583613679565b91905055506130988783608001516132d4565b60085460408051858152602081019290925281018690526060810185905286906001600160a01b0389169081907fbb355279b9cc8558bd03d4b1dbb0007f6e6dc26a512f267d829ada5da913cee79060800160405180910390a450505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60098054905f61315983613679565b909155505060408051610100810182526009548082525f1960208084018281528486018381526060860193845260808601998a5260a0860198895260c086019788525f60e087018181529581526016909352959091209351845551600184015592516002830155915160038201559351600485015591516005840155516006830155516007909101805460ff1916911515919091179055565b600d5442116131fd57565b600e545f0361320c5742600d55565b5f600d544261321b9190613762565b90505f6132266126b6565b90505f6132338284613713565b600e5490915061324b670de0b6b3a764000083613713565b6132559190613730565b600f5f828254613265919061374f565b909155505042600d55505050565b5f82851015806132835750818410155b15613290575060016132c0565b506001600160a01b0385165f908152601d60209081526040808320878452825280832086845290915290205460ff165b95945050505050565b5f6119af83836133e0565b60075460ff1661332f576007805460ff19166001179055426006819055600d556040517fdaae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c906133269043815260200190565b60405180910390a15b61333882612d97565b80600e5f828254613349919061374f565b90915550506001600160a01b0382165f908152601360205260408120805483929061337590849061374f565b90915550506001600160a01b0382165f818152601360209081526040808320546014909252918290205491517fa051d58ced8df58040b29d2c939da70a826ae40290f77c9a66b38b8b85315f65926133d4928252602082015260400190565b60405180910390a25050565b6318fb58646004525f8281526024812068fbb67fda52d4bfb8bf830361340d5763f5a267f15f526004601cfd5b8261341f5768fbb67fda52d4bfb8bf92505b80602052825f5260405f20805461345457811954805f52848160011c8401558060011c60010182556002810183195550600192505b505092915050565b6001600160a01b0381168114611691575f80fd5b5f60208284031215613480575f80fd5b81356119af8161345c565b5f6020828403121561349b575f80fd5b5035919050565b5f805f606084860312156134b4575f80fd5b83356134bf8161345c565b95602085013595506040909401359392505050565b5f80602083850312156134e5575f80fd5b823567ffffffffffffffff808211156134fc575f80fd5b818501915085601f83011261350f575f80fd5b81358181111561351d575f80fd5b8660208260051b8501011115613531575f80fd5b60209290920196919550909350505050565b8015158114611691575f80fd5b5f8060408385031215613561575f80fd5b823561356c8161345c565b9150602083013561357c81613543565b809150509250929050565b5f805f60608486031215613599575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156135c1575f80fd5b50508035926020909101359150565b5f805f805f60a086880312156135e4575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f60208284031215613617575f80fd5b813560ff811681146119af575f80fd5b5f8060408385031215613638575f80fd5b82356136438161345c565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161368a5761368a613665565b5060010190565b80516001600160701b03811681146136a7575f80fd5b919050565b5f805f606084860312156136be575f80fd5b6136c784613691565b92506136d560208501613691565b9150604084015163ffffffff811681146136ed575f80fd5b809150509250925092565b5f60208284031215613708575f80fd5b81516119af8161345c565b808202811582820484141761372a5761372a613665565b92915050565b5f8261374a57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561372a5761372a613665565b8181038181111561372a5761372a613665565b6020808252602a908201527f47616d6520686173206e6f7420737461727465642079657420284472696c6c696040820152696e67204c6f636b65642960b01b606082015260800190565b5f602082840312156137cf575f80fd5b81516119af81613543565b5f602082840312156137ea575f80fd5b5051919050565b5f816137ff576137ff613665565b505f19019056fea26469706673582212206d951f7ac4f0d052329a23db1492f6fb45a120ca79422b48a36a82b67b932ee664736f6c63430008140033
Deployed Bytecode Sourcemap
12204:21820:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33610:91;;;;;;;;;;-1:-1:-1;33610:91:0;;;;;:::i;:::-;;:::i;:::-;;13568:35;;;;;;;;;;-1:-1:-1;13568:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;924:25:1;;;980:2;965:18;;958:34;;;;1008:18;;;1001:34;;;;1066:2;1051:18;;1044:34;;;;1109:3;1094:19;;1087:35;1153:3;1138:19;;1131:35;1197:3;1182:19;;1175:35;1254:14;1247:22;1241:3;1226:19;;1219:51;911:3;896:19;13568:35:0;;;;;;;;14421:29;;;;;;;;;;-1:-1:-1;14421:29:0;;;;;;;;;;;1453:4:1;1441:17;;;1423:36;;1411:2;1396:18;14421:29:0;1281:184:1;12304:25:0;;;;;;;;;;-1:-1:-1;12304:25:0;;;;-1:-1:-1;;;;;12304:25:0;;;;;;-1:-1:-1;;;;;1634:32:1;;;1616:51;;1604:2;1589:18;12304:25:0;1470:203:1;14074:87:0;;;;;;;;;;-1:-1:-1;14074:87:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:25:1;;;2200:2;2185:18;14074:87:0;2066:177:1;27549:188:0;;;;;;;;;;-1:-1:-1;27549:188:0;;;;;:::i;:::-;;:::i;13665:70::-;;;;;;;;;;-1:-1:-1;13665:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;13850:55;;;;;;;;;;-1:-1:-1;13850:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3033:14:1;;3026:22;3008:41;;2996:2;2981:18;13850:55:0;2868:187:1;13610:42:0;;;;;;;;;;-1:-1:-1;13610:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3341:25:1;;;3397:2;3382:18;;3375:34;;;;3425:18;;;3418:34;;;;3495:14;3488:22;3483:2;3468:18;;3461:50;3542:3;3527:19;;3520:35;3586:3;3571:19;;3564:35;3328:3;3313:19;13610:42:0;3060:545:1;13158:37:0;;;;;;;;;;;;;;;;26359:727;;;;;;;;;;;;;:::i;14646:56::-;;;;;;;;;;;;14692:10;14646:56;;29963:230;;;;;;;;;;-1:-1:-1;29963:230:0;;;;;:::i;:::-;;:::i;:::-;;;;3812:25:1;;;3868:2;3853:18;;3846:34;;;;3896:18;;;3889:34;3800:2;3785:18;29963:230:0;3610:319:1;13387:49:0;;;;;;;;;;-1:-1:-1;13387:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;26033:192;;;;;;;;;;-1:-1:-1;26033:192:0;;;;;:::i;:::-;;:::i;33709:312::-;;;;;;;;;;-1:-1:-1;33709:312:0;;;;;:::i;:::-;;:::i;14289:55::-;;;;;;;;;;-1:-1:-1;14289:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;12938:29;;;;;;;;;;;;;;;;23608:2116;;;:::i;12797:47::-;;;;;;;;;;;;12838:6;12797:47;;13271:50;;;;;;;;;;-1:-1:-1;13271:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;13443:55;;;;;;;;;;-1:-1:-1;13443:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;12707:70;;;;;;;;;;;;12758:19;12707:70;;13505:50;;;;;;;;;;-1:-1:-1;13505:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;12468:29;;;;;;;;;;-1:-1:-1;12468:29:0;;;;-1:-1:-1;;;12468:29:0;;;;;;28998:626;;;;;;;;;;-1:-1:-1;28998:626:0;;;;;:::i;:::-;;:::i;18985:639::-;;;;;;;;;;-1:-1:-1;18985:639:0;;;;;:::i;:::-;;:::i;14875:44::-;;;;;;;;;;;;;;;20195:2854;;;;;;:::i;:::-;;:::i;13123:28::-;;;;;;;;;;;;;;;;27098:108;;;;;;;;;;-1:-1:-1;27098:108:0;;;;;:::i;:::-;;:::i;13912:50::-;;;;;;;;;;-1:-1:-1;13912:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30201:225;;;;;;;;;;;;;:::i;1279:103::-;;;;;;;;;;;;;:::i;14470:45::-;;;;;;;;;;;;;;;;12368:30;;;;;;;;;;-1:-1:-1;12368:30:0;;;;-1:-1:-1;;;;;12368:30:0;;;13226:31;;;;;;;;;;;;;;;;12567:24;;;;;;;;;;;;;;;;12432:28;;;;;;;;;;-1:-1:-1;12432:28:0;;;;-1:-1:-1;;;;;12432:28:0;;;29632:323;;;;;;;;;;;;;:::i;12505:46::-;;;;;;;;;;;;;;;;26233:118;;;;;;;;;;-1:-1:-1;26233:118:0;;;;;:::i;:::-;;:::i;12852:48::-;;;;;;;;;;;;12896:4;12852:48;;1010:87;;;;;;;;;;-1:-1:-1;1056:7:0;1083:6;-1:-1:-1;;;;;1083:6:0;1010:87;;12336:24;;;;;;;;;;-1:-1:-1;12336:24:0;;;;-1:-1:-1;;;;;12336:24:0;;;13086:29;;;;;;;;;;;;;;;;12599:28;;;;;;;;;;-1:-1:-1;12599:28:0;;;;;;;;14175:44;;;;;;;;;;-1:-1:-1;14175:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14175:44:0;;;30630:435;;;;;;;;;;-1:-1:-1;30630:435:0;;;;;:::i;:::-;;:::i;13046:30::-;;;;;;;;;;;;;;;;14826:42;;;;;;;;;;;;;;;27353:188;;;;;;;;;;-1:-1:-1;27353:188:0;;;;;:::i;:::-;;:::i;13792:45::-;;;;;;;;;;-1:-1:-1;13792:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5333:25:1;;;5389:2;5374:18;;5367:34;;;;5417:18;;;5410:34;;;;5475:2;5460:18;;5453:34;;;;5518:3;5503:19;;5496:35;5562:3;5547:19;;5540:35;5606:3;5591:19;;5584:35;5320:3;5305:19;13792:45:0;5018:607:1;13329:48:0;;;;;;;;;;-1:-1:-1;13329:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;12974:25;;;;;;;;;;;;;;;;17156:271;;;;;;;;;;-1:-1:-1;17156:271:0;;;;;:::i;:::-;;:::i;27218:127::-;;;;;;;;;;-1:-1:-1;27218:127:0;;;;;:::i;:::-;;:::i;14716:47::-;;;;;;;;;;-1:-1:-1;14716:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13742:43;;;;;;;;;;-1:-1:-1;13742:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14770:47;;;;;;;;;;-1:-1:-1;14770:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31077:1185;;;;;;;;;;-1:-1:-1;31077:1185:0;;;;;:::i;:::-;;:::i;18631:346::-;;;;;;;;;;;;;:::i;13975:92::-;;;;;;;;;;-1:-1:-1;13975:92:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14226:50;;;;;;;;;;-1:-1:-1;14226:50:0;;;;;:::i;:::-;;:::i;14584:51::-;;;;;;;;;;;;14626:9;14584:51;;1390:220;;;;;;;;;;-1:-1:-1;1390:220:0;;;;;:::i;:::-;;:::i;30434:188::-;;;;;;;;;;;;;:::i;27745:1245::-;;;;;;;;;;;;;:::i;17699:916::-;;;;;;;;;;-1:-1:-1;17699:916:0;;;;;:::i;:::-;;:::i;13006:27::-;;;;;;;;;;;;;;;;14352:53;;;;;;;;;;-1:-1:-1;14352:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;16947:201;;;;;;;;;;-1:-1:-1;16947:201:0;;;;;:::i;:::-;;:::i;33610:91::-;969:13;:11;:13::i;:::-;33674:10:::1;:19:::0;;-1:-1:-1;;;;;;33674:19:0::1;-1:-1:-1::0;;;;;33674:19:0;;;::::1;::::0;;;::::1;::::0;;33610:91::o;27549:188::-;969:13;:11;:13::i;:::-;27638:6:::1;27634:96;27648:15:::0;;::::1;27634:96;;;27714:4;27685:15;:26;27701:6;;27708:1;27701:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27685:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27685:26:0;:33;;-1:-1:-1;;27685:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27665:3;::::1;::::0;::::1;:::i;:::-;;;;27634:96;;;;27549:188:::0;;:::o;26359:727::-;26430:9;;26405:7;;-1:-1:-1;;;26430:9:0;;;;26429:10;;:41;;-1:-1:-1;26443:13:0;;-1:-1:-1;;;;;26443:13:0;:27;26429:41;26425:97;;;-1:-1:-1;26494:16:0;;;26359:727::o;26425:97::-;26588:13;;;26573:43;;;-1:-1:-1;;;26573:43:0;;;;26533:16;;;;-1:-1:-1;;;;;26588:13:0;;26573:41;;:43;;;;;;;;;;;26588:13;26573:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26532:84;;;;;26627:14;26659:13;;;;;;;;;-1:-1:-1;;;;;26659:13:0;-1:-1:-1;;;;;26644:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26627:55;-1:-1:-1;;;;;;26697:13:0;;;;:30;;-1:-1:-1;;;;;;26714:13:0;;;26697:30;26693:59;;;26736:16;;26729:23;;;;;26359:727;:::o;26693:59::-;26837:10;;26763:18;;;;-1:-1:-1;;;;;26837:10:0;;;26827:20;;;;26823:204;;-1:-1:-1;;;;;;;26902:21:0;;;;26864:23;;26823:204;;;-1:-1:-1;;;;;;;26956:21:0;;;;26992:23;;26823:204;27066:12;27045:17;:10;27058:4;27045:17;:::i;:::-;27044:34;;;;:::i;:::-;27037:41;;;;;;;26359:727;:::o;29963:230::-;-1:-1:-1;;;;;30104:19:0;;30026:17;30104:19;;;:13;:19;;;;;;;:26;30132:18;:24;;;;;;30158:20;:26;;;;;;29963:230;;;;;;:::o;26033:192::-;969:13;:11;:13::i;:::-;26119::::1;:21:::0;;-1:-1:-1;;;;;26119:21:0;::::1;-1:-1:-1::0;;;;;;26151:20:0;;;;;-1:-1:-1;;;26151:20:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;26187:30:::1;::::0;;8554:51:1;;;8636:2;8621:18;;8614:50;;;;26187:30:0::1;::::0;8527:18:1;26187:30:0::1;;;;;;;26033:192:::0;;:::o;33709:312::-;33780:12;33794:18;33814:16;33863:10;;33847:12;:26;33843:46;;-1:-1:-1;33883:1:0;;-1:-1:-1;33883:1:0;;-1:-1:-1;33883:1:0;33875:14;;33843:46;33900:20;33923:6;33900:20;33930:16;:12;33945:1;33930:16;:::i;:::-;33923:24;;;;;;;;;;;;;;-1:-1:-1;33923:24:0;33900:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33900:47:0;;-1:-1:-1;33709:312:0;-1:-1:-1;;;33709:312:0:o;23608:2116::-;23665:16;;;;23660:57;;23690:27;;-1:-1:-1;;;23690:27:0;;;;;;;;;;;23660:57;23728:26;23743:10;23728:14;:26::i;:::-;23818:10;23775:19;23797:32;;;:20;:32;;;;;;23844:15;;23840:1877;;23927:10;23876:16;23913:25;;;:13;:25;;;;;;23895:43;;:15;:43;:::i;:::-;23876:62;-1:-1:-1;23953:19:0;23975:15;23986:4;23876:62;23975:15;:::i;:::-;23953:37;-1:-1:-1;24020:19:0;24077:2;24101:23;;;24097:158;;24159:1;24145:15;;24097:158;;;24216:22;24227:11;24216:8;:22;:::i;:::-;24202:36;;24097:158;24271:25;24299:15;:13;:15::i;:::-;24271:43;-1:-1:-1;24330:23:0;24392:4;24357:31;24271:43;24357:11;:31;:::i;:::-;24356:40;;;;:::i;:::-;24330:66;-1:-1:-1;24411:19:0;24458:3;24434:20;24330:66;24452:2;24434:20;:::i;:::-;24433:28;;;;:::i;:::-;24411:50;;24498:11;24485:9;:24;;24477:66;;;;-1:-1:-1;;;24477:66:0;;9140:2:1;24477:66:0;;;9122:21:1;9179:2;9159:18;;;9152:30;9218:31;9198:18;;;9191:59;9267:18;;24477:66:0;;;;;;;;;24560:16;24579:15;24593:1;24579:11;:15;:::i;:::-;24560:34;-1:-1:-1;24609:22:0;24634;24560:34;24634:11;:22;:::i;:::-;24679:9;;24671:37;;24609:47;;-1:-1:-1;;;;;;24679:9:0;;24671:37;;;;;24699:8;;24679:9;24671:37;24679:9;24671:37;24699:8;24679:9;24671:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24731:15:0;;24723:49;;-1:-1:-1;;;;;24731:15:0;;;;24723:49;;;;;24757:14;;24731:15;24723:49;24731:15;24723:49;24757:14;24731:15;24723:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24792:63:0;;;3812:25:1;;;3868:2;3853:18;;3846:34;;;3896:18;;;3889:34;;;24805:10:0;;24792:63;;3800:2:1;3785:18;24792:63:0;;;;;;;24893:10;24907:1;24872:32;;;:20;:32;;;;;;;;:36;;;24924:13;:25;;;;;24952:15;24924:43;;25036:3;25007:25;25021:11;25007;:25;:::i;:::-;25006:33;;;;:::i;:::-;24985:54;-1:-1:-1;25054:17:0;25074:24;24985:54;25074:11;:24;:::i;:::-;25054:44;-1:-1:-1;25115:21:0;25160:4;25140:16;:11;25154:2;25140:16;:::i;:::-;25139:25;;;;:::i;:::-;25115:49;-1:-1:-1;25180:16:0;25220:4;25200:16;:11;25214:2;25200:16;:::i;:::-;25199:25;;;;:::i;:::-;25249:10;;25242:46;;-1:-1:-1;;;25242:46:0;;25266:10;25242:46;;;9470:51:1;9537:18;;;9530:34;;;25180:44:0;;-1:-1:-1;;;;;;25249:10:0;;25242:23;;9443:18:1;;25242:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25334:10:0;25305:16;25324:21;;;:9;:21;;;;;;-1:-1:-1;;;;;25324:21:0;;-1:-1:-1;;25364:22:0;;25360:282;;25414:10;;25407:53;;-1:-1:-1;;;25407:53:0;;25439:4;25407:53;;;9470:51:1;9537:18;;;9530:34;;;-1:-1:-1;;;;;25414:10:0;;;;25407:23;;9443:18:1;;25407:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;25479:30:0;;;;;;:20;:30;;;;;:42;;25513:8;;25479:30;:42;;25513:8;;25479:42;:::i;:::-;;;;-1:-1:-1;25360:282:0;;-1:-1:-1;25360:282:0;;25569:10;;-1:-1:-1;;;;;25569:10:0;25562:23;25594:4;25601:24;25617:8;25601:13;:24;:::i;:::-;25562:64;;-1:-1:-1;;;;;;25562:64:0;;;;;;;-1:-1:-1;;;;;9488:32:1;;;25562:64:0;;;9470:51:1;9537:18;;;9530:34;9443:18;;25562:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25360:282;25661:44;;2212:25:1;;;25683:10:0;;25661:44;;2200:2:1;2185:18;25661:44:0;;;;;;;23861:1856;;;;;;;;;;;;;;23840:1877;23649:2075;23608:2116::o;28998:626::-;29086:12;;;;29102:1;29086:17;29078:72;;;;-1:-1:-1;;;29078:72:0;;;;;;;:::i;:::-;29190:10;29166:35;;;;:23;:35;;;;;;;;29161:79;;29210:30;;-1:-1:-1;;;29210:30:0;;;;;;;;;;;29161:79;29251:14;29268:16;;;:4;:16;;;;;;;;29251:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29299:17;29295:53;;29325:23;;-1:-1:-1;;;29325:23:0;;;;;;;;;;;29295:53;29382:10;;29434:8;;;;29375:68;;-1:-1:-1;;;29375:68:0;;29407:10;29375:68;;;10226:34:1;29427:4:0;10276:18:1;;;10269:43;10328:18;;;10321:34;;;;29360:12:0;;-1:-1:-1;;;;;29382:10:0;;29375:31;;10161:18:1;;29375:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29360:83;;29462:7;29454:41;;;;-1:-1:-1;;;29454:41:0;;10818:2:1;29454:41:0;;;10800:21:1;10857:2;10837:18;;;10830:30;-1:-1:-1;;;10876:18:1;;;10869:51;10937:18;;29454:41:0;10616:345:1;29454:41:0;29510:8;;;;:12;29506:51;;29531:10;;29548:8;;;;29524:33;;-1:-1:-1;;;29524:33:0;;-1:-1:-1;;;;;29531:10:0;;;;29524:23;;:33;;;;2212:25:1;;;2200:2;2185:18;;2066:177;29524:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29506:51;29568:48;29577:10;29589;29601:1;29604;29607:3;:8;;;29568;:48::i;:::-;29067:557;;28998:626;;;:::o;18985:639::-;19094:22;;19159:14;;19047:7;;19094:22;19141:15;:32;:54;;;;-1:-1:-1;19177:13:0;;:18;;19141:54;19137:343;;;19212:17;19250:14;;19232:15;:32;;;;:::i;:::-;19212:52;;19279:21;19303:27;:25;:27::i;:::-;19279:51;-1:-1:-1;19345:15:0;19363:25;19279:51;19363:9;:25;:::i;:::-;19455:13;;19345:43;;-1:-1:-1;19424:27:0;12896:4;19345:43;19424:27;:::i;:::-;19423:45;;;;:::i;:::-;19403:65;;;;:::i;:::-;;;19197:283;;;19137:343;-1:-1:-1;;;;;19572:22:0;;;;;;:15;:22;;;;;;12896:4;;19553:41;;:16;:41;:::i;:::-;-1:-1:-1;;;;;19528:21:0;;;;;;:14;:21;;;;;;:67;;;;:::i;:::-;19527:89;;;;:::i;:::-;-1:-1:-1;;;;;19497:27:0;;;;;;:20;:27;;;;;;:119;;;;:::i;:::-;19490:126;18985:639;-1:-1:-1;;;18985:639:0:o;20195:2854::-;20299:10;20275:35;;;;:23;:35;;;;;;;;20271:85;;;20319:37;;-1:-1:-1;;;20319:37:0;;;;;;;;;;;20271:85;20375:12;;;;20367:46;;;;-1:-1:-1;;;20367:46:0;;11168:2:1;20367:46:0;;;11150:21:1;11207:2;11187:18;;;11180:30;-1:-1:-1;;;11226:18:1;;;11219:47;11283:18;;20367:46:0;10966:341:1;20367:46:0;20469:12;;20426:18;;20469:12;;;:17;20465:663;;20527:10;20511:27;;;;:15;:27;;;;;;;;20503:67;;;;-1:-1:-1;;;20503:67:0;;11514:2:1;20503:67:0;;;11496:21:1;11553:2;11533:18;;;11526:30;11592:29;11572:18;;;11565:57;11639:18;;20503:67:0;11312:351:1;20503:67:0;-1:-1:-1;14567:7:0;20465:663;;;20642:12;;;;20658:1;20642:17;20638:490;;20710:10;20694:27;;;;:15;:27;;;;;;;;20690:192;;;-1:-1:-1;14626:9:0;20638:490;;20690:192;-1:-1:-1;14692:10:0;20638:490;;;-1:-1:-1;20951:17:0;;-1:-1:-1;;;;;20988:22:0;;;;;;:48;;-1:-1:-1;;;;;;21014:22:0;;21026:10;21014:22;;20988:48;20984:133;;;21097:3;21071:17;;21091:2;21071:22;;;;:::i;:::-;21070:30;;;;:::i;:::-;21057:43;;20984:133;21156:10;21144:9;:22;21140:58;;;21175:23;;-1:-1:-1;;;21175:23:0;;;;;;;;;;;21140:58;21221:15;-1:-1:-1;;;;;21240:22:0;;;;;;:48;;-1:-1:-1;;;;;;21266:22:0;;21278:10;21266:22;;21240:48;:69;;;;-1:-1:-1;21292:12:0;;;;21308:1;21292:17;21240:69;21221:89;;21335:10;21331:1145;;;21362:16;21408:3;21382:17;;21402:2;21382:22;;;;:::i;:::-;21381:30;;;;:::i;:::-;21362:49;-1:-1:-1;21426:22:0;21451:20;21362:49;21451:9;:20;:::i;:::-;21488:36;;21426:45;;-1:-1:-1;;;;;;21488:26:0;;;:36;;;;;21515:8;;21488:36;;;;21515:8;21488:26;:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21539:28:0;;;;;;:18;:28;;;;;:40;;21571:8;;21539:28;:40;;21571:8;;21539:40;:::i;:::-;;;;-1:-1:-1;;21604:10:0;21594:21;;;;:9;:21;;;;;;;;:32;;-1:-1:-1;;;;;21594:32:0;;;-1:-1:-1;;;;;;21594:32:0;;;;;;;;21641:23;;;;;;;;;:40;;21594:32;21641:40;;;;;;;;;;;;;;;;;;;;;;;;;21702:15;;;:29;;;;:61;;-1:-1:-1;21754:9:0;;21735:15;;-1:-1:-1;;;;;21735:15:0;;;21754:9;;21735:28;;21702:61;21698:369;;;21784:19;21806:18;21823:1;21806:14;:18;:::i;:::-;21852:9;;21844:40;;21784;;-1:-1:-1;;;;;;21852:9:0;;21844:40;;;;;21784;;21852:9;21844:40;21852:9;21844:40;21784;21852:9;21844:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21911:15:0;;-1:-1:-1;;;;;21911:15:0;21903:63;21937:28;21954:11;21937:14;:28;:::i;:::-;21903:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21765:217;21698:369;;;22015:9;;22007:43;;-1:-1:-1;;;;;22015:9:0;;;;22007:43;;;;;22035:14;;22015:9;22007:43;22015:9;22007:43;22035:14;22015:9;22007:43;;;;;;;;;;;;;;;;;;;;;21698:369;21347:731;;21331:1145;;;22117:15;;-1:-1:-1;;;;;22117:15:0;:29;;;;:61;;-1:-1:-1;22169:9:0;;22150:15;;-1:-1:-1;;;;;22150:15:0;;;22169:9;;22150:28;;22117:61;22113:352;;;22199:19;22221:13;22233:1;22221:9;:13;:::i;:::-;22261:9;;22253:40;;22199:35;;-1:-1:-1;;;;;;22261:9:0;;22253:40;;;;;22199:35;;22261:9;22253:40;22261:9;22253:40;22199:35;22261:9;22253:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22320:15:0;;-1:-1:-1;;;;;22320:15:0;22312:58;22346:23;22358:11;22346:9;:23;:::i;:::-;22312:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22113:352;22419:9;;22411:38;;-1:-1:-1;;;;;22419:9:0;;;;22439;22411:38;;;;;22419:9;22411:38;22419:9;22411:38;22439:9;22419;22411:38;;;;;;;;;;;;;;;;;;;;;22113:352;22512:10;22488:35;;;;:23;:35;;;;;:42;;-1:-1:-1;;22488:42:0;22526:4;22488:42;;;22541:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;;22580:10:0;22566:25;;;;:13;:25;;;;;;;;22594:15;22566:43;;22657:19;22650:27;;;:6;:27;;;;;22623:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22710:24;;;:12;:24;;;;;;22745:38;;;22810:16;;22794:13;;;:32;;;;22862:25;;22837:22;;;:50;22898:21;;:25;;;22944:10;22934:7;;;:20;;;;22975:10;;22965:7;;;:20;23001:40;;22623:54;;22710:24;;22580:10;;23001:40;;22566:25;23001:40;20260:2789;;;;20195:2854;:::o;27098:108::-;969:13;:11;:13::i;:::-;27173:15:::1;:25:::0;;-1:-1:-1;;;;;;27173:25:0::1;-1:-1:-1::0;;;;;27173:25:0;;;::::1;::::0;;;::::1;::::0;;27098:108::o;30201:225::-;969:13;:11;:13::i;:::-;30281:10:::1;::::0;30274:43:::1;::::0;-1:-1:-1;;;30274:43:0;;30311:4:::1;30274:43;::::0;::::1;1616:51:1::0;30256:15:0::1;::::0;-1:-1:-1;;;;;30281:10:0::1;::::0;30274:28:::1;::::0;1589:18:1;;30274:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30256:61;;30346:1;30336:7;:11;30328:32;;;::::0;-1:-1:-1;;;30328:32:0;;12059:2:1;30328:32:0::1;::::0;::::1;12041:21:1::0;12098:1;12078:18;;;12071:29;-1:-1:-1;;;12116:18:1;;;12109:38;12164:18;;30328:32:0::1;11857:331:1::0;30328:32:0::1;30378:10;::::0;30399:9:::1;::::0;30371:47:::1;::::0;-1:-1:-1;;;30371:47:0;;-1:-1:-1;;;;;30399:9:0;;::::1;30371:47;::::0;::::1;9470:51:1::0;9537:18;;;9530:34;;;30378:10:0;::::1;::::0;30371:27:::1;::::0;9443:18:1;;30371:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30245:181;30201:225::o:0;1279:103::-;969:13;:11;:13::i;:::-;1344:30:::1;1371:1;1344:18;:30::i;:::-;1279:103::o:0;29632:323::-;29723:10;29685:14;29702:32;;;:20;:32;;;;;;29753:10;29745:43;;;;-1:-1:-1;;;29745:43:0;;12395:2:1;29745:43:0;;;12377:21:1;12434:2;12414:18;;;12407:30;-1:-1:-1;;;12453:18:1;;;12446:50;12513:18;;29745:43:0;12193:344:1;29745:43:0;29820:10;29834:1;29799:32;;;:20;:32;;;;;;:36;;;;29853:10;;29846:43;;-1:-1:-1;;;29846:43:0;;;;;9470:51:1;;;;9537:18;;;9530:34;;;-1:-1:-1;;;;;29853:10:0;;29846:23;;9443:18:1;;29846:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29906:41:0;;2212:25:1;;;29928:10:0;;-1:-1:-1;29906:41:0;;-1:-1:-1;2200:2:1;2185:18;29906:41:0;;;;;;;29674:281;29632:323::o;26233:118::-;969:13;:11;:13::i;:::-;26313:16:::1;:30:::0;26233:118::o;30630:435::-;30707:12;;;;30723:1;30707:17;30699:72;;;;-1:-1:-1;;;30699:72:0;;;;;;;:::i;:::-;30805:10;30786:30;;;;:18;:30;;;;;;;;30782:77;;;30825:34;;-1:-1:-1;;;30825:34:0;;;;;;;;;;;30782:77;30899:10;30875:35;;;;:23;:35;;;;;;;;30870:79;;30919:30;;-1:-1:-1;;;30919:30:0;;;;;;;;;;;30870:79;30979:10;30960:30;;;;:18;:30;;;;;:37;;-1:-1:-1;;30960:37:0;30993:4;30960:37;;;31008:48;;30979:10;31029:17;;31048:1;;31051;;31008:8;:48::i;27353:188::-;969:13;:11;:13::i;:::-;27442:6:::1;27438:96;27452:15:::0;;::::1;27438:96;;;27518:4;27489:15;:26;27505:6;;27512:1;27505:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27489:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;27489:26:0;:33;;-1:-1:-1;;27489:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27469:3;::::1;::::0;::::1;:::i;:::-;;;;27438:96;;17156:271:::0;969:13;:11;:13::i;:::-;17309:54:::1;;;;;;;;17318:7;17309:54;;;;17327:16;17309:54;;;;17345:4;17309:54;;;;17351:5;17309:54;;;;;;17358:1;17309:54;;;;17361:1;17309:54;;::::0;17286:6:::1;:20;17295:10;;17293:12;;;;;:::i;:::-;::::0;;;;-1:-1:-1;17286:20:0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;17286:20:0;:77;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;17286:77:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;17393:10:::1;::::0;17379:40;;3812:25:1;;;3853:18;;;3846:34;;;3896:18;;3889:34;;;17379:40:0::1;::::0;3785:18:1;17379:40:0::1;;;;;;;17156:271:::0;;;;;:::o;27218:127::-;969:13;:11;:13::i;:::-;27280:12:::1;:21:::0;;-1:-1:-1;;27280:21:0::1;;::::0;::::1;::::0;;::::1;::::0;;;27317:20:::1;::::0;1423:36:1;;;27317:20:0::1;::::0;1411:2:1;1396:18;27317:20:0::1;;;;;;;27218:127:::0;:::o;31077:1185::-;31164:10;31143:32;;;;:20;:32;;;;;;;;:35;;;;;;;;:38;;;;;;;;;;;31138:79;;31190:27;;-1:-1:-1;;;31190:27:0;;;;;;;;;;;31138:79;31263:10;31228:19;31250:24;;;:12;:24;;;;;;;;31302:12;:24;;;;;:27;;;;;;;;:30;;;;;;;;;31364:12;;;:4;:12;;;;;;31343:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31250:24;31387:26;;:14;:26::i;:::-;31455:7;:16;;;31438:13;;:33;31434:149;;31505:7;:16;;;31488:13;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;31434:149:0;;-1:-1:-1;31434:149:0;;31570:1;31554:13;:17;31434:149;31627:16;;;;31612:10;31597:26;;;;:14;:26;;;;;;:46;31593:188;;31690:16;;;;31675:10;31660:26;;;;:14;:26;;;;;:46;;:26;;;:46;;31690:16;;31660:46;:::i;:::-;;;;-1:-1:-1;31593:188:0;;-1:-1:-1;31593:188:0;;31754:10;31768:1;31739:26;;;:14;:26;;;;;:30;31593:188;31820:7;:24;;;31795:5;:21;;;:49;31791:189;;31886:7;:24;;;31861:5;:21;;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;31791:189:0;;-1:-1:-1;31791:189:0;;31967:1;31943:21;;;:25;31791:189;32013:10;32033:5;31992:32;;;:20;:32;;;;;;;;:35;;;;;;;;:38;;;;;;;;:46;;-1:-1:-1;;31992:46:0;;;32049:24;;;:12;:24;;;;;:27;;;;;;;;:30;;;;;;;;:34;32098:14;;;;:18;32094:40;;32118:14;;;:16;;;:14;:16;;;:::i;:::-;;;;;;32094:40;32181:10;32193:26;;;;:14;:26;;;;;;;;;32221:20;:32;;;;;;;;32150:104;;;;;;12857:25:1;;12913:2;12898:18;;12891:34;12845:2;12830:18;;12683:248;32150:104:0;;;;;;;;31127:1135;;;31077:1185;;:::o;18631:346::-;18714:16;;18689:7;;18714:16;;18709:31;;-1:-1:-1;18739:1:0;;18631:346::o;18709:31::-;18761:18;18800:9;;18782:15;:27;;;;:::i;:::-;18761:48;-1:-1:-1;18820:16:0;18839:27;12838:6;18761:48;18839:27;:::i;:::-;18820:46;;18903:2;18892:8;:13;18888:27;;;18914:1;18907:8;;;;18631:346;:::o;18888:27::-;12758:19;18933:36;;;18631:346;-1:-1:-1;;18631:346:0:o;14226:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14226:50:0;;-1:-1:-1;14226:50:0;;-1:-1:-1;14226:50:0:o;1390:220::-;969:13;:11;:13::i;:::-;-1:-1:-1;;;;;1475:22:0;::::1;1471:93;;1521:31;::::0;-1:-1:-1;;;1521:31:0;;1549:1:::1;1521:31;::::0;::::1;1616:51:1::0;1589:18;;1521:31:0::1;1470:203:1::0;1471:93:0::1;1574:28;1593:8;1574:18;:28::i;30434:188::-:0;969:13;:11;:13::i;:::-;30505:21:::1;30545:11:::0;30537:30:::1;;;::::0;-1:-1:-1;;;30537:30:0;;13138:2:1;30537:30:0::1;::::0;::::1;13120:21:1::0;13177:1;13157:18;;;13150:29;-1:-1:-1;;;13195:18:1;;;13188:36;13241:18;;30537:30:0::1;12936:329:1::0;30537:30:0::1;30586:9;::::0;30578:36:::1;::::0;-1:-1:-1;;;;;30586:9:0;;::::1;::::0;30578:36;::::1;;;::::0;30606:7;;30586:9:::1;30578:36:::0;30586:9;30578:36;30606:7;30586:9;30578:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;27745:1245:::0;27797:12;;;;27813:1;27797:17;27789:72;;;;-1:-1:-1;;;27789:72:0;;13472:2:1;27789:72:0;;;13454:21:1;13511:2;13491:18;;;13484:30;13550:34;13530:18;;;13523:62;-1:-1:-1;;;13601:18:1;;;13594:40;13651:19;;27789:72:0;13270:406:1;27789:72:0;27901:10;27877:35;;;;:23;:35;;;;;;;;27872:79;;27921:30;;-1:-1:-1;;;27921:30:0;;;;;;;;;;;27872:79;28019:8;;28005:10;27989:27;;;;:15;:27;;;;;;:38;;28019:8;27989:38;:::i;:::-;27970:15;:57;;27962:99;;;;-1:-1:-1;;;27962:99:0;;13883:2:1;27962:99:0;;;13865:21:1;13922:2;13902:18;;;13895:30;13961:31;13941:18;;;13934:59;14010:18;;27962:99:0;13681:353:1;27962:99:0;28111:10;28072:23;28098:24;;;:12;:24;;;;;28158:20;;28098:24;;28072:23;28158:24;;28181:1;28158:24;:::i;:::-;28133:49;;28214:10;;28197:14;:27;28193:66;;;28233:26;;-1:-1:-1;;;28233:26:0;;;;;;;;;;;28193:66;28270:29;28302:22;;;:6;:22;;;;;;;;28270:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28357:10;;28350:78;;-1:-1:-1;;;28350:78:0;;28382:10;28350:78;;;10226:34:1;;;;28402:4:0;10276:18:1;;;10269:43;10328:18;;;10321:34;;;;28270:54:0;;:29;-1:-1:-1;;;;;28357:10:0;;;;28350:31;;10161:18:1;;28350:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28335:93;;28447:7;28439:41;;;;-1:-1:-1;;;28439:41:0;;10818:2:1;28439:41:0;;;10800:21:1;10857:2;10837:18;;;10830:30;-1:-1:-1;;;10876:18:1;;;10869:51;10937:18;;28439:41:0;10616:345:1;28439:41:0;28495:18;;;;:22;28491:71;;28526:10;;28543:18;;;;;28519:43;;-1:-1:-1;;;28519:43:0;;-1:-1:-1;;;;;28526:10:0;;;;28519:23;;:43;;;;2212:25:1;;;2200:2;2185:18;;2066:177;28519:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28491:71;28573:37;;;28641:21;;28621:17;;;:41;28702:30;;;;;;28673:26;;;:59;28757:15;;;;28743:11;;;:29;28798:15;;;;28784:11;;;:29;28841:10;-1:-1:-1;28825:27:0;;;:15;:27;;;;;;;28855:15;28825:45;;28928:21;;28951:30;;28886:96;;3812:25:1;;;3853:18;;;3846:34;;;;3896:18;;3889:34;;;;28841:10:0;28886:96;;3800:2:1;3785:18;28886:96:0;;;;;;;27778:1212;;;;27745:1245::o;17699:916::-;969:13;:11;:13::i;:::-;17811:19:::1;17774:27;17804::::0;;;:6:::1;:27;::::0;;;;;;;17774:57;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;;17838:726:::1;17852:15:::0;;::::1;17838:726;;;17885:12;17900:6;;17907:1;17900:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17925:29:0;::::1;;::::0;;;:23:::1;:29;::::0;;;;;17885:24;;-1:-1:-1;17925:29:0::1;;17920:633;;-1:-1:-1::0;;;;;17971:29:0;::::1;;::::0;;;:23:::1;:29;::::0;;;;:36;;-1:-1:-1;;17971:36:0::1;18003:4;17971:36;::::0;;18022:12:::1;:14:::0;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;18075:22:0::1;::::0;-1:-1:-1;;;;;18051:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:46;;;;18112:13:::1;:19:::0;;;;;18134:15:::1;18112:37:::0;;18208:12:::1;:18:::0;;;;;18264:19:::1;18245:38:::0;;18318:19;;18302:13:::1;::::0;::::1;:35:::0;18381:28;;::::1;::::0;18356:22:::1;::::0;::::1;:53:::0;18428:21:::1;::::0;::::1;:25:::0;18482:13:::1;::::0;::::1;::::0;18472:7:::1;::::0;::::1;:23:::0;18524:13:::1;::::0;::::1;::::0;18514:7:::1;::::0;;::::1;:23:::0;17920:633:::1;-1:-1:-1::0;17869:3:0;::::1;::::0;::::1;:::i;:::-;;;;17838:726;;;-1:-1:-1::0;18579:28:0::1;::::0;2212:25:1;;;18579:28:0::1;::::0;2200:2:1;2185:18;18579:28:0::1;;;;;;;;17767:848;17699:916:::0;;:::o;16947:201::-;969:13;:11;:13::i;:::-;17043:38:::1;17059:8;17069:5;17076:4;17043:15;:38::i;:::-;17109:14;::::0;17097:43:::1;::::0;;3812:25:1;;;3868:2;3853:18;;3846:34;;;3896:18;;3889:34;;;17097:43:0::1;::::0;3800:2:1;3785:18;17097:43:0::1;3610:319:1::0;1105:166:0;1056:7;1083:6;-1:-1:-1;;;;;1083:6:0;224:10;1165:23;1161:103;;1212:40;;-1:-1:-1;;;1212:40:0;;224:10;1212:40;;;1616:51:1;1589:18;;1212:40:0;1470:203:1;25732:293:0;25792:26;:24;:26::i;:::-;-1:-1:-1;;;;;25913:23:0;;;;;;:15;:23;;;;;;25888:22;;12896:4;;25888:48;;;:::i;:::-;-1:-1:-1;;;;;25862:22:0;;;;;;:14;:22;;;;;;:75;;;;:::i;:::-;25861:97;;;;:::i;:::-;-1:-1:-1;;;;;25829:28:0;;;;;;:20;:28;;;;;:129;;:28;;;:129;;;;;:::i;:::-;;;;-1:-1:-1;;25995:22:0;;-1:-1:-1;;;;;25969:23:0;;;;;;;:15;:23;;;;;:48;25732:293::o;32270:1038::-;32378:14;32395;;;:4;:14;;;;;;;;32378:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32442:20:0;;;;:12;:20;;;;;;;32513:7;;;;32522;;;;32378:31;;32477:53;;32455:6;;32507:1;;32510;;32513:7;32477:21;:53::i;:::-;32473:96;;;32539:30;;-1:-1:-1;;;32539:30:0;;;;;;;;;;;32473:96;32602:5;:13;;;32584:5;:14;;;:31;32580:71;;32624:27;;-1:-1:-1;;;32624:27:0;;;;;;;;;;;32580:71;32715:5;:22;;;32692:3;:20;;;32668:5;:21;;;:44;;;;:::i;:::-;:69;32664:117;;;32746:35;;-1:-1:-1;;;32746:35:0;;;;;;;;;;;32664:117;32817:3;:20;;;32792:5;:21;;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;32848:14:0;:16;;;:14;:16;;;:::i;:::-;;;;-1:-1:-1;;32875:5:0;;;;:9;;;32895:5;;;:9;;;32924:14;;;32915:6;;;;:23;;;;-1:-1:-1;;;;;32949:28:0;;-1:-1:-1;32949:28:0;;;:20;:28;;;;;:31;;;;;;;;:34;;;;;;;;:41;;-1:-1:-1;;32949:41:0;32986:4;32949:41;;;33001:20;;;:12;:20;;;;;:23;;;;;;;;:26;;;;;;;;:37;;;33077:14;;33049:23;;;:15;:23;;;;;;:43;;:27;:43::i;:::-;-1:-1:-1;33116:14:0;;33103:28;;;;:12;:28;;;;;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33103:34:0;;;;;;;;;;;33148:14;;:16;;;;;;:::i;:::-;;;;;;33175:39;33193:6;33201:3;:12;;;33175:17;:39::i;:::-;33279:14;;33230:70;;;14270:25:1;;;14326:2;14311:18;;14304:34;;;;14354:18;;14347:34;;;14412:2;14397:18;;14390:34;;;33263:8:0;;-1:-1:-1;;;;;33230:70:0;;;;;;;14257:3:1;14242:19;33230:70:0;;;;;;;32367:941;;32270:1038;;;;;:::o;1618:191::-;1692:16;1711:6;;-1:-1:-1;;;;;1728:17:0;;;-1:-1:-1;;;;;;1728:17:0;;;;;;1761:40;;1711:6;;;;;;;1761:40;;1692:16;1761:40;1681:128;1618:191;:::o;17435:256::-;17527:14;:16;;;:14;:16;;;:::i;:::-;;;;-1:-1:-1;;17577:106:0;;;;;;;;17581:14;;17577:106;;;-1:-1:-1;;17577:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17577:106:0;;;;;;17554:20;;;:4;:20;;;;;;;:129;;;;;17577:106;17554:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17554:129:0;;;;;;;;;;17435:256::o;19632:547::-;19711:14;;19692:15;:33;19688:46;;19632:547::o;19688:46::-;19748:13;;19765:1;19748:18;19744:104;;19800:15;19783:14;:32;19632:547::o;19744:104::-;19868:17;19906:14;;19888:15;:32;;;;:::i;:::-;19868:52;;19931:21;19955:27;:25;:27::i;:::-;19931:51;-1:-1:-1;19993:15:0;20011:25;19931:51;20011:9;:25;:::i;:::-;20115:13;;19993:43;;-1:-1:-1;20084:27:0;12896:4;19993:43;20084:27;:::i;:::-;20083:45;;;;:::i;:::-;20057:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;20156:15:0;20139:14;:32;-1:-1:-1;;;19632:547:0:o;33316:286::-;33454:4;33487:6;33475:8;:18;;:40;;;;33509:6;33497:8;:18;;33475:40;33471:57;;;-1:-1:-1;33524:4:0;33517:11;;33471:57;-1:-1:-1;;;;;;33546:28:0;;;;;;:20;:28;;;;;;;;:38;;;;;;;;:48;;;;;;;;;;;33316:286;;;;;;;;:::o;2816:150::-;2886:11;2919:39;2937:3;2951:5;2919:3;:39::i;23065:531::-;23151:16;;;;23146:221;;23184:16;:23;;-1:-1:-1;;23184:23:0;23203:4;23184:23;;;23234:15;23222:9;:27;;;23269:14;:32;23321:34;;;;;;23342:12;2212:25:1;;2200:2;2185:18;;2066:177;23321:34:0;;;;;;;;23146:221;23377:22;23392:6;23377:14;:22::i;:::-;23427:8;23410:13;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23446:22:0;;;;;;:14;:22;;;;;:34;;23472:8;;23446:22;:34;;23472:8;;23446:34;:::i;:::-;;;;-1:-1:-1;;;;;;;23496:92:0;;23535:22;;;;:14;:22;;;;;;;;;23559:20;:28;;;;;;;;23496:92;;;;;;12857:25:1;;12913:2;12898:18;;12891:34;12845:2;12830:18;;12683:248;23496:92:0;;;;;;;;23065:531;;:::o;4090:761::-;6458:30;6452:4;6445:44;4160:11;6503:20;;;6558:4;6542:21;;4265:14;4258:5;4255:25;4252:76;;4296:10;4290:4;4283:24;4321:4;4315;4308:18;4252:76;4352:5;4342:44;;4370:14;4361:23;;4342:44;4413:8;4407:4;4400:22;4449:5;4443:4;4436:19;4494:4;4488;4478:21;4529:1;4523:8;4513:320;;4571:8;4567:13;4561:20;4612:1;4606:4;4599:15;4686:5;4681:1;4678;4674:9;4664:8;4660:24;4653:39;4734:1;4731;4727:9;4724:1;4720:17;4717:1;4710:28;4785:1;4782;4778:9;4767:8;4763:13;4756:32;;4817:1;4807:11;;4513:320;;4237:607;4090:761;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:180::-;461:6;514:2;502:9;493:7;489:23;485:32;482:52;;;530:1;527;520:12;482:52;-1:-1:-1;553:23:1;;402:180;-1:-1:-1;402:180:1:o;1678:383::-;1755:6;1763;1771;1824:2;1812:9;1803:7;1799:23;1795:32;1792:52;;;1840:1;1837;1830:12;1792:52;1879:9;1866:23;1898:31;1923:5;1898:31;:::i;:::-;1948:5;2000:2;1985:18;;1972:32;;-1:-1:-1;2051:2:1;2036:18;;;2023:32;;1678:383;-1:-1:-1;;;1678:383:1:o;2248:615::-;2334:6;2342;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;2451:9;2438:23;2480:18;2521:2;2513:6;2510:14;2507:34;;;2537:1;2534;2527:12;2507:34;2575:6;2564:9;2560:22;2550:32;;2620:7;2613:4;2609:2;2605:13;2601:27;2591:55;;2642:1;2639;2632:12;2591:55;2682:2;2669:16;2708:2;2700:6;2697:14;2694:34;;;2724:1;2721;2714:12;2694:34;2777:7;2772:2;2762:6;2759:1;2755:14;2751:2;2747:23;2743:32;2740:45;2737:65;;;2798:1;2795;2788:12;2737:65;2829:2;2821:11;;;;;2851:6;;-1:-1:-1;2248:615:1;;-1:-1:-1;;;;2248:615:1:o;3934:118::-;4020:5;4013:13;4006:21;3999:5;3996:32;3986:60;;4042:1;4039;4032:12;4057:382;4122:6;4130;4183:2;4171:9;4162:7;4158:23;4154:32;4151:52;;;4199:1;4196;4189:12;4151:52;4238:9;4225:23;4257:31;4282:5;4257:31;:::i;:::-;4307:5;-1:-1:-1;4364:2:1;4349:18;;4336:32;4377:30;4336:32;4377:30;:::i;:::-;4426:7;4416:17;;;4057:382;;;;;:::o;4444:316::-;4521:6;4529;4537;4590:2;4578:9;4569:7;4565:23;4561:32;4558:52;;;4606:1;4603;4596:12;4558:52;-1:-1:-1;;4629:23:1;;;4699:2;4684:18;;4671:32;;-1:-1:-1;4750:2:1;4735:18;;;4722:32;;4444:316;-1:-1:-1;4444:316:1:o;4765:248::-;4833:6;4841;4894:2;4882:9;4873:7;4869:23;4865:32;4862:52;;;4910:1;4907;4900:12;4862:52;-1:-1:-1;;4933:23:1;;;5003:2;4988:18;;;4975:32;;-1:-1:-1;4765:248:1:o;5630:454::-;5725:6;5733;5741;5749;5757;5810:3;5798:9;5789:7;5785:23;5781:33;5778:53;;;5827:1;5824;5817:12;5778:53;-1:-1:-1;;5850:23:1;;;5920:2;5905:18;;5892:32;;-1:-1:-1;5971:2:1;5956:18;;5943:32;;6022:2;6007:18;;5994:32;;-1:-1:-1;6073:3:1;6058:19;6045:33;;-1:-1:-1;5630:454:1;-1:-1:-1;5630:454:1:o;6089:269::-;6146:6;6199:2;6187:9;6178:7;6174:23;6170:32;6167:52;;;6215:1;6212;6205:12;6167:52;6254:9;6241:23;6304:4;6297:5;6293:16;6286:5;6283:27;6273:55;;6324:1;6321;6314:12;6363:315;6431:6;6439;6492:2;6480:9;6471:7;6467:23;6463:32;6460:52;;;6508:1;6505;6498:12;6460:52;6547:9;6534:23;6566:31;6591:5;6566:31;:::i;:::-;6616:5;6668:2;6653:18;;;;6640:32;;-1:-1:-1;;;6363:315:1:o;6683:127::-;6744:10;6739:3;6735:20;6732:1;6725:31;6775:4;6772:1;6765:15;6799:4;6796:1;6789:15;6815:127;6876:10;6871:3;6867:20;6864:1;6857:31;6907:4;6904:1;6897:15;6931:4;6928:1;6921:15;6947:135;6986:3;7007:17;;;7004:43;;7027:18;;:::i;:::-;-1:-1:-1;7074:1:1;7063:13;;6947:135::o;7087:188::-;7166:13;;-1:-1:-1;;;;;7208:42:1;;7198:53;;7188:81;;7265:1;7262;7255:12;7188:81;7087:188;;;:::o;7280:450::-;7367:6;7375;7383;7436:2;7424:9;7415:7;7411:23;7407:32;7404:52;;;7452:1;7449;7442:12;7404:52;7475:40;7505:9;7475:40;:::i;:::-;7465:50;;7534:49;7579:2;7568:9;7564:18;7534:49;:::i;:::-;7524:59;;7626:2;7615:9;7611:18;7605:25;7670:10;7663:5;7659:22;7652:5;7649:33;7639:61;;7696:1;7693;7686:12;7639:61;7719:5;7709:15;;;7280:450;;;;;:::o;7735:251::-;7805:6;7858:2;7846:9;7837:7;7833:23;7829:32;7826:52;;;7874:1;7871;7864:12;7826:52;7906:9;7900:16;7925:31;7950:5;7925:31;:::i;7991:168::-;8064:9;;;8095;;8112:15;;;8106:22;;8092:37;8082:71;;8133:18;;:::i;:::-;7991:168;;;;:::o;8164:217::-;8204:1;8230;8220:132;;8274:10;8269:3;8265:20;8262:1;8255:31;8309:4;8306:1;8299:15;8337:4;8334:1;8327:15;8220:132;-1:-1:-1;8366:9:1;;8164:217::o;8675:125::-;8740:9;;;8761:10;;;8758:36;;;8774:18;;:::i;8805:128::-;8872:9;;;8893:11;;;8890:37;;;8907:18;;:::i;9575:406::-;9777:2;9759:21;;;9816:2;9796:18;;;9789:30;9855:34;9850:2;9835:18;;9828:62;-1:-1:-1;;;9921:2:1;9906:18;;9899:40;9971:3;9956:19;;9575:406::o;10366:245::-;10433:6;10486:2;10474:9;10465:7;10461:23;10457:32;10454:52;;;10502:1;10499;10492:12;10454:52;10534:9;10528:16;10553:28;10575:5;10553:28;:::i;11668:184::-;11738:6;11791:2;11779:9;11770:7;11766:23;11762:32;11759:52;;;11807:1;11804;11797:12;11759:52;-1:-1:-1;11830:16:1;;11668:184;-1:-1:-1;11668:184:1:o;12542:136::-;12581:3;12609:5;12599:39;;12618:18;;:::i;:::-;-1:-1:-1;;;12654:18:1;;12542:136::o
Swarm Source
ipfs://6d951f7ac4f0d052329a23db1492f6fb45a120ca79422b48a36a82b67b932ee6
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.