interface IRaffleMaster {
event RaffleClosed(uint256 indexed raffleId);
event RaffleDrawn(uint256 indexed raffleId, address indexed winner);
event RaffleEntered(address indexed user, uint256 indexed raffleId, uint256 tickets);
event RaffleStarted(uint256 indexed raffleId, tuple(uint256 id, address[] rewards, uint256[] rewardAmounts, uint256 maxWinners, uint64 duration) raffleType);
event RaffleTypeActivated(uint256 indexed raffleTypeId, uint256 bucket);
event RaffleTypeAdded(uint256 indexed id, tuple(uint256 id, address[] rewards, uint256[] rewardAmounts, uint256 maxWinners, uint64 duration) raffleType);
event RaffleTypeDeactivated(uint256 indexed raffleTypeId, uint256 bucket);
function activeRaffleTypes(uint256, uint256) view returns (uint256);
function addActiveRaffleType(uint256 _id, uint256 _bucket);
function addAndActivateRaffleType(address[] _rewards, uint256[] _rewardAmounts, uint256 _maxWinners, uint64 _duration, uint256[] _buckets);
function addRaffleType(address[] _rewards, uint256[] _rewardAmounts, uint256 _maxWinners, uint64 _duration);
function closeRaffles();
function createRaffle(uint256 _raffleTypeId, uint256 _bucket);
function currentRaffleBuckets(uint256) view returns (uint256);
function drawWinners();
function enterRaffle(uint256 _raffleId, uint256 _tickets);
function entries(uint256, uint256) view returns (address);
function getCurrentRaffleBuckets() view returns (uint256[]);
function getCurrentRaffleData() view returns (tuple(uint256 id, uint256 raffleType, uint256 startTime, uint256 totalEntries, uint256 endTime, uint256 closedBlock, address[] winners, uint8 status)[], tuple(uint256 id, address[] rewards, uint256[] rewardAmounts, uint256 maxWinners, uint64 duration)[], uint256[], uint256[]);
function getLastRaffleBuckets() view returns (uint256[]);
function getPreviousRaffleData() view returns (tuple(uint256 id, uint256 raffleType, uint256 startTime, uint256 totalEntries, uint256 endTime, uint256 closedBlock, address[] winners, uint8 status)[], tuple(uint256 id, address[] rewards, uint256[] rewardAmounts, uint256 maxWinners, uint64 duration)[], uint256[], uint256[]);
function getRaffleList(uint256[] _raffleBuckets) view returns (tuple(uint256 id, uint256 raffleType, uint256 startTime, uint256 totalEntries, uint256 endTime, uint256 closedBlock, address[] winners, uint8 status)[]);
function getRaffleTicketsAllowanceList(uint256[] _raffleBuckets) view returns (uint256[]);
function getRaffleTicketsList(uint256[] _raffleBuckets) view returns (uint256[]);
function getRaffleTypesList(uint256[] _raffleBuckets) view returns (tuple(uint256 id, address[] rewards, uint256[] rewardAmounts, uint256 maxWinners, uint64 duration)[]);
function getTicketAllowance(address _user, uint256 _raffleId) view returns (uint256);
function lastRaffleBuckets(uint256) view returns (uint256);
function playerEntries(uint256, address) view returns (uint256);
function raffleTypes(uint256) view returns (uint256 id, uint256 maxWinners, uint64 duration);
function raffles(uint256) view returns (uint256 id, uint256 raffleType, uint256 startTime, uint256 totalEntries, uint256 endTime, uint256 closedBlock, uint8 status);
function removeActiveRaffleType(uint256 _index, uint256 _bucket);
function setRaffleType(uint256 _raffleTypeId, address[] _rewards, uint256[] _rewardAmounts, uint256 _maxWinners, uint64 _duration);
function startRandomRaffle(uint256 _bucket);
function startRandomRaffles(uint256[] _buckets);
function timePerTicket() view returns (uint256);
function totalRaffleTypes() view returns (uint256);
function totalRaffles() view returns (uint256);
}
interface IGoldPot {
event Claim(address _from, uint256 _period, uint256 _amount);
event Deposit(address _from, uint256 _period, uint256 _amount);
event Enter(address _from, uint256 _period, uint256 _amount);
event NewPeriod(uint256 _period);
function claim(uint256 _period);
function currentPeriod() view returns (uint256);
function deposit(uint256 _amount);
function enter(uint256 _tickets);
function getCurrentData() view returns (uint256, uint256, uint256, uint256, uint256, uint256);
function getCurrentPeriod() returns (uint256);
function getPeriodStartTime(uint256 _period) view returns (uint256);
function getTicketAllowance(address _user, uint256 _period) view returns (uint256);
function getUnclaimedPeriods(address _user) view returns (uint256[]);
function periodDuration() view returns (uint256);
function periodTotalGold(uint256) view returns (uint256);
function periodTotalTickets(uint256) view returns (uint256);
function timePerTicket() view returns (uint256);
}