Overview
APE Balance
APE Value
$0.50 (@ $0.14/APE)Multichain Info
Latest 15 from a total of 15 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Play | 19458344 | 197 days ago | IN | 10.02 APE | 0.015501 | ||||
| Play | 19458312 | 197 days ago | IN | 5.02 APE | 0.01538528 | ||||
| Play | 19458294 | 197 days ago | IN | 5.02 APE | 0.01538528 | ||||
| Play | 19458272 | 197 days ago | IN | 5.02 APE | 0.01705596 | ||||
| Set Partner Fee ... | 19458125 | 197 days ago | IN | 0 APE | 0.0008132 | ||||
| Set Partner Addr... | 19458123 | 197 days ago | IN | 0 APE | 0.00125725 | ||||
| Play | 19454337 | 197 days ago | IN | 5.02 APE | 0.01519 | ||||
| Play | 19454288 | 197 days ago | IN | 5.02 APE | 0.01518998 | ||||
| Play | 19382019 | 199 days ago | IN | 6.02 APE | 0.01498712 | ||||
| Play | 19382006 | 199 days ago | IN | 10.02 APE | 0.01492926 | ||||
| Play | 19381948 | 199 days ago | IN | 10.02 APE | 0.01597222 | ||||
| Play | 19364646 | 200 days ago | IN | 2.02 APE | 0.01510281 | ||||
| Play | 19364575 | 200 days ago | IN | 2.02 APE | 0.01510281 | ||||
| Play | 19343080 | 200 days ago | IN | 2.02 APE | 0.01481352 | ||||
| Play | 19342922 | 200 days ago | IN | 5.02 APE | 0.01640661 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 19458345 | 197 days ago | 0.66416666 APE | ||||
| 19458345 | 197 days ago | 9.17583333 APE | ||||
| 19458344 | 197 days ago | 0.02 APE | ||||
| 19458344 | 197 days ago | 0.16 APE | ||||
| 19458344 | 197 days ago | 0.0528 APE | ||||
| 19458344 | 197 days ago | 0.1072 APE | ||||
| 19458336 | 197 days ago | 4.92 APE | ||||
| 19458335 | 197 days ago | 0.02 APE | ||||
| 19458335 | 197 days ago | 0.08 APE | ||||
| 19458335 | 197 days ago | 0.0264 APE | ||||
| 19458335 | 197 days ago | 0.0536 APE | ||||
| 19458335 | 197 days ago | 5.02 APE | ||||
| 19458328 | 197 days ago | 4.92 APE | ||||
| 19458324 | 197 days ago | 0.02 APE | ||||
| 19458324 | 197 days ago | 0.08 APE | ||||
| 19458324 | 197 days ago | 0.0264 APE | ||||
| 19458324 | 197 days ago | 0.0536 APE | ||||
| 19458324 | 197 days ago | 5.02 APE | ||||
| 19458315 | 197 days ago | 0.03458333 APE | ||||
| 19458315 | 197 days ago | 4.88541666 APE | ||||
| 19458312 | 197 days ago | 0.02 APE | ||||
| 19458312 | 197 days ago | 0.08 APE | ||||
| 19458312 | 197 days ago | 0.0264 APE | ||||
| 19458312 | 197 days ago | 0.0536 APE | ||||
| 19458297 | 197 days ago | 2.8746875 APE |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at apescan.io on 2025-07-15
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IGovernanceManager {
function RNG() external view returns (address);
function owner() external view returns (address);
function referralManager() external view returns (address);
function feeReceiver() external view returns (address);
function claimManager() external view returns (address);
function house() external view returns (address);
function isGame(address game) external view returns (bool);
function userInfoTracker() external view returns (address);
function canPlayForOthers(address addr) external view returns (bool);
function paused() external view returns (bool);
function isAdmin(address admin) external view returns (bool);
}
interface IRNG {
function requestRandom(bytes32 userRandomNumber, uint8 numWords) external payable returns (uint64);
function getFee() external view returns (uint256);
}
contract ApeOwnable {
// Governance Manager
IGovernanceManager public constant manager = IGovernanceManager(0x8632f22e5A921C751CFbBFF92F058A3b11E96b8a);
modifier onlyOwner() {
require(
msg.sender == manager.owner(),
'Only Owner'
);
_;
}
modifier onlyGame() {
require(
manager.isGame(msg.sender),
'UnAuthorized'
);
_;
}
modifier onlyRNG() {
require(
msg.sender == manager.RNG(),
'Only RNG Contract'
);
_;
}
modifier validatePlayer(address player) {
if (player != msg.sender) {
require(
manager.canPlayForOthers(msg.sender),
'UnAuthorized To Play For Others'
);
}
_;
}
modifier notPaused() {
require(
manager.paused() == false,
'All Games Paused'
);
_;
}
modifier onlyAdmin() {
require(
manager.isAdmin(msg.sender),
'UnAuthorized'
);
_;
}
}
interface IGame {
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external;
function play(address user, bytes calldata gameData) external payable;
}
interface IUserInfoTracker {
function wagered(address user, uint256 amount, uint256 GAME_ID) external;
}
interface IClaimManager {
function credit(
uint256 GAME_ID,
address user
) external payable;
function claim() external;
}
interface IHistoryManager {
function addData(address user, uint256 GAME_ID, uint256 gameId) external;
}
interface IFeeRecipient {
function takeFee(address ref, address player) external payable;
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeApprove: approve failed'
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeTransfer: transfer failed'
);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::transferFrom: transferFrom failed'
);
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
}
}
interface IHouse {
/**
House has profited from game, call this to send value into the house and emit the correct event for SubGraphs
*/
function houseProfit(uint256 GAME_ID) external payable;
/**
Function Games Call to tell the house that a user has won the bet
*/
function payout(uint256 GAME_ID, address user, uint256 value) external;
/**
Read function to determine the maximum payout allowed by the house at the current time
*/
function maxPayout() external view returns (uint256);
/**
Randomness has been requested, withdrawals are paused until it is resolved by called `randomRequestResolved()`
*/
function randomRequested() external;
/**
Resolves a random request from chainlink, allowing house users to withdraw
*/
function randomRequestResolved() external;
}
/**
Game Master Class, any inheriting game must pass the necessary fields into the constructor
*/
contract GameMasterclass is ApeOwnable, IGame {
// GAME ID
uint256 public immutable GAME_ID;
// History Manager
IHistoryManager public immutable history;
/** Game Is Either Paused Or Unpaused */
bool public paused = false;
/** List of all used game ids */
uint256[] public usedGameIds;
mapping ( uint256 => bool ) internal isUsedGameId;
// request ID => GameID
mapping ( uint64 => uint256 ) private requestToGame;
/// @notice emitted after a random request has been sent out
event RandomnessRequested(uint256 gameId);
/**
Builds The Necessary Components Of Any Game
*/
constructor(
uint256 GAME_ID_,
address history_
) {
// set other variables
GAME_ID = GAME_ID_;
history = IHistoryManager(history_);
}
//////////////////////////////////////
/////// OWNER FUNCTIONS ////////
//////////////////////////////////////
function pause() external onlyOwner {
paused = true;
}
function resume() external onlyOwner {
paused = false;
}
function withdrawETH(address to, uint256 amount) external onlyOwner {
(bool s,) = payable(to).call{value: amount}("");
require(s);
}
function withdrawToken(address token, uint amount) external onlyOwner {
TransferHelper.safeTransfer(token, msg.sender, amount);
}
function _registerBet(address user, uint256 amount) internal {
IUserInfoTracker(manager.userInfoTracker()).wagered(user, amount, GAME_ID);
}
function _processFee(uint256 feeAmount, address ref, address player) internal {
IFeeRecipient(manager.feeReceiver()).takeFee{value: feeAmount}(ref, player);
}
function getVRFFee() public view returns (uint256) {
return IRNG(manager.RNG()).getFee();
}
function fulfillRandomWords(uint64 requestId, uint256[] calldata randomWords) external virtual {}
function play(address player, bytes calldata gameData) external payable override validatePlayer(player) notPaused() {
require(
!paused,
'Paused'
);
// play game
_playGame(player, gameData);
}
function _playGame(address player, bytes calldata gameData) internal virtual {}
function _handlePayout(address player, uint256 totalToPayout, uint256 amountForHouse) internal {
if (totalToPayout > 0) {
// there is a payout, we won something
if (totalToPayout >= amountForHouse) {
// the user has won more than we are giving to the house
// this means we need to send them (to claim manager) amountForHouse directly
// and only request that the house `payout` the difference!
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: amountForHouse}(
GAME_ID,
player
);
// get the difference
uint256 remaining = totalToPayout - amountForHouse;
if (remaining > 0) {
// payout the rest from the house
IHouse(manager.house()).payout(GAME_ID, player, remaining);
}
} else {
// the user has won less than we are giving to the house
// pay them out directly in full, send whatever is left over to the house
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: totalToPayout}(
GAME_ID,
player
);
// calculate remaining left for the house
uint256 remaining = amountForHouse - totalToPayout;
// send the remaining to the house
IHouse(manager.house()).houseProfit{value: remaining }(GAME_ID);
}
} else {
// we won nothing, send the house everything
IHouse(manager.house()).houseProfit{value: amountForHouse }(GAME_ID);
}
}
/// @dev logs the gameId in the used list and adds game to player's history
function _registerGameId(address player, uint256 gameId) internal {
// set history data
history.addData(player, GAME_ID, gameId);
// add to list of used game ids
usedGameIds.push(gameId);
isUsedGameId[gameId] = true;
}
function _requestRandom(uint256 gameId, uint8 numWords, bytes32 userRandomWord) internal {
// request random words from RNG contract
uint64 requestId = IRNG(manager.RNG()).requestRandom{value: getVRFFee()}(
userRandomWord, // random user seed
numWords // the number of random results to return
);
// require that the requestId is unused
require(
requestToGame[requestId] == 0,
'RequestId In Use'
);
// map this request ID to the game it belongs to
requestToGame[requestId] = gameId;
// set data in house
IHouse(manager.house()).randomRequested();
// emit event
emit RandomnessRequested(gameId);
}
function _resolveRandom(uint64 requestId) internal {
// resolve request in house
IHouse(manager.house()).randomRequestResolved();
// clear storage
delete requestToGame[requestId];
}
function getGameIdFromRequest(uint64 requestId) internal view returns (uint256) {
return requestToGame[requestId];
}
function getHouse() public view returns (address) {
return manager.house();
}
function isValidGameId(uint256 gameId) public view returns (bool) {
return isUsedGameId[gameId] == false && gameId > 0;
}
function batchCallIsUsedGameId(uint256[] calldata gameIds) external view returns (bool[] memory isUsed) {
uint len = gameIds.length;
isUsed = new bool[](len);
for (uint i = 0; i < len;) {
isUsed[i] = isUsedGameId[gameIds[i]];
unchecked { ++i; }
}
}
function paginateUsedGameIDs(uint256 start, uint256 end) external view returns (uint256[] memory) {
if (end > usedGameIds.length) {
end = usedGameIds.length;
}
uint256[] memory ids = new uint256[](end - start);
for (uint i = start; i < end;) {
ids[i - start] = usedGameIds[i];
unchecked { ++i; }
}
return ids;
}
function numUsedGameIDs() external view returns (uint256) {
return usedGameIds.length;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view virtual returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {}
function batchRawGameInfo(uint256[] calldata gameIds) external view virtual returns (bytes[] memory) {}
}
/**
GemHunt Game
*/
contract GemHunt is GameMasterclass {
// Number of cells - must be a perfect square
uint8 public constant numCells = 16;
// Game Struct
struct Game {
/** Player */
address player;
/** Amount Bet Per Guess */
uint256 betAmount;
/** Total Amount For House */
uint256 amountForHouse;
/** Number of Gems */
uint8 numGems;
/** Final Output -- list of bucket indexes */
uint256[] payouts;
/** Total Payout Amount */
uint256 totalPayout;
/** timestamp */
uint256 timestamp;
/** Whether or not the game has ended and the VRF has called back */
bool hasEnded;
}
// GameInfoReturnType
struct GameInfoReturnType {
address player;
uint256 betAmount;
uint8 numGems;
uint256[] payouts;
uint256 totalPayout;
bool hasEnded;
uint256 timestamp;
}
// mapping from GameID => Game
mapping ( uint256 => Game ) public games;
// request ID => GameID
mapping ( uint256 => uint256 ) private requestToGame;
/** Platform Fee Taken Out Of Buy In */
uint256 public platformFee = 160;
/** Partner Cut */
uint256 public partnerFeeCut = 40;
address public partnerAddress;
/** Payout Reducer To Give House An Edge */
uint256 public constant payoutReducer = 9_800; // 98% return to player
/** Precision Denominator */
uint256 private constant PRECISION_DENOM = 10_000; // 0.01x precision
/// @notice emitted after the platform fee has been changed
event SetPlatformFee(uint256 newFee);
/// @notice emitted after a game has been started at a specific table
event GameStarted(address indexed user, uint256 gameId);
/// @notice Emitted after the VRF comes back with the index of the winning player
event GameEnded(
address indexed user,
uint256 gameId,
uint256 buyIn,
uint256 payout
);
/// @notice Emitted if the fulfilRandomWords function needs to return out for any reason
event FulfilRandomFailed(uint256 requestId, uint256 gameId, uint256[] randomWords);
/// @notice Emitted when the reel data is updated, emits the odds associated with the reel data
event OddsLocked();
constructor(
/** History Manager */
address history_
) GameMasterclass(10, history_) {
}
function setPlatformFee(uint256 newPlatform) external onlyOwner {
require(
newPlatform <= PRECISION_DENOM / 20,
'Cannot Exceed 5%'
);
platformFee = newPlatform;
emit SetPlatformFee(newPlatform);
}
function setPartnerAddress(address partner_) external onlyOwner {
partnerAddress = partner_;
}
function setPartnerFeeCut(uint256 newCut) external onlyOwner {
require(
newCut < 100,
'100% Partner Fee'
);
partnerFeeCut = newCut;
}
function _playGame(address player, bytes calldata gameData) internal override {
// determine vrf fee
uint256 vrfFee = getVRFFee();
// decode gameData
(
uint8 numGems,
uint256 gameId,
address ref,
bytes32 userRandomWord
) = abi.decode(gameData, (uint8, uint256, address, bytes32));
// validate inputs
require(
msg.value >= vrfFee,
'ERR: MIN BUY IN'
);
require(
isValidGameId(gameId) == true,
'ERR: INVALID GAME ID'
);
require(
numGems > 0 && numGems < numCells,
'Invalid Number of Gems'
);
// determine total bet amount
uint256 totalBetAmount = msg.value - vrfFee;
// take platform fee out of the buy in
uint256 platformFeeAmount = ( totalBetAmount * platformFee ) / PRECISION_DENOM;
if (partnerAddress == address(0) || partnerFeeCut == 0) {
// send to platform receiver (taking ref into account)
_processFee(platformFeeAmount, ref, player);
} else {
// partner cut
uint256 partnerCut = ( platformFeeAmount * partnerFeeCut ) / 100;
// subtract from platform fee
uint256 realPlatformAmount = platformFeeAmount - partnerCut;
// send to platform receiver (taking ref into account)
_processFee(realPlatformAmount, ref, player);
// send to partner
TransferHelper.safeTransferETH(partnerAddress, partnerCut);
}
// determine bet amount
uint256 betAmount = totalBetAmount / numGems; // get bet amount guess
require(
betAmount > 0,
'Invalid Bet Amount'
);
// send to platform receiver (taking ref into account)
_processFee(platformFeeAmount, ref, player);
// save game data
games[gameId].player = player;
games[gameId].betAmount = betAmount;
games[gameId].amountForHouse = totalBetAmount - platformFeeAmount;
games[gameId].numGems = numGems;
games[gameId].timestamp = block.timestamp;
games[gameId].payouts = new uint256[](numGems); // set payout length to equal the number of guesses over the number of games
// register game Id
_registerGameId(player, gameId);
// register bet
_registerBet(player, totalBetAmount);
// emit event
emit GameStarted(player, gameId);
// fetch random number
_requestRandom(gameId, numGems, userRandomWord);
}
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external override onlyRNG {
// get game ID from requestId
uint256 gameId = getGameIdFromRequest(requestId);
// resolve randomness
_resolveRandom(requestId);
// get game ID from requestId
uint256 betAmount = games[gameId].betAmount;
uint8 numGems = games[gameId].numGems;
// if faulty ID, remove
if (
gameId == 0 ||
games[gameId].player == address(0) ||
games[gameId].hasEnded == true ||
betAmount == 0 ||
numGems == 0
) {
emit FulfilRandomFailed(requestId, gameId, randomWords);
return;
}
// set game has ended
games[gameId].hasEnded = true;
// total to pay out for the house and total to send the house
uint256 totalToPayout = 0;
// define remaining gems to get
uint256 remainingGems = numGems;
// loop through number of guesses in each game
for (uint8 g = 0; g < numGems;) {
if (remainingGems == 0) {
break;
}
// get random word
uint256 rando = randomWords[g] % (numCells - g);
if (rando < remainingGems) {
// we hit a gem! determine payout based on odds
uint256 payout = ( payoutReducer * ( betAmount * ( numCells - g ) ) ) / ( remainingGems * PRECISION_DENOM );
// save payout in array
games[gameId].payouts[g] = payout;
// add to total payout
unchecked {
totalToPayout += payout;
}
// decrement remaining gems
unchecked { --remainingGems; }
}
unchecked { ++g; }
}
// save payout info
games[gameId].totalPayout = totalToPayout;
// handle payouts
_handlePayout(games[gameId].player, totalToPayout, games[gameId].amountForHouse);
// emit game ended event
emit GameEnded(games[gameId].player, gameId, games[gameId].betAmount * numGems, totalToPayout);
}
function getPayoutAmount(uint256 betAmount, uint8 numCellsRemaining, uint8 remainingGems) external pure returns (uint256) {
return ( payoutReducer * ( betAmount * ( numCellsRemaining ) ) ) / ( remainingGems * PRECISION_DENOM );
}
function getGameInfo(uint256 gameId) public view returns (
GameInfoReturnType memory
) {
return GameInfoReturnType({
player: games[gameId].player,
betAmount: games[gameId].betAmount * games[gameId].numGems,
numGems: games[gameId].numGems,
payouts: games[gameId].payouts,
totalPayout: games[gameId].totalPayout,
hasEnded: games[gameId].hasEnded,
timestamp: games[gameId].timestamp
});
}
function batchGameInfo(uint256[] calldata gameIds) external view returns (
GameInfoReturnType[] memory
) {
uint len = gameIds.length;
GameInfoReturnType[] memory retTypes = new GameInfoReturnType[](len);
for (uint i = 0; i < len;) {
retTypes[i] = getGameInfo(gameIds[i]);
unchecked { ++i; }
}
return retTypes;
}
function batchRawGameInfo(uint256[] calldata gameIds) external view override returns (bytes[] memory) {
uint len = gameIds.length;
bytes[] memory retTypes = new bytes[](len);
for (uint i = 0; i < len;) {
retTypes[i] = abi.encode(getGameInfo(gameIds[i]));
unchecked { ++i; }
}
return retTypes;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view override returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {
uint len = gameIds.length;
players = new address[](len);
buyInAmounts = new uint256[](len);
totalPayouts = new uint256[](len);
timestamps = new uint256[](len);
hasEndeds = new bool[](len);
for (uint i = 0; i < len;) {
players[i] = games[gameIds[i]].player;
buyInAmounts[i] = games[gameIds[i]].betAmount * games[gameIds[i]].numGems;
totalPayouts[i] = games[gameIds[i]].totalPayout;
timestamps[i] = games[gameIds[i]].timestamp;
hasEndeds[i] = games[gameIds[i]].hasEnded;
unchecked { ++i; }
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"history_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"FulfilRandomFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"OddsLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"SetPlatformFee","type":"event"},{"inputs":[],"name":"GAME_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchCallIsUsedGameId","outputs":[{"internalType":"bool[]","name":"isUsed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct GemHunt.GameInfoReturnType[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchRawGameInfo","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"fulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"amountForHouse","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"getEssentialGameInfo","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint256[]","name":"buyInAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"totalPayouts","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"},{"internalType":"bool[]","name":"hasEndeds","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numGems","type":"uint8"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct GemHunt.GameInfoReturnType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"numCellsRemaining","type":"uint8"},{"internalType":"uint8","name":"remainingGems","type":"uint8"}],"name":"getPayoutAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVRFFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"history","outputs":[{"internalType":"contract IHistoryManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"isValidGameId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IGovernanceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numCells","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUsedGameIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"paginateUsedGameIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeCut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutReducer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"bytes","name":"gameData","type":"bytes"}],"name":"play","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"partner_","type":"address"}],"name":"setPartnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCut","type":"uint256"}],"name":"setPartnerFeeCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlatform","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedGameIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040526000805460ff1916905560a0600655602860075534801561002457600080fd5b5060405161345e38038061345e83398101604081905261004391610059565b600a6080526001600160a01b031660a052610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b60805160a0516133786100e66000396000818161059c015261270101526000818161067e01528181611c4401528181611d4f01528181611e4f01528181611f560152818161204c015281816126d4015261283f01526133786000f3fe6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad711461062f578063cc81d05514610642578063f0034a7e14610657578063fdcdb06b1461066c57600080fd5b806398daac831461058a5780639e281a98146105be578063a1087fb0146105de578063c4fd5d6d146105fe57600080fd5b80638456cb59116100d15780638456cb591461051257806389fc2c0f1461052757806391ea41e61461054757806398af61601461057457600080fd5b80635c975abb14610495578063749fa03c146104af5780637b8d3879146104cf57806382c60c16146104fc57600080fd5b806332883e7e1161017a57806348e8294a1161014957806348e8294a146103f157806351e925591461041e57806352d55c111461044e578063576168fc1461047557600080fd5b806332883e7e146103555780634782f7791461038257806347e1d550146103a2578063481c6a75146103cf57600080fd5b806312e8e2c3116101b657806312e8e2c3146102d157806326232a2e146102f15780632dffa869146103155780632e6e800b1461033557600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f26106a0565b005b34801561020057600080fd5b50610209610755565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b5061028e610241366004612bbc565b60046020526000908152604090208054600182015460028301546003840154600585015460068601546007909601546001600160a01b03909516959394929360ff92831693919290911687565b604080516001600160a01b03909816885260208801969096529486019390935260ff9091166060850152608084015260a0830152151560c082015260e00161021d565b3480156102dd57600080fd5b506101f26102ec366004612bbc565b6107cc565b3480156102fd57600080fd5b5061030760065481565b60405190815260200161021d565b34801561032157600080fd5b506101f2610330366004612bbc565b6108f6565b34801561034157600080fd5b506101f2610350366004612bed565b6109de565b34801561036157600080fd5b50610375610370366004612c11565b610aa0565b60405161021d9190612c6f565b34801561038e57600080fd5b506101f261039d366004612c82565b610b64565b3480156103ae57600080fd5b506103c26103bd366004612bbc565b610c69565b60405161021d9190612d4f565b3480156103db57600080fd5b5061020960008051602061332383398151915281565b3480156103fd57600080fd5b5061041161040c366004612dad565b610d76565b60405161021d9190612dee565b34801561042a57600080fd5b5061043e610439366004612bbc565b610e29565b604051901515815260200161021d565b34801561045a57600080fd5b50610463601081565b60405160ff909116815260200161021d565b34801561048157600080fd5b50600854610209906001600160a01b031681565b3480156104a157600080fd5b5060005461043e9060ff1681565b3480156104bb57600080fd5b506101f26104ca366004612e68565b610e49565b3480156104db57600080fd5b506104ef6104ea366004612dad565b61119e565b60405161021d9190612ef0565b34801561050857600080fd5b5061030761264881565b34801561051e57600080fd5b506101f261125b565b34801561053357600080fd5b50610307610542366004612bbc565b61130a565b34801561055357600080fd5b50610567610562366004612dad565b61132b565b60405161021d9190612f27565b34801561058057600080fd5b5061030760075481565b34801561059657600080fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ca57600080fd5b506101f26105d9366004612c82565b6113e2565b3480156105ea57600080fd5b506103076105f9366004612fb1565b611491565b34801561060a57600080fd5b5061061e610619366004612dad565b6114cd565b60405161021d959493929190612fed565b6101f261063d36600461308d565b611842565b34801561064e57600080fd5b50600154610307565b34801561066357600080fd5b50610307611a09565b34801561067857600080fd5b506103077f000000000000000000000000000000000000000000000000000000000000000081565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613112565b6001600160a01b0316336001600160a01b0316146107495760405162461bcd60e51b81526004016107409061312f565b60405180910390fd5b6000805460ff19169055565b60006000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190613112565b905090565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190613112565b6001600160a01b0316336001600160a01b03161461086c5760405162461bcd60e51b81526004016107409061312f565b610879601461271061317f565b8111156108bb5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610740565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190613112565b6001600160a01b0316336001600160a01b0316146109965760405162461bcd60e51b81526004016107409061312f565b606481106109d95760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610740565b600755565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613112565b6001600160a01b0316336001600160a01b031614610a7e5760405162461bcd60e51b81526004016107409061312f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610ab35760015491505b6000610abf8484613193565b6001600160401b03811115610ad657610ad66131a6565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050835b83811015610b5a5760018181548110610b1f57610b1f6131bc565b9060005260206000200154828683610b379190613193565b81518110610b4757610b476131bc565b6020908102919091010152600101610b04565b5090505b92915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190613112565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016107409061312f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c51576040519150601f19603f3d011682016040523d82523d6000602084013e610c56565b606091505b5050905080610c6457600080fd5b505050565b610c71612b11565b6040805160e08101825260008481526004602081815293822080546001600160a01b0316845291869052835260038101546001909101549192830191610cba9160ff16906131d2565b81526000848152600460208181526040808420600381015460ff168387015293889052828252929091018054835181840281018401855281815293909401939091830182828015610d2a57602002820191906000526020600020905b815481526020019060010190808311610d16575b50505091835250506000848152600460208181526040808420600581015483870152600781015460ff161515918601919091529690925290526006909301546060909301929092525090565b6060816000816001600160401b03811115610d9357610d936131a6565b604051908082528060200260200182016040528015610dcc57816020015b610db9612b11565b815260200190600190039081610db15790505b50905060005b82811015610e2057610dfb868683818110610def57610def6131bc565b90506020020135610c69565b828281518110610e0d57610e0d6131bc565b6020908102919091010152600101610dd2565b50949350505050565b60008181526002602052604081205460ff16158015610b5e575050151590565b6000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190613112565b6001600160a01b0316336001600160a01b031614610f0d5760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610740565b6001600160401b038316600090815260036020526040902054610f2f84611adc565b6000818152600460205260409020600181015460039091015460ff16821580610f6d57506000838152600460205260409020546001600160a01b0316155b80610f8e575060008381526004602052604090206007015460ff1615156001145b80610f97575081155b80610fa3575060ff8116155b15610fed577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fdd94939291906131e9565b60405180910390a1505050505050565b6000838152600460205260408120600701805460ff1916600117905560ff8216815b8360ff168160ff1610156110ee5781156110ee57600061103082601061323b565b60ff1689898460ff16818110611048576110486131bc565b905060200201356110599190613254565b9050828110156110e5576000611071612710856131d2565b61107c84601061323b565b6110899060ff16896131d2565b611095906126486131d2565b61109f919061317f565b905080600460008a81526020019081526020016000206004018460ff16815481106110cc576110cc6131bc565b6000918252602090912001559390930192600019909201915b5060010161100f565b506000858152600460205260409020600581018390558054600290910154611121916001600160a01b0316908490611bb8565b600085815260046020526040902080546001909101546001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89087906111759060ff8816906131d2565b604080519283526020830191909152810185905260600160405180910390a25050505050505050565b606081806001600160401b038111156111b9576111b96131a6565b6040519080825280602002602001820160405280156111e2578160200160208202803683370190505b50915060005b818110156112535760026000868684818110611206576112066131bc565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061123b5761123b6131bc565b911515602092830291909101909101526001016111e8565b505092915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190613112565b6001600160a01b0316336001600160a01b0316146112fb5760405162461bcd60e51b81526004016107409061312f565b6000805460ff19166001179055565b6001818154811061131a57600080fd5b600091825260209091200154905081565b6060816000816001600160401b03811115611348576113486131a6565b60405190808252806020026020018201604052801561137b57816020015b60608152602001906001900390816113665790505b50905060005b82811015610e205761139e868683818110610def57610def6131bc565b6040516020016113ae9190612d4f565b6040516020818303038152906040528282815181106113cf576113cf6131bc565b6020908102919091010152600101611381565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190613112565b6001600160a01b0316336001600160a01b0316146114825760405162461bcd60e51b81526004016107409061312f565b61148d8233836120a2565b5050565b60006114a261271060ff84166131d2565b6114af60ff8516866131d2565b6114bb906126486131d2565b6114c5919061317f565b949350505050565b60608080808085806001600160401b038111156114ec576114ec6131a6565b604051908082528060200260200182016040528015611515578160200160208202803683370190505b509550806001600160401b03811115611530576115306131a6565b604051908082528060200260200182016040528015611559578160200160208202803683370190505b509450806001600160401b03811115611574576115746131a6565b60405190808252806020026020018201604052801561159d578160200160208202803683370190505b509350806001600160401b038111156115b8576115b86131a6565b6040519080825280602002602001820160405280156115e1578160200160208202803683370190505b509250806001600160401b038111156115fc576115fc6131a6565b604051908082528060200260200182016040528015611625578160200160208202803683370190505b50915060005b8181101561183657600460008a8a84818110611649576116496131bc565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b0316878281518110611687576116876131bc565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a848181106116bd576116bd6131bc565b6020908102929092013583525081019190915260400160009081206003015460ff16906004908b8b858181106116f5576116f56131bc565b9050602002013581526020019081526020016000206001015461171891906131d2565b86828151811061172a5761172a6131bc565b602002602001018181525050600460008a8a8481811061174c5761174c6131bc565b90506020020135815260200190815260200160002060050154858281518110611777576117776131bc565b602002602001018181525050600460008a8a84818110611799576117996131bc565b905060200201358152602001908152602001600020600601548482815181106117c4576117c46131bc565b602002602001018181525050600460008a8a848181106117e6576117e66131bc565b90506020020135815260200190815260200160002060070160009054906101000a900460ff1683828151811061181e5761181e6131bc565b9115156020928302919091019091015260010161162b565b50509295509295909350565b826001600160a01b038116331461190c57604051636d6d50a160e11b81523360048201526000805160206133238339815191529063dadaa14290602401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c09190613268565b61190c5760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610740565b6000805160206133238339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190613268565b156119bc5760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610740565b60005460ff16156119f85760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610740565b611a038484846121d3565b50505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613112565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061328a565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613112565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b8115611fcb57808210611dd0576000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c359190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b505050505060008183611cc89190613193565b90508015611a03576000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190613112565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611db257600080fd5b505af1158015611dc6573d6000803e3d6000fd5b5050505050505050565b6000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b505050505060008282611ed39190613193565b90506000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190613112565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b8152600401611f9391815260200190565b6000604051808303818588803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050505050505050565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190613112565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161208991815260200190565b6000604051808303818588803b158015611db257600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120fe91906132a3565b6000604051808303816000865af19150503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b509150915081801561216a57508051158061216a57508080602001905181019061216a9190613268565b6121cc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610740565b5050505050565b60006121dd611a09565b905060008080806121f0868801886132bf565b93509350935093508434101561223a5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610740565b61224383610e29565b151560011461228b5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610740565b60008460ff161180156122a15750601060ff8516105b6122e65760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964204e756d626572206f662047656d7360501b6044820152606401610740565b60006122f28634613193565b905060006127106006548361230791906131d2565b612311919061317f565b6008549091506001600160a01b0316158061232c5750600754155b156123415761233c81858c612531565b612391565b600060646007548361235391906131d2565b61235d919061317f565b9050600061236b8284613193565b905061237881878e612531565b60085461238e906001600160a01b0316836125db565b50505b60006123a060ff88168461317f565b9050600081116123e75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b6044820152606401610740565b6123f282868d612531565b600086815260046020526040902080546001600160a01b0319166001600160a01b038d161781556001018190556124298284613193565b6000878152600460205260409020600281019190915560038101805460ff191660ff8a16908117909155426006909201919091556001600160401b03811115612474576124746131a6565b60405190808252806020026020018201604052801561249d578160200160208202803683370190505b50600087815260046020818152604090922083516124c19491909201920190612b5c565b506124cc8b876126b5565b6124d68b846127a9565b8a6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c78760405161251191815260200190565b60405180910390a26125248688866128a7565b5050505050505050505050565b6000805160206133238339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613112565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612089565b604080516000808252602082019092526001600160a01b03841690839060405161260591906132a3565b60006040518083038185875af1925050503d8060008114612642576040519150601f19603f3d011682016040523d82523d6000602084013e612647565b606091505b5050905080610c645760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610740565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690639a4918c190606401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206133238339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613112565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000006044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129199190613112565b6001600160a01b03166397cca7af61292f611a09565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612974573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129999190613305565b6001600160401b038116600090815260036020526040902054909150156129f55760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610740565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206133238339815191529263ff9b3acf9260048083019391928290030181865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a809190613112565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b0391815260200190565b60405180910390a150505050565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600060ff1681526020016060815260200160008152602001600015158152602001600081525090565b828054828255906000526020600020908101928215612b97579160200282015b82811115612b97578251825591602001919060010190612b7c565b50612ba3929150612ba7565b5090565b5b80821115612ba35760008155600101612ba8565b600060208284031215612bce57600080fd5b5035919050565b6001600160a01b0381168114612bea57600080fd5b50565b600060208284031215612bff57600080fd5b8135612c0a81612bd5565b9392505050565b60008060408385031215612c2457600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c65578151865260209586019590910190600101612c47565b5093949350505050565b602081526000612c0a6020830184612c33565b60008060408385031215612c9557600080fd5b8235612ca081612bd5565b946020939093013593505050565b80516001600160a01b031682526020808201518184015260408083015160ff169084015260608083015160e09185018290528051918501829052600092019082906101008601905b80831015612d195783518252602082019150602084019350600183019250612cf6565b506080850151608087015260a08501519250612d3960a087018415159052565b60c085015160c087015280935050505092915050565b602081526000612c0a6020830184612cae565b60008083601f840112612d7457600080fd5b5081356001600160401b03811115612d8b57600080fd5b6020830191508360208260051b8501011115612da657600080fd5b9250929050565b60008060208385031215612dc057600080fd5b82356001600160401b03811115612dd657600080fd5b612de285828601612d62565b90969095509350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f19878603018452612e32858351612cae565b94506020938401939190910190600101612e16565b50929695505050505050565b6001600160401b0381168114612bea57600080fd5b600080600060408486031215612e7d57600080fd5b8335612e8881612e53565b925060208401356001600160401b03811115612ea357600080fd5b612eaf86828701612d62565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c655781511515865260209586019590910190600101612ed0565b602081526000612c0a6020830184612ebc565b60005b83811015612f1e578181015183820152602001612f06565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f1987860301845281518051808752612f78816020890160208501612f03565b601f01601f19169590950160209081019550938401939190910190600101612f4f565b803560ff81168114612fac57600080fd5b919050565b600080600060608486031215612fc657600080fd5b83359250612fd660208501612f9b565b9150612fe460408501612f9b565b90509250925092565b60a08082528651908201819052600090602088019060c0840190835b818110156130305783516001600160a01b0316835260209384019390920191600101613009565b505083810360208501526130448189612c33565b91505082810360408401526130598187612c33565b9050828103606084015261306d8186612c33565b905082810360808401526130818185612ebc565b98975050505050505050565b6000806000604084860312156130a257600080fd5b83356130ad81612bd5565b925060208401356001600160401b038111156130c857600080fd5b8401601f810186136130d957600080fd5b80356001600160401b038111156130ef57600080fd5b86602082840101111561310157600080fd5b939660209190910195509293505050565b60006020828403121561312457600080fd5b8151612c0a81612bd5565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261318e5761318e613153565b500490565b81810381811115610b5e57610b5e613169565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b5e57610b5e613169565b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561322057600080fd5b8260051b808560808501379190910160800195945050505050565b60ff8281168282160390811115610b5e57610b5e613169565b60008261326357613263613153565b500690565b60006020828403121561327a57600080fd5b81518015158114612c0a57600080fd5b60006020828403121561329c57600080fd5b5051919050565b600082516132b5818460208701612f03565b9190910192915050565b600080600080608085870312156132d557600080fd5b6132de85612f9b565b93506020850135925060408501356132f581612bd5565b9396929550929360600135925050565b60006020828403121561331757600080fd5b8151612c0a81612e5356fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122078824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf64736f6c634300081c0033000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad711461062f578063cc81d05514610642578063f0034a7e14610657578063fdcdb06b1461066c57600080fd5b806398daac831461058a5780639e281a98146105be578063a1087fb0146105de578063c4fd5d6d146105fe57600080fd5b80638456cb59116100d15780638456cb591461051257806389fc2c0f1461052757806391ea41e61461054757806398af61601461057457600080fd5b80635c975abb14610495578063749fa03c146104af5780637b8d3879146104cf57806382c60c16146104fc57600080fd5b806332883e7e1161017a57806348e8294a1161014957806348e8294a146103f157806351e925591461041e57806352d55c111461044e578063576168fc1461047557600080fd5b806332883e7e146103555780634782f7791461038257806347e1d550146103a2578063481c6a75146103cf57600080fd5b806312e8e2c3116101b657806312e8e2c3146102d157806326232a2e146102f15780632dffa869146103155780632e6e800b1461033557600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f26106a0565b005b34801561020057600080fd5b50610209610755565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b5061028e610241366004612bbc565b60046020526000908152604090208054600182015460028301546003840154600585015460068601546007909601546001600160a01b03909516959394929360ff92831693919290911687565b604080516001600160a01b03909816885260208801969096529486019390935260ff9091166060850152608084015260a0830152151560c082015260e00161021d565b3480156102dd57600080fd5b506101f26102ec366004612bbc565b6107cc565b3480156102fd57600080fd5b5061030760065481565b60405190815260200161021d565b34801561032157600080fd5b506101f2610330366004612bbc565b6108f6565b34801561034157600080fd5b506101f2610350366004612bed565b6109de565b34801561036157600080fd5b50610375610370366004612c11565b610aa0565b60405161021d9190612c6f565b34801561038e57600080fd5b506101f261039d366004612c82565b610b64565b3480156103ae57600080fd5b506103c26103bd366004612bbc565b610c69565b60405161021d9190612d4f565b3480156103db57600080fd5b5061020960008051602061332383398151915281565b3480156103fd57600080fd5b5061041161040c366004612dad565b610d76565b60405161021d9190612dee565b34801561042a57600080fd5b5061043e610439366004612bbc565b610e29565b604051901515815260200161021d565b34801561045a57600080fd5b50610463601081565b60405160ff909116815260200161021d565b34801561048157600080fd5b50600854610209906001600160a01b031681565b3480156104a157600080fd5b5060005461043e9060ff1681565b3480156104bb57600080fd5b506101f26104ca366004612e68565b610e49565b3480156104db57600080fd5b506104ef6104ea366004612dad565b61119e565b60405161021d9190612ef0565b34801561050857600080fd5b5061030761264881565b34801561051e57600080fd5b506101f261125b565b34801561053357600080fd5b50610307610542366004612bbc565b61130a565b34801561055357600080fd5b50610567610562366004612dad565b61132b565b60405161021d9190612f27565b34801561058057600080fd5b5061030760075481565b34801561059657600080fd5b506102097f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa81565b3480156105ca57600080fd5b506101f26105d9366004612c82565b6113e2565b3480156105ea57600080fd5b506103076105f9366004612fb1565b611491565b34801561060a57600080fd5b5061061e610619366004612dad565b6114cd565b60405161021d959493929190612fed565b6101f261063d36600461308d565b611842565b34801561064e57600080fd5b50600154610307565b34801561066357600080fd5b50610307611a09565b34801561067857600080fd5b506103077f000000000000000000000000000000000000000000000000000000000000000a81565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613112565b6001600160a01b0316336001600160a01b0316146107495760405162461bcd60e51b81526004016107409061312f565b60405180910390fd5b6000805460ff19169055565b60006000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c79190613112565b905090565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190613112565b6001600160a01b0316336001600160a01b03161461086c5760405162461bcd60e51b81526004016107409061312f565b610879601461271061317f565b8111156108bb5760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610740565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190613112565b6001600160a01b0316336001600160a01b0316146109965760405162461bcd60e51b81526004016107409061312f565b606481106109d95760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610740565b600755565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613112565b6001600160a01b0316336001600160a01b031614610a7e5760405162461bcd60e51b81526004016107409061312f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610ab35760015491505b6000610abf8484613193565b6001600160401b03811115610ad657610ad66131a6565b604051908082528060200260200182016040528015610aff578160200160208202803683370190505b509050835b83811015610b5a5760018181548110610b1f57610b1f6131bc565b9060005260206000200154828683610b379190613193565b81518110610b4757610b476131bc565b6020908102919091010152600101610b04565b5090505b92915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190613112565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016107409061312f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c51576040519150601f19603f3d011682016040523d82523d6000602084013e610c56565b606091505b5050905080610c6457600080fd5b505050565b610c71612b11565b6040805160e08101825260008481526004602081815293822080546001600160a01b0316845291869052835260038101546001909101549192830191610cba9160ff16906131d2565b81526000848152600460208181526040808420600381015460ff168387015293889052828252929091018054835181840281018401855281815293909401939091830182828015610d2a57602002820191906000526020600020905b815481526020019060010190808311610d16575b50505091835250506000848152600460208181526040808420600581015483870152600781015460ff161515918601919091529690925290526006909301546060909301929092525090565b6060816000816001600160401b03811115610d9357610d936131a6565b604051908082528060200260200182016040528015610dcc57816020015b610db9612b11565b815260200190600190039081610db15790505b50905060005b82811015610e2057610dfb868683818110610def57610def6131bc565b90506020020135610c69565b828281518110610e0d57610e0d6131bc565b6020908102919091010152600101610dd2565b50949350505050565b60008181526002602052604081205460ff16158015610b5e575050151590565b6000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb99190613112565b6001600160a01b0316336001600160a01b031614610f0d5760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610740565b6001600160401b038316600090815260036020526040902054610f2f84611adc565b6000818152600460205260409020600181015460039091015460ff16821580610f6d57506000838152600460205260409020546001600160a01b0316155b80610f8e575060008381526004602052604090206007015460ff1615156001145b80610f97575081155b80610fa3575060ff8116155b15610fed577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fdd94939291906131e9565b60405180910390a1505050505050565b6000838152600460205260408120600701805460ff1916600117905560ff8216815b8360ff168160ff1610156110ee5781156110ee57600061103082601061323b565b60ff1689898460ff16818110611048576110486131bc565b905060200201356110599190613254565b9050828110156110e5576000611071612710856131d2565b61107c84601061323b565b6110899060ff16896131d2565b611095906126486131d2565b61109f919061317f565b905080600460008a81526020019081526020016000206004018460ff16815481106110cc576110cc6131bc565b6000918252602090912001559390930192600019909201915b5060010161100f565b506000858152600460205260409020600581018390558054600290910154611121916001600160a01b0316908490611bb8565b600085815260046020526040902080546001909101546001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89087906111759060ff8816906131d2565b604080519283526020830191909152810185905260600160405180910390a25050505050505050565b606081806001600160401b038111156111b9576111b96131a6565b6040519080825280602002602001820160405280156111e2578160200160208202803683370190505b50915060005b818110156112535760026000868684818110611206576112066131bc565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061123b5761123b6131bc565b911515602092830291909101909101526001016111e8565b505092915050565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190613112565b6001600160a01b0316336001600160a01b0316146112fb5760405162461bcd60e51b81526004016107409061312f565b6000805460ff19166001179055565b6001818154811061131a57600080fd5b600091825260209091200154905081565b6060816000816001600160401b03811115611348576113486131a6565b60405190808252806020026020018201604052801561137b57816020015b60608152602001906001900390816113665790505b50905060005b82811015610e205761139e868683818110610def57610def6131bc565b6040516020016113ae9190612d4f565b6040516020818303038152906040528282815181106113cf576113cf6131bc565b6020908102919091010152600101611381565b6000805160206133238339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190613112565b6001600160a01b0316336001600160a01b0316146114825760405162461bcd60e51b81526004016107409061312f565b61148d8233836120a2565b5050565b60006114a261271060ff84166131d2565b6114af60ff8516866131d2565b6114bb906126486131d2565b6114c5919061317f565b949350505050565b60608080808085806001600160401b038111156114ec576114ec6131a6565b604051908082528060200260200182016040528015611515578160200160208202803683370190505b509550806001600160401b03811115611530576115306131a6565b604051908082528060200260200182016040528015611559578160200160208202803683370190505b509450806001600160401b03811115611574576115746131a6565b60405190808252806020026020018201604052801561159d578160200160208202803683370190505b509350806001600160401b038111156115b8576115b86131a6565b6040519080825280602002602001820160405280156115e1578160200160208202803683370190505b509250806001600160401b038111156115fc576115fc6131a6565b604051908082528060200260200182016040528015611625578160200160208202803683370190505b50915060005b8181101561183657600460008a8a84818110611649576116496131bc565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b0316878281518110611687576116876131bc565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a848181106116bd576116bd6131bc565b6020908102929092013583525081019190915260400160009081206003015460ff16906004908b8b858181106116f5576116f56131bc565b9050602002013581526020019081526020016000206001015461171891906131d2565b86828151811061172a5761172a6131bc565b602002602001018181525050600460008a8a8481811061174c5761174c6131bc565b90506020020135815260200190815260200160002060050154858281518110611777576117776131bc565b602002602001018181525050600460008a8a84818110611799576117996131bc565b905060200201358152602001908152602001600020600601548482815181106117c4576117c46131bc565b602002602001018181525050600460008a8a848181106117e6576117e66131bc565b90506020020135815260200190815260200160002060070160009054906101000a900460ff1683828151811061181e5761181e6131bc565b9115156020928302919091019091015260010161162b565b50509295509295909350565b826001600160a01b038116331461190c57604051636d6d50a160e11b81523360048201526000805160206133238339815191529063dadaa14290602401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c09190613268565b61190c5760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610740565b6000805160206133238339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197c9190613268565b156119bc5760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610740565b60005460ff16156119f85760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610740565b611a038484846121d3565b50505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613112565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c7919061328a565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613112565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b8657600080fd5b505af1158015611b9a573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b8115611fcb57808210611dd0576000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c359190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b505050505060008183611cc89190613193565b90508015611a03576000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190613112565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611db257600080fd5b505af1158015611dc6573d6000803e3d6000fd5b5050505050505050565b6000805160206133238339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190613112565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000a60048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b505050505060008282611ed39190613193565b90506000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190613112565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000a6040518363ffffffff1660e01b8152600401611f9391815260200190565b6000604051808303818588803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b505050505050505050565b6000805160206133238339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190613112565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000a6040518363ffffffff1660e01b815260040161208991815260200190565b6000604051808303818588803b158015611db257600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916120fe91906132a3565b6000604051808303816000865af19150503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b509150915081801561216a57508051158061216a57508080602001905181019061216a9190613268565b6121cc5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610740565b5050505050565b60006121dd611a09565b905060008080806121f0868801886132bf565b93509350935093508434101561223a5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610740565b61224383610e29565b151560011461228b5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610740565b60008460ff161180156122a15750601060ff8516105b6122e65760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964204e756d626572206f662047656d7360501b6044820152606401610740565b60006122f28634613193565b905060006127106006548361230791906131d2565b612311919061317f565b6008549091506001600160a01b0316158061232c5750600754155b156123415761233c81858c612531565b612391565b600060646007548361235391906131d2565b61235d919061317f565b9050600061236b8284613193565b905061237881878e612531565b60085461238e906001600160a01b0316836125db565b50505b60006123a060ff88168461317f565b9050600081116123e75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b6044820152606401610740565b6123f282868d612531565b600086815260046020526040902080546001600160a01b0319166001600160a01b038d161781556001018190556124298284613193565b6000878152600460205260409020600281019190915560038101805460ff191660ff8a16908117909155426006909201919091556001600160401b03811115612474576124746131a6565b60405190808252806020026020018201604052801561249d578160200160208202803683370190505b50600087815260046020818152604090922083516124c19491909201920190612b5c565b506124cc8b876126b5565b6124d68b846127a9565b8a6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c78760405161251191815260200190565b60405180910390a26125248688866128a7565b5050505050505050505050565b6000805160206133238339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613112565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612089565b604080516000808252602082019092526001600160a01b03841690839060405161260591906132a3565b60006040518083038185875af1925050503d8060008114612642576040519150601f19603f3d011682016040523d82523d6000602084013e612647565b606091505b5050905080610c645760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610740565b604051639a4918c160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000a6024830152604482018390527f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa1690639a4918c190606401600060405180830381600087803b15801561274557600080fd5b505af1158015612759573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206133238339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613112565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000a6044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561288b57600080fd5b505af115801561289f573d6000803e3d6000fd5b505050505050565b60006000805160206133238339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129199190613112565b6001600160a01b03166397cca7af61292f611a09565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612974573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129999190613305565b6001600160401b038116600090815260036020526040902054909150156129f55760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610740565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206133238339815191529263ff9b3acf9260048083019391928290030181865afa158015612a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a809190613112565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612aba57600080fd5b505af1158015612ace573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b0391815260200190565b60405180910390a150505050565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600060ff1681526020016060815260200160008152602001600015158152602001600081525090565b828054828255906000526020600020908101928215612b97579160200282015b82811115612b97578251825591602001919060010190612b7c565b50612ba3929150612ba7565b5090565b5b80821115612ba35760008155600101612ba8565b600060208284031215612bce57600080fd5b5035919050565b6001600160a01b0381168114612bea57600080fd5b50565b600060208284031215612bff57600080fd5b8135612c0a81612bd5565b9392505050565b60008060408385031215612c2457600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c65578151865260209586019590910190600101612c47565b5093949350505050565b602081526000612c0a6020830184612c33565b60008060408385031215612c9557600080fd5b8235612ca081612bd5565b946020939093013593505050565b80516001600160a01b031682526020808201518184015260408083015160ff169084015260608083015160e09185018290528051918501829052600092019082906101008601905b80831015612d195783518252602082019150602084019350600183019250612cf6565b506080850151608087015260a08501519250612d3960a087018415159052565b60c085015160c087015280935050505092915050565b602081526000612c0a6020830184612cae565b60008083601f840112612d7457600080fd5b5081356001600160401b03811115612d8b57600080fd5b6020830191508360208260051b8501011115612da657600080fd5b9250929050565b60008060208385031215612dc057600080fd5b82356001600160401b03811115612dd657600080fd5b612de285828601612d62565b90969095509350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f19878603018452612e32858351612cae565b94506020938401939190910190600101612e16565b50929695505050505050565b6001600160401b0381168114612bea57600080fd5b600080600060408486031215612e7d57600080fd5b8335612e8881612e53565b925060208401356001600160401b03811115612ea357600080fd5b612eaf86828701612d62565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c655781511515865260209586019590910190600101612ed0565b602081526000612c0a6020830184612ebc565b60005b83811015612f1e578181015183820152602001612f06565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612e4757603f1987860301845281518051808752612f78816020890160208501612f03565b601f01601f19169590950160209081019550938401939190910190600101612f4f565b803560ff81168114612fac57600080fd5b919050565b600080600060608486031215612fc657600080fd5b83359250612fd660208501612f9b565b9150612fe460408501612f9b565b90509250925092565b60a08082528651908201819052600090602088019060c0840190835b818110156130305783516001600160a01b0316835260209384019390920191600101613009565b505083810360208501526130448189612c33565b91505082810360408401526130598187612c33565b9050828103606084015261306d8186612c33565b905082810360808401526130818185612ebc565b98975050505050505050565b6000806000604084860312156130a257600080fd5b83356130ad81612bd5565b925060208401356001600160401b038111156130c857600080fd5b8401601f810186136130d957600080fd5b80356001600160401b038111156130ef57600080fd5b86602082840101111561310157600080fd5b939660209190910195509293505050565b60006020828403121561312457600080fd5b8151612c0a81612bd5565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008261318e5761318e613153565b500490565b81810381811115610b5e57610b5e613169565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610b5e57610b5e613169565b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561322057600080fd5b8260051b808560808501379190910160800195945050505050565b60ff8281168282160390811115610b5e57610b5e613169565b60008261326357613263613153565b500690565b60006020828403121561327a57600080fd5b81518015158114612c0a57600080fd5b60006020828403121561329c57600080fd5b5051919050565b600082516132b5818460208701612f03565b9190910192915050565b600080600080608085870312156132d557600080fd5b6132de85612f9b565b93506020850135925060408501356132f581612bd5565b9396929550929360600135925050565b60006020828403121561331757600080fd5b8151612c0a81612e5356fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122078824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
-----Decoded View---------------
Arg [0] : history_ (address): 0xFa296156dAc165Af92F7Fdb012B61a874670e1AA
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode Sourcemap
13094:10739:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6794:70;;;;;;;;;;;;;:::i;:::-;;11571:91;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;11571:91:0;;;;;;;;14135:40;;;;;;;;;;-1:-1:-1;14135:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14135:40:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;872:32:1;;;854:51;;936:2;921:18;;914:34;;;;964:18;;;957:34;;;;1039:4;1027:17;;;1022:2;1007:18;;1000:45;1076:3;1061:19;;1054:35;892:3;1105:19;;1098:35;1177:14;1170:22;1164:3;1149:19;;1142:51;841:3;826:19;14135:40:0;549:650:1;15617:263:0;;;;;;;;;;-1:-1:-1;15617:263:0;;;;;:::i;:::-;;:::i;14319:32::-;;;;;;;;;;;;;;;;;;;1350:25:1;;;1338:2;1323:18;14319:32:0;1204:177:1;16004:191:0;;;;;;;;;;-1:-1:-1;16004:191:0;;;;;:::i;:::-;;:::i;15888:108::-;;;;;;;;;;-1:-1:-1;15888:108:0;;;;;:::i;:::-;;:::i;12136:409::-;;;;;;;;;;-1:-1:-1;12136:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6872:155::-;;;;;;;;;;-1:-1:-1;6872:155:0;;;;;:::i;:::-;;:::i;21576:513::-;;;;;;;;;;-1:-1:-1;21576:513:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1012:107::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1012:107:0;;22097:413;;;;;;;;;;-1:-1:-1;22097:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11670:135::-;;;;;;;;;;-1:-1:-1;11670:135:0;;;;;:::i;:::-;;:::i;:::-;;;6566:14:1;;6559:22;6541:41;;6529:2;6514:18;11670:135:0;6401:187:1;13190:35:0;;;;;;;;;;;;13223:2;13190:35;;;;;6765:4:1;6753:17;;;6735:36;;6723:2;6708:18;13190:35:0;6593:184:1;14424:29:0;;;;;;;;;;-1:-1:-1;14424:29:0;;;;-1:-1:-1;;;;;14424:29:0;;;5943:26;;;;;;;;;;-1:-1:-1;5943:26:0;;;;;;;;19004:2313;;;;;;;;;;-1:-1:-1;19004:2313:0;;;;;:::i;:::-;;:::i;11813:315::-;;;;;;;;;;-1:-1:-1;11813:315:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14511:45::-;;;;;;;;;;;;14551:5;14511:45;;6718:68;;;;;;;;;;;;;:::i;6016:28::-;;;;;;;;;;-1:-1:-1;6016:28:0;;;;;:::i;:::-;;:::i;22518:370::-;;;;;;;;;;-1:-1:-1;22518:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14384:33::-;;;;;;;;;;;;;;;;5848:40;;;;;;;;;;;;;;;7035:143;;;;;;;;;;-1:-1:-1;7035:143:0;;;;;:::i;:::-;;:::i;21325:243::-;;;;;;;;;;-1:-1:-1;21325:243:0;;;;;:::i;:::-;;:::i;22896:934::-;;;;;;;;;;-1:-1:-1;22896:934:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;7750:260::-;;;;;;:::i;:::-;;:::i;12553:102::-;;;;;;;;;;-1:-1:-1;12629:11:0;:18;12553:102;;7532:105;;;;;;;;;;;;;:::i;5783:32::-;;;;;;;;;;;;;;;6794:70;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;;;;;;;;;6851:5:::1;6842:14:::0;;-1:-1:-1;;6842:14:0::1;::::0;;6794:70::o;11571:91::-;11612:7;-1:-1:-1;;;;;;;;;;;;;;;;11639:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:22;;11571:91;:::o;15617:263::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15729:20:::1;15747:2;14666:6;15729:20;:::i;:::-;15714:11;:35;;15692:101;;;::::0;-1:-1:-1;;;15692:101:0;;13541:2:1;15692:101:0::1;::::0;::::1;13523:21:1::0;13580:2;13560:18;;;13553:30;-1:-1:-1;;;13599:18:1;;;13592:46;13655:18;;15692:101:0::1;13339:340:1::0;15692:101:0::1;15804:11;:25:::0;;;15845:27:::1;::::0;1350:25:1;;;15845:27:0::1;::::0;1338:2:1;1323:18;15845:27:0::1;;;;;;;15617:263:::0;:::o;16004:191::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16107:3:::1;16098:6;:12;16076:78;;;::::0;-1:-1:-1;;;16076:78:0;;13886:2:1;16076:78:0::1;::::0;::::1;13868:21:1::0;13925:2;13905:18;;;13898:30;-1:-1:-1;;;13944:18:1;;;13937:46;14000:18;;16076:78:0::1;13684:340:1::0;16076:78:0::1;16165:13;:22:::0;16004:191::o;15888:108::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15963:14:::1;:25:::0;;-1:-1:-1;;;;;;15963:25:0::1;-1:-1:-1::0;;;;;15963:25:0;;;::::1;::::0;;;::::1;::::0;;15888:108::o;12136:409::-;12255:11;:18;12216:16;;12249:24;;12245:81;;;12296:11;:18;;-1:-1:-1;12245:81:0;12336:20;12373:11;12379:5;12373:3;:11;:::i;:::-;-1:-1:-1;;;;;12359:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12359:26:0;-1:-1:-1;12336:49:0;-1:-1:-1;12410:5:0;12396:121;12421:3;12417:1;:7;12396:121;;;12459:11;12471:1;12459:14;;;;;;;;:::i;:::-;;;;;;;;;12442:3;12450:5;12446:1;:9;;;;:::i;:::-;12442:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;12500:3;;12396:121;;;-1:-1:-1;12534:3:0;-1:-1:-1;12136:409:0;;;;;:::o;6872:155::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6952:6:::1;6971:2;-1:-1:-1::0;;;;;6963:16:0::1;6987:6;6963:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6951:47;;;7017:1;7009:10;;;::::0;::::1;;6940:87;6872:155:::0;;:::o;21576:513::-;21644:25;;:::i;:::-;21695:386;;;;;;;;-1:-1:-1;21737:13:0;;;:5;:13;;;;;;;:20;;-1:-1:-1;;;;;21737:20:0;21695:386;;21809:13;;;;;;:21;;;;21737:20;21783:23;;;;21695:386;;;;;21783:47;;21809:21;;;21783:47;:::i;:::-;21695:386;;21854:13;;;;:5;21695:386;21854:13;;;;;;;:21;;;;;;21695:386;;;;21899:13;;;;;;;:21;;;;21695:386;;;;;;;;;;;;;;;;;;;;;21899:21;;21695:386;;21899:21;21695:386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21695:386:0;;;-1:-1:-1;;21948:13:0;;;;:5;21695:386;21948:13;;;;;;;:25;;;;21695:386;;;;21998:22;;;;;;21695:386;;;;;;;;;22046:13;;;;;;:23;;;;;21695:386;;;;;;;;-1:-1:-1;21688:393:0;21576:513::o;22097:413::-;22181:27;22238:7;22227:8;22238:7;-1:-1:-1;;;;;22302:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22263:68;;22357:6;22352:123;22373:3;22369:1;:7;22352:123;;;22408:23;22420:7;;22428:1;22420:10;;;;;;;:::i;:::-;;;;;;;22408:11;:23::i;:::-;22394:8;22403:1;22394:11;;;;;;;;:::i;:::-;;;;;;;;;;:37;22458:3;;22352:123;;;-1:-1:-1;22494:8:0;22097:413;-1:-1:-1;;;;22097:413:0:o;11670:135::-;11730:4;11754:20;;;:12;:20;;;;;;;;:29;;;:43;;-1:-1:-1;;11787:10:0;;;11670:135::o;19004:2313::-;-1:-1:-1;;;;;;;;;;;;;;;;1490:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1476:27:0;:10;-1:-1:-1;;;;;1476:27:0;;1454:94;;;;-1:-1:-1;;;1454:94:0;;15011:2:1;1454:94:0;;;14993:21:1;15050:2;15030:18;;;15023:30;-1:-1:-1;;;15069:18:1;;;15062:47;15126:18;;1454:94:0;14809:341:1;1454:94:0;-1:-1:-1;;;;;11531:24:0;;19185:14:::1;11531:24:::0;;;:13;:24;;;;;;19277:25:::1;11531:24:::0;19277:14:::1;:25::i;:::-;19354:17;19374:13:::0;;;:5:::1;:13;::::0;;;;:23:::1;::::0;::::1;::::0;19424:21:::1;::::0;;::::1;::::0;::::1;;19517:11:::0;;;:63:::1;;-1:-1:-1::0;19578:1:0::1;19546:13:::0;;;:5:::1;:13;::::0;;;;:20;-1:-1:-1;;;;;19546:20:0::1;:34:::0;19517:63:::1;:111;;;-1:-1:-1::0;19598:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;::::0;::::1;;:30;;:22:::0;:30:::1;19517:111;:142;;;-1:-1:-1::0;19645:14:0;;19517:142:::1;:171;;;-1:-1:-1::0;19676:12:0::1;::::0;::::1;::::0;19517:171:::1;19499:304;;;19720:50;19739:9;19750:6;19758:11;;19720:50;;;;;;;;;:::i;:::-;;;;;;;;19785:7;;;6940:87;6872:155:::0;;:::o;19499:304::-:1;19846:13;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;:29:::0;;-1:-1:-1;;19846:29:0::1;19871:4;19846:29;::::0;;::::1;20038:31:::0;::::1;19846:13:::0;20138:828:::1;20160:7;20156:11;;:1;:11;;;20138:828;;;20185:64:::0;;20228:5:::1;20185:64;20297:13;20331:12;20342:1:::0;13223:2:::1;20331:12;:::i;:::-;20313:31;;:11;;20325:1;20313:14;;;;;;;;;:::i;:::-;;;;;;;:31;;;;:::i;:::-;20297:47;;20371:13;20363:5;:21;20359:562;;;20472:14;20546:31;14666:6;20546:13:::0;:31:::1;:::i;:::-;20523:12;20534:1:::0;13223:2:::1;20523:12;:::i;:::-;20509:28;::::0;::::1;;:9:::0;:28:::1;:::i;:::-;20491:48;::::0;14551:5:::1;20491:48;:::i;:::-;20489:90;;;;:::i;:::-;20472:107;;20668:6;20641:5;:13;20647:6;20641:13;;;;;;;;;;;:21;;20663:1;20641:24;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:33:::0;20768:23;;;::::1;::::0;-1:-1:-1;;20888:15:0;;;;20359:562:::1;-1:-1:-1::0;20949:3:0::1;;20138:828;;;-1:-1:-1::0;21007:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:25:::1;::::0;::::1;:41:::0;;;21102:20;;21139:28:::1;::::0;;::::1;::::0;21088:80:::1;::::0;-1:-1:-1;;;;;21102:20:0::1;::::0;21035:13;;21088::::1;:80::i;:::-;21230:13;::::0;;;:5:::1;:13;::::0;;;;:20;;;21260:23;;::::1;::::0;-1:-1:-1;;;;;21230:20:0;;::::1;::::0;21220:89:::1;::::0;21236:6;;21260:33:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;21220:89;::::0;;16246:25:1;;;16302:2;16287:18;;16280:34;;;;16330:18;;16323:34;;;16234:2;16219:18;21220:89:0::1;;;;;;;19133:2184;;;;;19004:2313:::0;;;:::o;11813:315::-;11895:20;11939:7;;-1:-1:-1;;;;;11973:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11973:15:0;;11964:24;;12004:6;11999:122;12020:3;12016:1;:7;11999:122;;;12053:12;:24;12066:7;;12074:1;12066:10;;;;;;;:::i;:::-;;;;;;;12053:24;;;;;;;;;;;;;;;;;;;;;12041:6;12048:1;12041:9;;;;;;;;:::i;:::-;:36;;;:9;;;;;;;;;;;:36;12104:3;;11999:122;;;;11917:211;11813:315;;;;:::o;6718:68::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6765:6:::1;:13:::0;;-1:-1:-1;;6765:13:0::1;6774:4;6765:13;::::0;;6718:68::o;6016:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6016:28:0;:::o;22518:370::-;22604:14;22642:7;22631:8;22642:7;-1:-1:-1;;;;;22693:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22667:42;;22725:6;22720:135;22741:3;22737:1;:7;22720:135;;;22787:23;22799:7;;22807:1;22799:10;;;;;;;:::i;22787:23::-;22776:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;22762:8;22771:1;22762:11;;;;;;;;:::i;:::-;;;;;;;;;;:49;22838:3;;22720:135;;7035:143;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;7116:54:::1;7144:5;7151:10;7163:6;7116:27;:54::i;:::-;7035:143:::0;;:::o;21325:243::-;21438:7;21527:31;14666:6;21527:31;;;;:::i;:::-;21485:33;;;;:9;:33;:::i;:::-;21467:53;;14551:5;21467:53;:::i;:::-;21465:95;;;;:::i;:::-;21458:102;21325:243;-1:-1:-1;;;;21325:243:0:o;22896:934::-;22996:24;;;;;23202:7;;-1:-1:-1;;;;;23237:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23237:18:0;;23227:28;;23295:3;-1:-1:-1;;;;;23281:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23281:18:0;;23266:33;;23339:3;-1:-1:-1;;;;;23325:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23325:18:0;;23310:33;;23381:3;-1:-1:-1;;;;;23367:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23367:18:0;;23354:31;;23419:3;-1:-1:-1;;;;;23408:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23408:15:0;;23396:27;;23441:6;23436:387;23457:3;23453:1;:7;23436:387;;;23491:5;:17;23497:7;;23505:1;23497:10;;;;;;;:::i;:::-;;;;;;;23491:17;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1;;;;;23491:24:0;23478:7;23486:1;23478:10;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1;;;;;23478:37:0;;;-1:-1:-1;;;;;23478:37:0;;;;;23578:5;:17;23584:7;;23592:1;23584:10;;;;;;;:::i;:::-;;;;;;;;;;23578:17;;-1:-1:-1;23578:17:0;;;;;;;;-1:-1:-1;23578:17:0;;;:25;;;;;;23548:5;;23554:7;;23562:1;23554:10;;;;;;;:::i;:::-;;;;;;;23548:17;;;;;;;;;;;:27;;;:55;;;;:::i;:::-;23530:12;23543:1;23530:15;;;;;;;;:::i;:::-;;;;;;:73;;;;;23636:5;:17;23642:7;;23650:1;23642:10;;;;;;;:::i;:::-;;;;;;;23636:17;;;;;;;;;;;:29;;;23618:12;23631:1;23618:15;;;;;;;;:::i;:::-;;;;;;:47;;;;;23696:5;:17;23702:7;;23710:1;23702:10;;;;;;;:::i;:::-;;;;;;;23696:17;;;;;;;;;;;:27;;;23680:10;23691:1;23680:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;23753:5;:17;23759:7;;23767:1;23759:10;;;;;;;:::i;:::-;;;;;;;23753:17;;;;;;;;;;;:26;;;;;;;;;;;;23738:9;23748:1;23738:12;;;;;;;;:::i;:::-;:41;;;:12;;;;;;;;;;;:41;23806:3;;23436:387;;;;23180:650;22896:934;;;;;;;;:::o;7750:260::-;7846:6;-1:-1:-1;;;;;1631:20:0;;1641:10;1631:20;1627:182;;1694:36;;-1:-1:-1;;;1694:36:0;;1719:10;1694:36;;;160:51:1;-1:-1:-1;;;;;;;;;;;1076:42:0;1694:24;;133:18:1;;1694:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1668:129;;;;-1:-1:-1;;;1668:129:0;;16852:2:1;1668:129:0;;;16834:21:1;16891:2;16871:18;;;16864:30;16930:33;16910:18;;;16903:61;16981:18;;1668:129:0;16650:355:1;1668:129:0;-1:-1:-1;;;;;;;;;;;;;;;;1890:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;1868:91;;;::::0;-1:-1:-1;;;1868:91:0;;17212:2:1;1868:91:0::1;::::0;::::1;17194:21:1::0;17251:2;17231:18;;;17224:30;-1:-1:-1;;;17270:18:1;;;17263:46;17326:18;;1868:91:0::1;17010:340:1::0;1868:91:0::1;7900:6:::2;::::0;::::2;;7899:7;7877:63;;;::::0;-1:-1:-1;;;7877:63:0;;17557:2:1;7877:63:0::2;::::0;::::2;17539:21:1::0;17596:1;17576:18;;;17569:29;-1:-1:-1;;;17614:18:1;;;17607:36;17660:18;;7877:63:0::2;17355:329:1::0;7877:63:0::2;7975:27;7985:6;7993:8;;7975:9;:27::i;:::-;7750:260:::0;;;;:::o;7532:105::-;7574:7;-1:-1:-1;;;;;;;;;;;;;;;;7606:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7601:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11201:224::-;-1:-1:-1;;;;;;;;;;;;;;;;11307:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11300:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;11393:24:0;;;;;:13;:24;;;;;11386:31;11201:224::o;8105:1941::-;8217:17;;8213:1824;;8326:14;8309:13;:31;8305:1552;;-1:-1:-1;;;;;;;;;;;;;;;;8696:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8682:145;;-1:-1:-1;;;8682:145:0;;8772:7;8682:145;;;18052:25:1;-1:-1:-1;;;;;18113:32:1;;;18093:18;;;18086:60;8682:44:0;;;;;;;8734:14;;18025:18:1;;8682:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8887:17;8923:14;8907:13;:30;;;;:::i;:::-;8887:50;-1:-1:-1;8960:13:0;;8956:175;;-1:-1:-1;;;;;;;;;;;;;;;;9060:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9053:58;;-1:-1:-1;;;9053:58:0;;9084:7;9053:58;;;18359:25:1;-1:-1:-1;;;;;18420:32:1;;;18400:18;;;18393:60;18469:18;;;18462:34;;;9053:30:0;;;;;;;18332:18:1;;9053:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:822;6940:87:::1;6872:155:::0;;:::o;8305:1552::-;-1:-1:-1;;;;;;;;;;;;;;;;9443:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9429:144;;-1:-1:-1;;;9429:144:0;;9518:7;9429:144;;;18052:25:1;-1:-1:-1;;;;;18113:32:1;;;18093:18;;;18086:60;9429:44:0;;;;;;;9481:13;;18025:18:1;;9429:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9653:17;9690:13;9673:14;:30;;;;:::i;:::-;9653:50;;-1:-1:-1;;;;;;;;;;;;;;;;9783:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9776:35:0;;9819:9;9831:7;9776:63;;;;;;;;;;;;;1350:25:1;;1338:2;1323:18;;1204:177;9776:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9170:687;6940:87:::1;6872:155:::0;;:::o;8213:1824::-;-1:-1:-1;;;;;;;;;;;;;;;;9964:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:35:0;;10000:14;10017:7;9957:68;;;;;;;;;;;;;1350:25:1;;1338:2;1323:18;;1204:177;9957:68:0;;;;;;;;;;;;;;;;;;;;3503:449;3735:45;;;-1:-1:-1;;;;;18699:32:1;;;3735:45:0;;;18681:51:1;18748:18;;;;18741:34;;;3735:45:0;;;;;;;;;;18654:18:1;;;;3735:45:0;;;;;;;-1:-1:-1;;;;;3735:45:0;-1:-1:-1;;;3735:45:0;;;3724:57;;-1:-1:-1;;;;3724:10:0;;;;:57;;3735:45;3724:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:93;;;;3814:7;:57;;;;-1:-1:-1;3826:11:0;;:16;;:44;;;3857:4;3846:24;;;;;;;;;;;;:::i;:::-;3792:152;;;;-1:-1:-1;;;3792:152:0;;19280:2:1;3792:152:0;;;19262:21:1;19319:2;19299:18;;;19292:30;19358:34;19338:18;;;19331:62;-1:-1:-1;;;19409:18:1;;;19402:43;19462:19;;3792:152:0;19078:409:1;3792:152:0;3610:342;;3503:449;;;:::o;16203:2727::-;16324:14;16341:11;:9;:11::i;:::-;16324:28;-1:-1:-1;16408:13:0;;;;16527:56;;;;16538:8;16527:56;:::i;:::-;16393:190;;;;;;;;16659:6;16646:9;:19;;16624:84;;;;-1:-1:-1;;;16624:84:0;;20213:2:1;16624:84:0;;;20195:21:1;20252:2;20232:18;;;20225:30;-1:-1:-1;;;20271:18:1;;;20264:45;20326:18;;16624:84:0;20011:339:1;16624:84:0;16741:21;16755:6;16741:13;:21::i;:::-;:29;;16766:4;16741:29;16719:99;;;;-1:-1:-1;;;16719:99:0;;20557:2:1;16719:99:0;;;20539:21:1;20596:2;20576:18;;;20569:30;-1:-1:-1;;;20615:18:1;;;20608:50;20675:18;;16719:99:0;20355:344:1;16719:99:0;16861:1;16851:7;:11;;;:33;;;;-1:-1:-1;13223:2:0;16866:18;;;;16851:33;16829:105;;;;-1:-1:-1;;;16829:105:0;;20906:2:1;16829:105:0;;;20888:21:1;20945:2;20925:18;;;20918:30;-1:-1:-1;;;20964:18:1;;;20957:52;21026:18;;16829:105:0;20704:346:1;16829:105:0;16986:22;17011:18;17023:6;17011:9;:18;:::i;:::-;16986:43;;17090:25;14666:6;17137:11;;17120:14;:28;;;;:::i;:::-;17118:50;;;;:::i;:::-;17185:14;;17090:78;;-1:-1:-1;;;;;;17185:14:0;:28;;:50;;-1:-1:-1;17217:13:0;;:18;17185:50;17181:680;;;17322:43;17334:17;17353:3;17358:6;17322:11;:43::i;:::-;17181:680;;;17430:18;17491:3;17473:13;;17453:17;:33;;;;:::i;:::-;17451:43;;;;:::i;:::-;17430:64;-1:-1:-1;17554:26:0;17583:30;17430:64;17583:17;:30;:::i;:::-;17554:59;;17698:44;17710:18;17730:3;17735:6;17698:11;:44::i;:::-;17822:14;;17791:58;;-1:-1:-1;;;;;17822:14:0;17838:10;17791:30;:58::i;:::-;17385:476;;17181:680;17906:17;17926:24;;;;:14;:24;:::i;:::-;17906:44;;18019:1;18007:9;:13;17985:81;;;;-1:-1:-1;;;17985:81:0;;21257:2:1;17985:81:0;;;21239:21:1;21296:2;21276:18;;;21269:30;-1:-1:-1;;;21315:18:1;;;21308:48;21373:18;;17985:81:0;21055:342:1;17985:81:0;18143:43;18155:17;18174:3;18179:6;18143:11;:43::i;:::-;18226:13;;;;:5;:13;;;;;:29;;-1:-1:-1;;;;;;18226:29:0;-1:-1:-1;;;;;18226:29:0;;;;;-1:-1:-1;18266:23:0;:35;;;18343:34;18360:17;18343:14;:34;:::i;:::-;18312:13;;;;:5;:13;;;;;:28;;;:65;;;;18388:21;;;:31;;-1:-1:-1;;18388:31:0;;;;;;;;;;18456:15;18430:23;;;;:41;;;;-1:-1:-1;;;;;18506:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18506:22:0;-1:-1:-1;18482:13:0;;;;:5;:13;;;;;;;;:46;;;;:21;;;;;:46;;;:::i;:::-;;18647:31;18663:6;18671;18647:15;:31::i;:::-;18716:36;18729:6;18737:14;18716:12;:36::i;:::-;18813:6;-1:-1:-1;;;;;18801:27:0;;18821:6;18801:27;;;;1350:25:1;;1338:2;1323:18;;1204:177;18801:27:0;;;;;;;;18873:47;18888:6;18896:7;18905:14;18873;:47::i;:::-;16281:2649;;;;;;;;16203:2727;;;:::o;7348:172::-;-1:-1:-1;;;;;;;;;;;;;;;;7451:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7437:75;;-1:-1:-1;;;7437:75:0;;-1:-1:-1;;;;;21594:32:1;;;7437:75:0;;;21576:51:1;21663:32;;;21643:18;;;21636:60;7437:44:0;;;;;;;7489:9;;21549:18:1;;7437:75:0;21402:300:1;4466:217:0;4579:12;;;4539;4579;;;;;;;;;-1:-1:-1;;;;;4557:7:0;;;4572:5;;4557:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:54;;;4611:7;4603:72;;;;-1:-1:-1;;;4603:72:0;;21909:2:1;4603:72:0;;;21891:21:1;21948:2;21928:18;;;21921:30;21987:34;21967:18;;;21960:62;-1:-1:-1;;;22038:18:1;;;22031:50;22098:19;;4603:72:0;21707:416:1;10135:272:0;10243:40;;-1:-1:-1;;;10243:40:0;;-1:-1:-1;;;;;22348:32:1;;;10243:40:0;;;22330:51:1;10267:7:0;22397:18:1;;;22390:34;22440:18;;;22433:34;;;10243:7:0;:15;;;;22303:18:1;;10243:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10337:11:0;:24;;;;;;;;;;;;-1:-1:-1;10372:20:0;;;:12;10337:24;10372:20;;;;;:27;;-1:-1:-1;;10372:27:0;;;;;;;-1:-1:-1;;;10135:272:0:o;7186:154::-;-1:-1:-1;;;;;;;;;;;;;;;;7275:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7258:74;;-1:-1:-1;;;7258:74:0;;-1:-1:-1;;;;;22348:32:1;;;7258:74:0;;;22330:51:1;22397:18;;;22390:34;;;7324:7:0;22440:18:1;;;22433:34;7258:51:0;;;;;;;22303:18:1;;7258:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:154;;:::o;10415:778::-;10568:16;-1:-1:-1;;;;;;;;;;;;;;;;10592:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10587:33:0;;10628:11;:9;:11::i;:::-;10587:185;;-1:-1:-1;;;;;;10587:185:0;;;;;;;;;;22648:25:1;;;22721:4;22709:17;;22689:18;;;22682:45;22621:18;;10587:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10856:24:0;;;;;;:13;:24;;;;;;10568:204;;-1:-1:-1;10856:29:0;10834:95;;;;-1:-1:-1;;;10834:95:0;;23194:2:1;10834:95:0;;;23176:21:1;23233:2;23213:18;;;23206:30;-1:-1:-1;;;23252:18:1;;;23245:46;23308:18;;10834:95:0;22992:340:1;10834:95:0;-1:-1:-1;;;;;11000:24:0;;;;;;:13;:24;;;;;;;;;:33;;;11083:15;;-1:-1:-1;;;;;;11083:15:0;;;;-1:-1:-1;;;;;;;;;;;1076:42:0;11083:13;;:15;;;;;11000:24;;11083:15;;;;;1076:42;11083:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11076:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:27;11178:6;11158:27;;;;1350:25:1;;1338:2;1323:18;;1204:177;11158:27:0;;;;;;;;10504:689;10415:778;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:226:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;395:23:1;;222:226;-1:-1:-1;222:226:1:o;1386:131::-;-1:-1:-1;;;;;1461:31:1;;1451:42;;1441:70;;1507:1;1504;1497:12;1441:70;1386:131;:::o;1522:247::-;1581:6;1634:2;1622:9;1613:7;1609:23;1605:32;1602:52;;;1650:1;1647;1640:12;1602:52;1689:9;1676:23;1708:31;1733:5;1708:31;:::i;:::-;1758:5;1522:247;-1:-1:-1;;;1522:247:1:o;1774:346::-;1842:6;1850;1903:2;1891:9;1882:7;1878:23;1874:32;1871:52;;;1919:1;1916;1909:12;1871:52;-1:-1:-1;;1964:23:1;;;2084:2;2069:18;;;2056:32;;-1:-1:-1;1774:346:1:o;2125:420::-;2178:3;2216:5;2210:12;2243:6;2238:3;2231:19;2275:4;2270:3;2266:14;2259:21;;2314:4;2307:5;2303:16;2337:1;2347:173;2361:6;2358:1;2355:13;2347:173;;;2422:13;;2410:26;;2465:4;2456:14;;;;2493:17;;;;2383:1;2376:9;2347:173;;;-1:-1:-1;2536:3:1;;2125:420;-1:-1:-1;;;;2125:420:1:o;2550:261::-;2729:2;2718:9;2711:21;2692:4;2749:56;2801:2;2790:9;2786:18;2778:6;2749:56;:::i;2816:367::-;2884:6;2892;2945:2;2933:9;2924:7;2920:23;2916:32;2913:52;;;2961:1;2958;2951:12;2913:52;3000:9;2987:23;3019:31;3044:5;3019:31;:::i;:::-;3069:5;3147:2;3132:18;;;;3119:32;;-1:-1:-1;;;2816:367:1:o;3188:1007::-;3318:12;;-1:-1:-1;;;;;3314:38:1;3302:51;;3402:4;3391:16;;;3385:23;3369:14;;;3362:47;3462:4;3451:16;;;3445:23;3470:4;3441:34;3425:14;;;3418:58;3522:4;3511:16;;;3505:23;3288:4;3544:14;;;3537:28;;;3614:19;;3279:14;;;3642:20;;;3249:3;;3716:23;;3249:3;;3689;3680:13;;;3767:179;3781:6;3778:1;3775:13;3767:179;;;3850:6;3844:13;3837:5;3830:28;3891:4;3884:5;3880:16;3871:25;;3931:4;3923:6;3919:17;3909:27;;3803:1;3800;3796:9;3791:14;;3767:179;;;3771:3;3995:4;3988:5;3984:16;3978:23;3971:4;3966:3;3962:14;3955:47;4050:4;4043:5;4039:16;4033:23;4011:45;;4065:47;4106:4;4101:3;4097:14;4081;523:13;516:21;504:34;;453:91;4065:47;4161:4;4154:5;4150:16;4144:23;4137:4;4132:3;4128:14;4121:47;4184:5;4177:12;;;;;3188:1007;;;;:::o;4200:291::-;4401:2;4390:9;4383:21;4364:4;4421:64;4481:2;4470:9;4466:18;4458:6;4421:64;:::i;4729:367::-;4792:8;4802:6;4856:3;4849:4;4841:6;4837:17;4833:27;4823:55;;4874:1;4871;4864:12;4823:55;-1:-1:-1;4897:20:1;;-1:-1:-1;;;;;4929:30:1;;4926:50;;;4972:1;4969;4962:12;4926:50;5009:4;5001:6;4997:17;4985:29;;5069:3;5062:4;5052:6;5049:1;5045:14;5037:6;5033:27;5029:38;5026:47;5023:67;;;5086:1;5083;5076:12;5023:67;4729:367;;;;;:::o;5101:437::-;5187:6;5195;5248:2;5236:9;5227:7;5223:23;5219:32;5216:52;;;5264:1;5261;5254:12;5216:52;5304:9;5291:23;-1:-1:-1;;;;;5329:6:1;5326:30;5323:50;;;5369:1;5366;5359:12;5323:50;5408:70;5470:7;5461:6;5450:9;5446:22;5408:70;:::i;:::-;5497:8;;5382:96;;-1:-1:-1;5101:437:1;-1:-1:-1;;;;5101:437:1:o;5543:853::-;5757:4;5805:2;5794:9;5790:18;5835:2;5824:9;5817:21;5858:6;5893;5887:13;5924:6;5916;5909:22;5962:2;5951:9;5947:18;5940:25;;6024:2;6014:6;6011:1;6007:14;5996:9;5992:30;5988:39;5974:53;;6062:2;6054:6;6050:15;6083:1;6093:274;6107:6;6104:1;6101:13;6093:274;;;6200:2;6196:7;6184:9;6176:6;6172:22;6168:36;6163:3;6156:49;6228:59;6280:6;6271;6265:13;6228:59;:::i;:::-;6218:69;-1:-1:-1;6322:2:1;6345:12;;;;6310:15;;;;;6129:1;6122:9;6093:274;;;-1:-1:-1;6384:6:1;;5543:853;-1:-1:-1;;;;;;5543:853:1:o;6782:129::-;-1:-1:-1;;;;;6860:5:1;6856:30;6849:5;6846:41;6836:69;;6901:1;6898;6891:12;6916:570;7010:6;7018;7026;7079:2;7067:9;7058:7;7054:23;7050:32;7047:52;;;7095:1;7092;7085:12;7047:52;7134:9;7121:23;7153:30;7177:5;7153:30;:::i;:::-;7202:5;-1:-1:-1;7258:2:1;7243:18;;7230:32;-1:-1:-1;;;;;7274:30:1;;7271:50;;;7317:1;7314;7307:12;7271:50;7356:70;7418:7;7409:6;7398:9;7394:22;7356:70;:::i;:::-;6916:570;;7445:8;;-1:-1:-1;7330:96:1;;-1:-1:-1;;;;6916:570:1:o;7491:433::-;7541:3;7579:5;7573:12;7606:6;7601:3;7594:19;7638:4;7633:3;7629:14;7622:21;;7677:4;7670:5;7666:16;7700:1;7710:189;7724:6;7721:1;7718:13;7710:189;;;7799:13;;7792:21;7785:29;7773:42;;7844:4;7835:14;;;;7872:17;;;;7746:1;7739:9;7710:189;;7929:252;8102:2;8091:9;8084:21;8065:4;8122:53;8171:2;8160:9;8156:18;8148:6;8122:53;:::i;8186:250::-;8271:1;8281:113;8295:6;8292:1;8289:13;8281:113;;;8371:11;;;8365:18;8352:11;;;8345:39;8317:2;8310:10;8281:113;;;-1:-1:-1;;8428:1:1;8410:16;;8403:27;8186:250::o;8441:991::-;8601:4;8649:2;8638:9;8634:18;8679:2;8668:9;8661:21;8702:6;8737;8731:13;8768:6;8760;8753:22;8806:2;8795:9;8791:18;8784:25;;8868:2;8858:6;8855:1;8851:14;8840:9;8836:30;8832:39;8818:53;;8906:2;8898:6;8894:15;8927:1;8937:466;8951:6;8948:1;8945:13;8937:466;;;9044:2;9040:7;9028:9;9020:6;9016:22;9012:36;9007:3;9000:49;9078:6;9072:13;9120:2;9114:9;9151:8;9143:6;9136:24;9173:74;9238:8;9233:2;9225:6;9221:15;9216:2;9212;9208:11;9173:74;:::i;:::-;9313:2;9290:17;-1:-1:-1;;9286:31:1;9274:44;;;;9320:2;9270:53;;;;-1:-1:-1;9381:12:1;;;;9346:15;;;;;8973:1;8966:9;8937:466;;9668:156;9734:20;;9794:4;9783:16;;9773:27;;9763:55;;9814:1;9811;9804:12;9763:55;9668:156;;;:::o;9829:366::-;9902:6;9910;9918;9971:2;9959:9;9950:7;9946:23;9942:32;9939:52;;;9987:1;9984;9977:12;9939:52;10032:23;;;-1:-1:-1;10098:36:1;10130:2;10115:18;;10098:36;:::i;:::-;10088:46;;10153:36;10185:2;10174:9;10170:18;10153:36;:::i;:::-;10143:46;;9829:366;;;;;:::o;10200:1424::-;10696:3;10709:22;;;10780:13;;10681:19;;;10802:22;;;10648:4;;10894;10882:17;;;10855:3;10840:19;;;10648:4;10927:199;10941:6;10938:1;10935:13;10927:199;;;11006:13;;-1:-1:-1;;;;;11002:39:1;10990:52;;11071:4;11099:17;;;;11062:14;;;;11038:1;10956:9;10927:199;;;10931:3;;11173:9;11168:3;11164:19;11157:4;11146:9;11142:20;11135:49;11207:41;11244:3;11236:6;11207:41;:::i;:::-;11193:55;;;11296:9;11288:6;11284:22;11279:2;11268:9;11264:18;11257:50;11330:44;11367:6;11359;11330:44;:::i;:::-;11316:58;;11422:9;11414:6;11410:22;11405:2;11394:9;11390:18;11383:50;11456:44;11493:6;11485;11456:44;:::i;:::-;11442:58;;11549:9;11541:6;11537:22;11531:3;11520:9;11516:19;11509:51;11577:41;11611:6;11603;11577:41;:::i;:::-;11569:49;10200:1424;-1:-1:-1;;;;;;;;10200:1424:1:o;11629:721::-;11708:6;11716;11724;11777:2;11765:9;11756:7;11752:23;11748:32;11745:52;;;11793:1;11790;11783:12;11745:52;11832:9;11819:23;11851:31;11876:5;11851:31;:::i;:::-;11901:5;-1:-1:-1;11957:2:1;11942:18;;11929:32;-1:-1:-1;;;;;11973:30:1;;11970:50;;;12016:1;12013;12006:12;11970:50;12039:22;;12092:4;12084:13;;12080:27;-1:-1:-1;12070:55:1;;12121:1;12118;12111:12;12070:55;12161:2;12148:16;-1:-1:-1;;;;;12179:6:1;12176:30;12173:50;;;12219:1;12216;12209:12;12173:50;12264:7;12259:2;12250:6;12246:2;12242:15;12238:24;12235:37;12232:57;;;12285:1;12282;12275:12;12232:57;11629:721;;12316:2;12308:11;;;;;-1:-1:-1;12338:6:1;;-1:-1:-1;;;11629:721:1:o;12355:251::-;12425:6;12478:2;12466:9;12457:7;12453:23;12449:32;12446:52;;;12494:1;12491;12484:12;12446:52;12526:9;12520:16;12545:31;12570:5;12545:31;:::i;12611:334::-;12813:2;12795:21;;;12852:2;12832:18;;;12825:30;-1:-1:-1;;;12886:2:1;12871:18;;12864:40;12936:2;12921:18;;12611:334::o;12950:127::-;13011:10;13006:3;13002:20;12999:1;12992:31;13042:4;13039:1;13032:15;13066:4;13063:1;13056:15;13082:127;13143:10;13138:3;13134:20;13131:1;13124:31;13174:4;13171:1;13164:15;13198:4;13195:1;13188:15;13214:120;13254:1;13280;13270:35;;13285:18;;:::i;:::-;-1:-1:-1;13319:9:1;;13214:120::o;14029:128::-;14096:9;;;14117:11;;;14114:37;;;14131:18;;:::i;14162:127::-;14223:10;14218:3;14214:20;14211:1;14204:31;14254:4;14251:1;14244:15;14278:4;14275:1;14268:15;14294:127;14355:10;14350:3;14346:20;14343:1;14336:31;14386:4;14383:1;14376:15;14410:4;14407:1;14400:15;14636:168;14709:9;;;14740;;14757:15;;;14751:22;;14737:37;14727:71;;14778:18;;:::i;15155:611::-;-1:-1:-1;;;;;15399:31:1;;15381:50;;15462:2;15447:18;;15440:34;;;15510:2;15505;15490:18;;15483:30;;;15529:18;;15522:34;;;-1:-1:-1;;;;;;15568:31:1;;15565:51;;;15612:1;15609;15602:12;15565:51;15646:6;15643:1;15639:14;15704:6;15696;15690:3;15679:9;15675:19;15662:49;15732:22;;;;15756:3;15728:32;;15155:611;-1:-1:-1;;;;;15155:611:1:o;15771:151::-;15861:4;15854:12;;;15840;;;15836:31;;15879:14;;15876:40;;;15896:18;;:::i;15927:112::-;15959:1;15985;15975:35;;15990:18;;:::i;:::-;-1:-1:-1;16024:9:1;;15927:112::o;16368:277::-;16435:6;16488:2;16476:9;16467:7;16463:23;16459:32;16456:52;;;16504:1;16501;16494:12;16456:52;16536:9;16530:16;16589:5;16582:13;16575:21;16568:5;16565:32;16555:60;;16611:1;16608;16601:12;17689:184;17759:6;17812:2;17800:9;17791:7;17787:23;17783:32;17780:52;;;17828:1;17825;17818:12;17780:52;-1:-1:-1;17851:16:1;;17689:184;-1:-1:-1;17689:184:1:o;18786:287::-;18915:3;18953:6;18947:13;18969:66;19028:6;19023:3;19016:4;19008:6;19004:17;18969:66;:::i;:::-;19051:16;;;;;18786:287;-1:-1:-1;;18786:287:1:o;19492:514::-;19584:6;19592;19600;19608;19661:3;19649:9;19640:7;19636:23;19632:33;19629:53;;;19678:1;19675;19668:12;19629:53;19701:27;19718:9;19701:27;:::i;:::-;19691:37;-1:-1:-1;19797:2:1;19782:18;;19769:32;;-1:-1:-1;19877:2:1;19862:18;;19849:32;19890:33;19849:32;19890:33;:::i;:::-;19492:514;;;;-1:-1:-1;19942:7:1;;19996:2;19981:18;19968:32;;-1:-1:-1;;19492:514:1:o;22738:249::-;22807:6;22860:2;22848:9;22839:7;22835:23;22831:32;22828:52;;;22876:1;22873;22866:12;22828:52;22908:9;22902:16;22927:30;22951:5;22927:30;:::i
Swarm Source
ipfs://78824013472f108b199f3a5b726ae2dd718d60799d2cd3b007d8b425584f4baf
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.